#postgresql #stored-procedures #sequelize.js #upsert
#postgresql #хранимые процедуры #sequelize.js #upsert
Вопрос:
Я попытался использовать процедурную функцию в своем запросе sequelize.
await model.sequelize.upsert({
id: '123',
code: 'usa',
country: model.sequelize.conn.fn('getCountry', 'usa')
});
Это привело к этим кодам:
INSERT INTO "places" ("id","code","country")
VALUES ($1, $2, getCountry('usa'));
....
bind: [('123', 'usa']
Я не смог найти ни одной ошибки в журнале, но в сообщении говорилось EXEC('1234567') rollback: ...
(фрагмент ошибки)
{
connection:
Client {
_ending: false,
_connecting: false,
_connectionError: false,
hasExecuted: true},
finished: 'rollback' } }
Когда я запустил приведенный выше запрос в редакторе PostgreSQL, к моему удивлению, он сработал, и это немного запутало. Почему это работает в редакторе, но не с sequeline?
какая возможность может привести к откату?
Я также пытался это сделать:
await model.sequelize.upsert({
id: '123',
code: 'usa',
country: select getCountry('usa')"
});
/// below is what I get from the above sequelize
INSERT INTO "places" ("id","code","country")
VALUES ($1, $2, $3);
bind: [('123', 'usa', 'select getCountry('usa'))]
/// this also caused an error
Ответ №1:
Здесь произошло несколько ошибок: 1) Невозможно использовать хранимую процедуру func с запросом «CRUD», поэтому приведенная выше функция является функцией SQL — Quora 2) Возможно, есть способ, но из этого, я полагаю "modal.sequelize.fn(...)"
, можно использовать только в "WHERE"
"ORDER"
части и запроса — Sequelize 3) SELECT getCountry('usa');
не являетсяправильно, потому что значение в разделе привязки должно быть буквальным значением, а не запросом.
Почему первый запрос сработал в PostgreSQL
, я не уверен, но, вероятно, должен сделать так, чтобы «Sequelize» работал и привязывал значения, и перед отправкой его в базу данных.