pg-promise:使用pgp.helpers.update更新具有数组文本列的行

问题描述 投票:0回答:1

我正在尝试更新文本数组列:

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));
node.js pg-promise
1个回答
0
投票

您的值连接逻辑是一种特殊情况,默认update不支持。您将必须使用通过helpers.values函数生成的动态部分-值来静态编写查询。

const query = `update table_tags as t set rids= t.rids || v.rids from 
    (values${helpers.values(data, cs)}) as v(id, uid, rids)
    WHERE CAST(v.uid AS INTEGER) = t.uid and v.id = t.id RETURNING t.tag`.
© www.soinside.com 2019 - 2024. All rights reserved.