Entwicklung / Server & Infrastruktur / PostgreSQL / JSONB & GIN-Indizes

Aus Dokument
Zur Navigation springen Zur Suche springen

Praxis-Guide: PostgreSQL JSONB & GIN-Indizes

PostgreSQL bietet mit dem Datentyp JSONB vollwertige NoSQL-Dokumentenspeicherung mit binärer Komprimierung, Feldindizierung via GIN-Indizes und komplexen JSON-Operatoren (@>, ->>).



📊 1. Tabelle mit JSONB-Spalte & GIN-Index erstellen

CREATE TABLE nutzer_profile (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    einstellungen JSONB NOT NULL DEFAULT '{}'::jsonb,
    erstellt_am TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- GIN-Index (Generalized Inverted Index) für ultraschnelle JSON-Suche anlegen
CREATE INDEX idx_nutzer_einstellungen ON nutzer_profile USING gin (einstellungen);

🔍 2. JSONB Daten einfügen & Abfragen

Daten einfügen

INSERT INTO nutzer_profile (username, einstellungen)
VALUES (
    'thorsten',
    '{"theme": "dark", "notifications": {"email": true, "sms": false}, "tags": ["admin", "dev"]}'
);

Abfrage 1: JSON-Verschachtelung abfragen (->>)

SELECT username 
FROM nutzer_profile 
WHERE einstellungen->'notifications'->>'email' = 'true';

Abfrage 2: Enthält-Operator (@>) mit GIN-Index Nutzung

-- Prüft ob das JSON den Schlüssel/Wert-Paar enthält (nutzt den GIN-Index!)
SELECT username 
FROM nutzer_profile 
WHERE einstellungen @> '{"theme": "dark"}';

🔗 Verwandte Themen