2017-10-02 17 views
1

私は毎月jsonbフィールドのいくつかのキーを更新するためにcronを作成しようとしています。これは、ndoeアプリケーションでpostgresデータベースを更新します。私のデータベースで複数のjsonb値を更新する

私は "disk_alert"、 "temepratures_alert"、 "consumptions_alert" などのキーを使用してjsonbフィールドを持っていると私は

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"を追加する方法はありますか?私は共同研究を使うことについて何かを読んだ||演算子が、どのようにこれを行うには?

答えて

0

次のような方法で連結演算子を使用することができます。

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

これはエラー「{エラー:列 『提起データを私は』タイプJSONであるが、発現は、text型である」 UPDATEデバイスを実行しようとしています。SET data = data || id = $ 1かつ削除されていない –

+0

'data'列がjson型の場合は、{'disk_alert':false、 'temper_alert':false、 'ram_alert':false、 'cpu_alert':false} '、modified_date = NOW更新された答えのように、それをjsonbにキャストします。 – klin

+0

キャストでそれは働いた..ありがとう –

関連する問題