我已经针对insert ... on conflict ...
以上问题的可接受答案很好地说明了UPSERT
。但是,我不确定如何在现有... on conflict clause ...
查询中利用knex
。
const returnId = knexTable => (settings.db.dbType === 'sqlite' ? knexTable : knexTable.returning('id'));
addProduct({
productCode,
productName,
productFullName
}) {
return returnId(knex('product')).insert({
product_code: productCode,
product_name: productName,
product_full_name: productFullName
});
}
由于knex
对UPSERT
客户端没有pg
支持,因此我无法(也许不知道)利用内置函数。也许,我可能不得不编写原始查询,但是我不确定如何写。
在表product
中,主键是product_code
,而我想在查询中使用... on conflict clause ...
的方式是检查product_code
是否存在更新{{1 }}和product_name
(自动递增product_full_name
除外)的新值,如果找不到id
,则会创建新记录。