Использовать процедурную функцию в операторе Sequelize

#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» работал и привязывал значения, и перед отправкой его в базу данных.