Tabelle erstellen und JSONB-Felder indizieren
In diesem Schritt erstellen Sie eine Tabelle zur Speicherung von Produktinformationen unter Verwendung des JSONB-Datentyps und erstellen dann einen GIN-Index zur Optimierung von Abfragen auf diesen Daten. JSONB speichert JSON-Daten in einem zerlegten Binärformat, dessen Eingabe etwas langsamer ist, dessen Verarbeitung jedoch deutlich schneller erfolgt. Ein GIN (Generalized Inverted Index) ist ideal für die Indizierung von zusammengesetzten Werten wie denen in einer JSONB-Spalte.
Öffnen Sie zunächst ein Terminal und verbinden Sie sich mit der PostgreSQL-Datenbank über die interaktive psql-Shell:
sudo -u postgres psql
Sie sehen nun die PostgreSQL-Eingabeaufforderung, die wie postgres=# aussieht.
Erstellen Sie als Nächstes eine Tabelle namens products mit einer id-Spalte und einer data-Spalte vom Typ JSONB.
CREATE TABLE products (
id SERIAL PRIMARY KEY,
data JSONB
);
Fügen Sie nun einige Beispiel-Produktdaten in die Tabelle products ein.
INSERT INTO products (data) VALUES
('{"name": "Laptop", "price": 1200, "tags": ["electronics", "computer"]}'),
('{"name": "Keyboard", "price": 75, "tags": ["electronics", "accessory"]}'),
('{"name": "Mouse", "price": 30, "tags": ["electronics", "accessory"]}'),
('{"name": "Monitor", "price": 300, "tags": ["electronics", "display"]}');
Um die Suche in der Spalte data erheblich zu beschleunigen, erstellen Sie einen GIN-Index darauf.
CREATE INDEX idx_products_data ON products USING GIN (data);
Sie können überprüfen, ob der Index erfolgreich erstellt wurde, indem Sie den Befehl \di verwenden, der alle Indizes auflistet.
\di
Sie sollten idx_products_data in der Liste der Relationen sehen, ähnlich der folgenden Ausgabe:
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+---------------------+-------+----------+-----------+------------+-------------
public | idx_products_data | index | postgres | products | 16 kB |
public | products_pkey | index | postgres | products | 16 kB |
(2 rows)
Sie haben Ihre Tabelle erfolgreich eingerichtet und die JSONB-Spalte indiziert. Sie bleiben für den nächsten Schritt in der psql-Shell.