有条件地在 knex 中更新记录

Conditionally upsert records in knex

我正在使用 knex 对 postgres 进行更新插入,如果发生冲突(以及后续更新),我只想在列(时间戳)中的现有值小于传入值时更新冲突行.

await dbClient(table)
  .insert(records)
  .onConflict("digits")
  .merge();

如果单个记录(来自记录数组)中的 act_ts 字段(时间戳)大于现有列值,我希望合并发生。

我正在尝试以下代码

await dbClient(table)
  .insert(records)
  .onConflict("digits")
  .merge().where('act_ts','<',???);

如何引用传入对象中的值来对其进行比较?

在研究了 PostgreSQL 文档后,我发现有一个保留的磨损 'EXCLUDED' 引用了冲突的数据行,所以我做了以下操作:

const response = await dbClient(table)
  .insert(records)
  .onConflict("digits")
  .merge().whereRaw(`${table}.act_ts < EXCLUDED.act_ts`);

其中${table}.act_ts引用了table中已经存在的数据,EXCLUDED.act_ts传入的值。

按预期工作。