【发布时间】:2020-06-12 21:20:37
【问题描述】:
我正在尝试更新文本数组列:
var data = [];
for (const tag of tags) {
var tmp = {'rids': [rid], 'id': tag.id, 'uid' : uid};
data.push(tmp);
}
const condition = pgp.as.format(' WHERE CAST(v.uid AS INTEGER) = t.uid and v.id = t.id');
const insertQuery = pgp.helpers.update(data, ['?id', '?uid', 'rids'], 'table_tags') + condition + ' ' + 'RETURNING t.tag';
return db.any(insertQuery);
这可行,但它会替换列值。
如何保留当前列值并追加新值?
像这样:{somevalue, someothervalue, newinsertedvalue}
而不是:{newinsertedvalue}
这是我在 php drupal 项目中使用的查询:
db_query("UPDATE table_tags set rids = rids || (:rid) WHERE uid = :uid and id = :id", array(':rid' => '{'.$rid.'}', ':uid' => $uid, ':id' => $tag_id));
【问题讨论】:
-
您应该包含一个适合您的 PostgreSQL 查询示例,然后可以告知您使用
pg-promise的更改。没有它,它甚至与pg-promise无关,而是与您想要的查询及其结果预期有关。 -
谢谢。这是我要生成的工作查询示例:
update "table_tags" as t set "rids"= t.rids || v."rids" from (values(154,1,1315709),(153, 1,1315709)) as v("id","uid", "rids") WHERE CAST(v.uid AS INTEGER) = t.uid and v.id = t.id RETURNING t.tag不确定 pgp.helpers 是否可以处理 concat -
这与
update助手生成的完全不同。它设置值,它不会将它们与这种额外的逻辑连接起来。您必须提供自定义更新生成器。 -
对于您的特殊情况,您可以静态编写查询,将其与动态部分 - 值合并,您可以通过 helpers.values 生成。
标签: node.js pg-promise