Es gibt einen einfachen Ausdruck oder eine Funktion zum "Entpacken" von Unterobjekten, explodiert es in das Hauptobjekt?entpacken JSONB-Objekt mit bester Leistung
mit Beispiel erklären:
SELECT '{"x":null,"A":{"foo":true,"bar":123},"B":2332}'::jsonb;
-- = JSONB object with "A" as sub-object.
ist ein typischer Fall: I "A" Inhalt in das Hauptobjekt benötigen. Und wenn diese Datentypen (number/boolean/null) erhalten bleiben, ist keine "convert string solution" gültig. Auch gute Performance wird erwartet.
Remove "A" ist in Ordnung mit - 'A'
, sondern legte seinen Inhalt zurück, ist nicht einfach:
SELECT ('{"x":null,"A":{"foo":true,"bar":123},"B":2332}'::jsonb - 'A')
|| '{"foo":true,"bar":123}'::jsonb; -- aim result, unpacked!
SELECT ('{"x":null,"A":{"foo":true,"bar":123},"B":2332}'::jsonb - 'A')
|| ('{"A":{"foo":true,"bar":123}}'::jsonb)->'A' -- NOT WORKS...
So platzieren Sie zurück "A" Inhalt?
Dank. Über PostgreSQL (v9.5) Entscheidung Ich denke, dass sie falsch sind, höhere [Vorrang] (https: // en.wikipedia.org/wiki/Order_of_operations) am meisten sein für '->' das ist wie ein objektorientierter Pfadoperator, immer höher als algebraische. –
Nun, technisch haben sie die gleiche Priorität (sie fallen beide in die Kategorie [jedes andere] (http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-PRECEDENCE), Da es sich nicht um Standardoperatoren handelt, werden sie von links nach rechts ausgewertet. – pozs