PostgreSQL, um JSON zu verwalten

PostgreSQL, um JSON zu verwalten
Einer der vielen Datentypen, die PostgreSQL -Unterstützung ist, ist JSON. Da der größte Teil der Web -APIs -Kommunikation JSON Payload immens verwendet, ist diese Funktion ziemlich wichtig. Anstatt den PlainText -Datentyp zum Speichern von JSON -Objekten zu verwenden, hat Postgres einen anderen Datentyp, der für JSON -Payloads optimiert ist. Auch im klassischen Postgres können Sie Ihre JSON-Felder für maximale Leistung fein abstellen.

Beim Erstellen einer Tabelle haben Sie zwei Optionen für Ihre JSON -Spalte. Einfacher JSON -Datentyp und JSONB -Datentyp haben beide ihre eigenen Vor- und Nachteile. Wir werden jeden von ihnen durchgehen, indem wir eine einfache Tabelle mit nur 2 Spalten mit einer ID und einem JSON -Wert erstellen. Anschließend werden wir Daten aus der Tabelle abfragen und ein Gefühl dafür erhalten.

JSON -Datentyp

Erstellen einer Tabelle mit JSON -Datentyp

Erstellen wir eine einfache Spaltentabelle mit dem Namen Benutzer:

Tabellenbenutzer erstellen (Benutzer
id serial nicht null primärschlüssel,
Info json nicht null
);

Hier fungiert die Spalten -ID als Hauptschlüssel und erhöht sich dank der Pseudotyp -Serie inkrementell, sodass wir uns keine Sorgen machen müssen, wenn wir im Laufe der ID die manuellen Eingabe von Werten für die ID eingeben müssen.

Die zweite Spalte hat JSON -Typ und ist gezwungen, nicht null zu sein. Geben wir einige Datenzeilen in diese Tabelle ein, die aus JSON -Werten bestehen.

In Benutzerwerte (Info) einfügen (Werte) (
'
"Name": "Jane Doe",
"E -Mail": "[email protected] ",
"PersonalDetails": "Alter": 33, "Geschlecht": "F"
');
In Benutzerwerte (Info) einfügen (Werte) (
'
"Name": "Jane Doe",
"E -Mail": "[email protected] ",
"PersonalDetails": "Alter": 33, "Geschlecht": "F"
');

Sie können mit Ihrem bevorzugten JSON -Verschönerer/Minifikator die obigen JSON -Nutzlasten in eine einzelne Zeile umwandeln. So können Sie es in Ihre PSQL -Eingabeaufforderung einfügen.

Wählen Sie * von Benutzern aus;
id | die Info
----+------------------------------------------------------
1 | "Name": "John Doe", "E -Mail": "[email protected] "...
2 | "Name": "Jane Doe", "E -Mail": "[email protected] "...
(2 Zeilen)

Der Befehl select am Ende ergab uns, dass die Zeilen erfolgreich in die Benutzertabelle eingefügt wurden.

Abfragen von JSON -Datentypen

Mit Postgres können Sie sich in die JSON -Nutzlast selbst eingraben und einen bestimmten Wert daraus abrufen, wenn Sie ihn mit dem entsprechenden Wert verweisen. Wir können den Namen -> Operator nach dem Namen der JSON -Spalte verwenden, gefolgt vom Schlüssel im JSON -Objekt. Dies tun
Zum Beispiel in der oben erstellten Tabelle:

Wählen Sie Info -> 'E -Mail' von Benutzern;
----+----------------------------------------
id | ?Spalte?
----+----------------------------------------
1 | "[email protected] "
2 | "[email protected] "

Möglicherweise haben Sie die Doppelzitate in der Spalte mit E -Mails bemerkt. Dies liegt daran, dass der Operator -> ein JSON -Objekt wie im Wert der Schlüssel „E -Mail“ vorhanden ist, ein JSON -Objekt zurückgibt. Natürlich können Sie nur einen Text zurückgeben, aber Sie müssen stattdessen den ->> Operator verwenden.

Wählen Sie Info ->> 'E -Mail' von Benutzern;
id | ?Spalte?
----+----------------------------------------
1 | [email protected]
2 | [email protected]

Der Unterschied zwischen der Rückgabe eines JSON -Objekts und einer Zeichenfolge wird klar, sobald wir mit JSON -Objekten arbeiten, die in anderen JSON -Objekten verschachtelt sind. Zum Beispiel habe ich den Schlüssel „PersonalDetails“ ausgewählt, um absichtlich ein anderes JSON -Objekt abzuhalten. Wir können auch in dieses Objekt eingraben, wenn wir wollen:

Wählen Sie info -> 'PersonalDetails' -> 'Geschlecht' von Benutzern;
?Spalte?
----------
"M"
"F"
(2 Zeilen)

Dadurch können Sie so tief in das JSON -Objekt gehen, wie Sie möchten. Lassen Sie uns diese Tabelle fallen lassen und eine neue erstellen (mit demselben Namen), aber mit JSONB -Typ.

JSONB -Datentyp

Abgesehen von der Tatsache, dass wir während der Erstellung der Tabelle den JSONB -Datentyp anstelle von JSON erwähnen, alles andere sieht aus das gleiche.

Tabellenbenutzer erstellen (Benutzer
id serial nicht null primärschlüssel,
Info jsonb nicht null
);

Sogar das Einsetzen von Daten und Abrufen mit dem -> Operator verhält sich genauso. Was sich geändert hat, ist alles unter der Motorhaube und spürbar in der Leistung der Tabelle. Beim Konvertieren von JSON -Text in einen JSONB verwandeln Postgres die verschiedenen JSON -Werttypen in native Postgres -Typen, sodass nicht alle gültigen JSON -Objekte als gültiger JSONB -Wert gespeichert werden können.

Darüber hinaus bewahrt JSONB die Whitespaces, Order of Json Keys, nicht in der Einfügungsrechnung. JSONB wandelt tatsächlich die Nutzlast in native Postgres Binary um, daher den Begriff JSONB.

Natürlich hat die Einführung von JSONB Datum eine Leistungsaufwand aufgrund all dieser zusätzlichen Arbeiten, die Postgres erledigen muss. Der Vorteil, den Sie gewinnen.

JSON gegen JSONB

Die Entscheidung zwischen JSON und JSONB SOLE hängt von Ihrem Anwendungsfall ab. Wenn Sie Zweifel haben, verwenden Sie JSONB, da die meisten Anwendungen tendenziell häufigere Lesevorgänge haben, die Operationen schreiben. Wenn Sie sicher sind, dass Ihre Anwendung erwartet wird, dass Sie mehr synchrone Schreibvorgänge als Lesen ausführen, sollten Sie JSON als Alternative betrachten.

Abschluss

Personen, die mit JSON -Payloads arbeiten und Schnittstellen für die Lagerung nach Postgres entwerfen. Die Entwickler waren freundlich genug, um uns mit JSONB -Indexierung und anderen coolen Funktionen auszustatten, die genutzt werden können, um die Leistung und Einfachheit Ihrer Anwendung zu verbessern. Ich flehe Sie auch an, diese auch zu untersuchen.
Hoffentlich haben Sie diese kurze Einführung der Angelegenheit hilfreich und inspirierend gefunden.