Используйте процедурную функцию в выражении Sequelize - PullRequest
0 голосов
/ 10 апреля 2019

Я пытался использовать процедурную функцию в моем запросе на продолжение.

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, к моему удивлению, это сработало, и это немного сбило с толку.Почему он работал в редакторе, а не с сиквелом?

, что может вызвать откат?

Я тоже пытался это сделать:

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 Ответ

0 голосов
/ 11 апреля 2019

Здесь произошло несколько ошибок: 1) Невозможно использовать функцию хранимой процедуры с запросом «CRUD», поэтому вышеуказанная функция является функцией SQL - Quora 2) Возможно, есть способ, но из этого,Я считаю, что "modal.sequelize.fn(...)" можно использовать только в части запроса "WHERE" и "ORDER" - Sequelize 3) SELECT getCountry('usa'); неверно, поскольку значение в разделе привязки должно бытьбуквальное значение, а не запрос.

Почему первый запрос работал в PostgreSQL, я не уверен, но, скорее всего, придется сделать так, чтобы «Sequelize» работал и связывал значения, прежде чем отправлять егов базу данных.

...