有条件地在 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
传入的值。
按预期工作。
我正在使用 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
传入的值。
按预期工作。