在语句Sequelize中使用过程函数

时间:2019-04-10 09:21:57

标签: postgresql stored-procedures sequelize.js upsert

我尝试在我的续集查询中使用过程函数。

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编辑器中运行以上查询时,令我惊讶的是它起作用了,这就是令人困惑的地方。为什么它不能在编辑器上运行,但不能与sequ​​eline一起使用?

什么原因导致它回滚?

我也尝试这样做:

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 :(得分:0)

这里发生了一些错误: 1)无法将存储过程func与“ CRUD”查询一起使用,因此上面的函数是一个SQL函数-Quora 2)也许有办法,但是据此,我相信"modal.sequelize.fn(...)"仅可用于查询的"WHERE""ORDER"部分-Sequelize 3)SELECT getCountry('usa');不正确,因为绑定部分中的值必须是文字值而不是查询。

对于第一个查询为何在PostgreSQL中起作用的原因,我不确定,但很可能必须采取“序列化”的工作方式并绑定值,然后将其发送到数据库。