Zunächst handelt es sich bei hstore
um ein Contrib-Modul, das es nur ermöglicht, Schlüssel-Wert-Paare zu speichern, wobei sowohl die Schlüssel als auch die Werte nur text
-Werte sein können (die Werte können jedoch auch sql NULL
-Werte sein).
Sowohl json
als auch jsonb
ermöglichen es Ihnen, einen gültigen JSON-Wert zu speichern (definiert in dessen Spezifikation).
Zum Beispiel sind dies gültige JSON-Repräsentationen: null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
ist nur ein kleiner Teil im Vergleich zu dem, wozu JSON fähig ist (aber wenn Sie nur diesen Teil benötigen, ist das in Ordnung).
Der einzige Unterschied zwischen json
und jsonb
liegt in deren Speicherung:
json
wird im reinen Textformat gespeichert, während
jsonb
in einer binären Repräsentation gespeichert wird
Daraus ergeben sich 3 Hauptkonsequenzen:
jsonb
benötigt normalerweise mehr Speicherplatz zum Speichern als json
(manchmal nicht)
jsonb
benötigt mehr Zeit, um aus seiner Eingangsrepräsentation aufgebaut zu werden als json
json
-Operationen dauern signifikant länger als jsonb
(& das Parsen muss auch jedes Mal erfolgen, wenn Sie eine Operation an einem als json
getypten Wert vornehmen)
Wenn jsonb
mit einer stabilen Version verfügbar ist, wird es zwei Hauptanwendungsfälle geben, zwischen denen Sie leicht wählen können:
- Wenn Sie nur mit der JSON-Repräsentation in Ihrer Anwendung arbeiten und PostgreSQL nur zum Speichern und Abrufen dieser Repräsentation verwendet wird, sollten Sie
json
verwenden.
- Wenn Sie viele Operationen am JSON-Wert in PostgreSQL durchführen oder Indizierungen auf einem JSON-Feld verwenden, sollten Sie
jsonb
verwenden.
6 Stimmen
Vom PGCon2014: youtube.com/…
6 Stimmen
@CraigRinger URL ist nicht genau genug, jetzt, 1 Jahr später, zeigt es nicht einmal annähernd auf JSONB-bezogenen Inhalt.
2 Stimmen
@berkus Ich dachte, ich hätte den spezifischen Beitrag verlinkt. Wie frustrierend.
1 Stimmen
Es zeigt auf das spezifische Video.