`WHERE col IN` с именованными параметрами - PullRequest
0 голосов
/ 17 мая 2018

В примере использования параметризованных запросов с предложением IN синтаксис выглядит следующим образом:

const data = [1, 'two', 3, 'four'];

db.any('SELECT * FROM table WHERE id IN ($1:csv)', [data])
    .then(data => {
...

Я не могу заставить это работать для именованных параметров:

db.manyOrNone('SELECT widget FROM widgets WHERE id IN ($(ids:list))', 
              { ids: [1, 2, 3] })

(я использую :list, поскольку он, по-видимому, взаимозаменяем с :csv). Я пробовал различные комбинации, такие как:

  • ($(ids):list) (синтаксическая ошибка в или рядом с ":")
  • (${ids:list}) (синтаксическая ошибка в или около "$")

Я получаю недопустимые синтаксические ошибки от Postgres. Это поддерживается? Или я должен передать параметры в виде массива и ссылаться на них, как в примере?

Версии:

  • Postgres: 9,5,7
  • pg-обещание: 5.7.1

UPDATE Я изменил свой параметр на ... WHERE widget IN ($(ids:csv))..., и теперь он работает, поэтому кажется, что :list и :csv не взаимозаменяемы.

1 Ответ

0 голосов
/ 17 мая 2018

Проблема в том, что вы используете древнюю версию pg-обещания . Текущая версия 8.4.4, и вы используете 5.7.1

Псевдоним :list полностью взаимозаменяем с :csv, но он был добавлен намного позже, чем v5.7.1

Обновитесь до последней версии, и она будет работать также с :list.

Также предположим, что все, что в текущей документации, относится соответственно к текущей версии библиотеки.

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