So wird ein JSON-Objekt in ein verschachteltes Array in einer JSONB-Spalte verschoben
Ich muss ein JSON-Objekt irgendwie in ein verschachteltes Array potenziell vorhandener JSON-Objekte verschieben - siehe "Seiten" im folgenden JSON-Snippet.
{
"session_id": "someuuid",
"visitor_ui": 1,
"pages": [
{
"datetime": "2016-08-13T19:45:40.259Z",
"duration,": 0,
"device_id": 1,
"url": {
"path": "/"
}
},
{
"datetime": "2016-08-14T19:45:40.259Z",
"duration,": 0,
"device_id": 1,
"url": {
"path": "/test"
}
},
// how can i push a new value (page) here??
]
"visit_page_count": 2
}
Ich kenne dasjsonb_set(target jsonb, path text[], new_value jsonb[, create_missing boolean])
(obwohl es immer noch ein bisschen schwer zu verstehen ist) aber ich denke, das zu benutzen, würde erfordern, dass ich zuerstSELECT
die gesamte JSONB-Spalte, um herauszufinden, wie viele Elemente innerhalb von "pages" bereits vorhanden sind und zu welchem Index sie mit @ verschoben werden solljsonb_set
, richtig? Ich hoffe, dass es in Postgres 9.5 / 9.6 einen Weg gibt, das Äquivalent dessen zu erreichen, was wir in Programmiersprachen kennen, z.pages.push({"key": "val"})
.
Was wäre der beste und einfachste Weg, dies mit Postgresql 9.5 oder 9.6 zu tun?