【问题标题】:Update multiple jsonb values更新多个 jsonb 值
【发布时间】:2017-10-02 11:43:01
【问题描述】:

我正在尝试创建一个 cron 来每月运行以更新 jsonb 字段的一些键,在带有 postgres 数据库的 ndoe 应用程序中。

在我的数据库中,我有一个 jsonb 字段,其中包含“disk_alert”、“temepratures_alert”、“consumptions_alert”等键,我想做类似的事情

Postgres:

UPDATE devices SET    
    data=jsonb_set(data::jsonb,'{disk_alert}','false'::jsonb,true), 
    modified_date=NOW() 
WHERE id=$1 AND NOT deleted;

节点:

client.query("UPDATE devices SET data=jsonb_set(data::jsonb,'{disk_alert}','false'::jsonb,true), modified_date=NOW() WHERE id=$1 AND NOT deleted", [deviceId]

但是如何添加其他键“consumptions_alert”和“temperatures_alert”?我读了一些关于使用连接的东西||运营商,但如何做到这一点?

【问题讨论】:

    标签: node.js postgresql jsonb


    【解决方案1】:

    您可以像这样使用连接运算符:

    UPDATE devices SET 
        data = data::jsonb || '{"disk_alert": false, "temepratures_alert": false}',
        modified_date = NOW() 
    WHERE id=$1 AND NOT deleted;
    

    【讨论】:

    • 这会引发错误“{ 错误:列“数据”是 json 类型,但表达式是文本类型”我正在尝试更新设备 SET data = data || {'disk_alert': false, 'temperatures_alert': false, 'ram_alert': false, 'cpu_alert':false}', modified_date=NOW() WHERE id=$1 AND NOT deleted
    • 如果列 data 是 json 类型,则将其转换为 jsonb,就像在更新的答案中一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多