Задать вопрос
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).

Sqlx + pgx — выборка по набору пар значений столбцов без танцев с бубном?

PostgreSQL v11.13 (переход на более новую версию НЕ предлагать),
Go v1.26.4,
github.com/jackc/pgx v5.10.0
github.com/jmoiron/sqlx v1.4.0

Задача: максимально просто выполнить параметризованный SELECT, выбирающий записи по заданному набору пар значений столбцов. Что-то вроде такого:
SELECT * FROM tbl WHERE (field_1, field_2) = ANY(VALUES (1, 'a'), (2, 'b'), (3, 'c'))

, но с передачей среза кортежей в качестве параметра запроса.

Именно среза - без дополнительных ручных преобразований данных в коде.

Работающий вариант есть:
SELECT * FROM tbl
WHERE (field_1, field_2) IN (SELECT p, k FROM JSONB_TO_RECORDSET($1) AS t(a BIGINT, b VARCHAR))

, но он требует ручного преобразования исходного среза в JSON:
type Key struct {
	V1 int64  `db:"field_1" json:"a"`
	V2 string `db:"field_2" json:"b"`
}
...
var keys []Key
...
req, err := json.Marshal(keys)
if err != nil {
	return nil, err
}
rows, err := db.Queryx(sql, string(req))

Вопрос: как переписать запрос, чтобы можно было передавать в качестве параметра непосредственно значение типа []Key?
  • Вопрос задан
  • 11 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия DevOps-инженер + ИИ
    5 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
[]Key напрямую не передашь — либо composite type в pg + LoadType/RegisterType, либо в лоб: unnest на двух срезах без JSON
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы