2016-05-05 13 views
0

Ich habe mehrere Postgres 9.4 Tabellen bekam die Daten wie folgt enthalten:Postgres Update JSON Feld

 
| id | data          | 
|----|-------------------------------------------| 
| 1 | {"user": "joe", "updated-time": 123}  | 
| 2 | {"message": "hi", "updated-time": 321} | 

Ich brauche die JSON Spalte in so etwas wie dieses

 
| id | data               | 
|----|--------------------------------------------------------------| 
| 1 | {"user": "joe", "updated-time": {123, "unit":"millis"}}  | 
| 2 | {"message": "hi", "updated-time": {321, "unit":"millis"}} | 

Ideal wäre es zu verwandeln sein einfach die Transformation auf mehrere Tabellen anzuwenden. Tabellen, die den JSON-Schlüssel data->'updated-time' enthalten, sollten aktualisiert werden, und solche, die nicht übersprungen werden sollten. Vielen Dank!

+0

Haben Sie Fragen, die Sie ausprobiert haben? Wo steckst du genau? Mit den richtigen Operatoren/Funktionen für die JSON-Manipulation? Mit dem grundlegenden SQL zum Aktualisieren einer Auswahl von Zeilen basierend auf einer Bedingung? – IMSoP

+2

Der angegebene erwartete JSON ist nicht gültig, Sie könnten '{" value ": 123," unit ":" millis "}' oder '[123, {" unit ":" millis "}]' verwenden. – pozs

+2

Mögliches Duplikat von [Wie ändere ich Felder innerhalb des neuen PostgreSQL-JSON-Datentyps?] (Http://stackoverflow.com/questions/18209625/how-do-i-modify-fields-inside-the-new-postgresql-json -datatype) – pozs

Antwort

0

Sie können den Operator || verwenden, um zwei jsonb-Objekte zusammenzuführen.

select '{"foo":"bar"}'::jsonb || '{"baz":"bar"}'::jsonb; 
= {"baz": "bar", "foo": "bar"}