IN Lookup Postgres запрос в подготовленном операторе, Golang - PullRequest
0 голосов
/ 03 февраля 2020

Вариант использования требует выполнения запросов на исключение. Примерно так:

select col1 
from awesome_table 
where col2 not in (a,b,c,d) 
and col3 not in (a1,a2,a3,a4);

Поскольку набор исключенных значений col1 и исключенных значений col2 имеет переменный размер, каков хороший способ создания подготовленного оператора? Один из способов, который я могу придумать, - это определить верхний предел для набора, скажем, 15, и заполнить все заполнители повторяющимися значениями, если количество вводимых пользователем размеров набора запросов меньше максимального значения, есть ли лучший способ? И как подготовленные заявления предполагают, чтобы справиться с этим, согласно философии сообщества?

1 Ответ

1 голос
/ 03 февраля 2020

Можете ли вы передать (Postgres) массивы из Go?

Затем вы можете переписать оператор в

where col2 <> ALL ($1) 
  and col3 <> all ($2)

, где $1 и $2 - это (Postgres) массивы, содержащие значения.

Если вы можете Не передавая правильные экземпляры массива, вы можете передать значения в виде строки, которая отформатирована так, чтобы ее можно было привести к массиву.

select col1 
from awesome_table 
where col2 <> ALL ( (cast $1 as int[]) ) 
  and col3 <> ALL ( (cast $2 as text[]) );

Тогда вы можете передать '{1,2,3}' для первого параметра и, например, '{"foo", "bar"}' в качестве второго параметра. Вам необходимо настроить типы массивов в соответствии с фактическими типами данных ваших столбцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...