2017-10-02 1 views
1

Ich versuche, ein Cron zu erstellen, um jeden Monat einige Schlüssel eines Jsonb-Felds in einer ndoe-Anwendung mit Postgres-Datenbank zu aktualisieren.Mehrere JSONB-Werte aktualisieren

In meiner Datenbank habe ich eine jsonb Feld mit Tasten wie "disk_alert", "temepratures_alert", "consumptions_alert" und ich will etwas tun, wie

Postgres:

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

Knoten:

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] 

Aber wie die anderen Schlüssel hinzufügen "consumptions_alert" und "temperature_alert" ?? Ich lese etwas über die Verwendung von CoCnatenation || Operator, aber wie geht das?

Antwort

0

Sie können den Verkettungsoperator in der Art und Weise wie diese verwenden:

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

Dies wirft den Fehler „{Fehler: Spalte‚Daten‘vom Typ json ist aber Ausdruck vom Typ Text“ I‘ m versuchen, UPDATE-Geräte SET Daten = Daten || {'disk_alert': false, 'temperature_alert': false, 'ram_alert': false, 'cpu_alert': false} ', modified_date = NOW() WHERE id = $ 1 UND NICHT gelöscht –

+0

Wenn die Spalte 'data' vom Typ json ist dann werfen Sie es wie in der aktualisierten Antwort auf jsonb. – klin

+0

Mit der Besetzung hat es funktioniert .. danke –

Verwandte Themen