Частичный индекс используется, только когда планировщик может показать, что WHERE запроса влечёт условие индекса. Документация говорит, что сопоставление идёт при планировании, а не при выполнении, поэтому условие вроде status = $1 никогда не влечёт status = 'queued' для всех значений, которые может принять параметр.
Индекс стоит на таблице очереди заданий. CREATE INDEX jobs_queued ON jobs (id) WHERE status = 'queued'. Из Go вызов db.QueryContext(ctx, q, "queued") с status = $1 в тексте вернёт те же строки, что и версия с литералом. Отличаться может план.
Подготовленные операторы делают всё менее предсказуемым, чем следует из той одной фразы. Если драйвер готовит оператор и переиспользует его, а plan_cache_mode стоит в auto, первые пять выполнений получают специализированные планы под фактическое значение, и такой план может совпасть с условием индекса. Потом сервер может перейти на общий план, если его оценка стоимости достаточно близка, а общий план из-за этого условия индекс использовать не может. Перейдёт ли он, зависит от сравнения стоимостей.
Правило, которое я оставляю, простое. Значение, которое выбирает частичный индекс, пишется в тексте запроса литералом.