Привязка параметров с помощью sequelize завершается неудачей, если несколько

#postgresql #sequelize.js

#postgresql #sequelize.js

Вопрос:

База данных — Postgres (а в Sequelize есть поддержка параметра bind для Postgres).

Странная вещь.

При выполнении необработанного запроса и привязке параметров таким образом:

 return models.sequelize.query(q, {bind: ['33', 'test']}).then(function (data) {
  

Тогда sequelize, похоже, завершается ошибкой в параметрах привязки.

Сам запрос выглядит примерно так

 select * from A where id = $1    
  

Как только я удаляю второй элемент в массиве, переданном в bind, привязка работает.
Но когда имеется более одного элемента, $ 1 не преобразуется в значение. Это то, что я вижу в журнале.
Запрос, в котором присутствует только параметр привязки, будет напечатан

 select * from A where id = 33
  

В то время как запрос, в котором добавлено более одного параметра привязки, будет печатать

 select * from A where id = $1
  

Ответ №1:

Моя ошибка. Я не смотрел на реальное сообщение об ошибке, отправленное клиентом. Это не имело никакого отношения к количеству параметров. Проблема заключалась в том, что при использовании LIKE у меня было что-то вроде:

 and name LIKE '%$2%'
  

Это приводит к ошибке:
сообщение привязки предоставляет 2 параметра, но для подготовленной инструкции требуется 1

Что было реальной проблемой.

Ответ №2:

Я понимаю, что это старый поток. Однако это может быть обходным решением для тех, кто сталкивается с этой проблемой и использует postgresql.

 let array = ['33', 'test'];
let query = `SELECT * FROM A WHERE id::text IN(SELECT UNNEST(STRING_TO_ARRAY($1, ','))::text)`

// Now we can run the query.
models.sequelize.query(q, {bind: [array.toString()]})