使用knex在PostgreSQL中插入(冲突时)重复更新

时间:2018-06-29 19:40:58

标签: postgresql insert-update knex.js upsert sql-merge

我已经针对insert ... on conflict ...

经历了以下相关的SO问题

Question 1

Question 2

以上问题的可接受答案很好地说明了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
    });
  }

由于knexUPSERT客户端没有pg支持,因此我无法(也许不知道)利用内置函数。也许,我可能不得不编写原始查询,但是我不确定如何写。

在表product中,主键是product_code,而我想在查询中使用... on conflict clause ...的方式是检查product_code是否存在更新{{1 }}和product_name(自动递增product_full_name除外)的新值,如果找不到id,则会创建新记录。

0 个答案:

没有答案