#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()]})