Indeks GIN
Generalized Inverted Index w PostgreSQL — indeks odwrócony zoptymalizowany dla wartości złożonych z wielu składników: tablic, JSONB, tekstu pełnego i trigramów. Szybko odpowiada na pytanie „czy to zawiera ten element?”.
Zastosowania: WHERE tags @> '{postgres}' (tablica zawiera), wyszukiwanie kluczy w JSONB (data @> '{"status":"active"}'), wyszukiwanie pełnotekstowe (tsvector @@ tsquery), rozmyte wyszukiwanie trigramowe (pg_trgm dla LIKE '%foo%'). Indeks odwrócony odwzorowuje każdą pod-wartość na listę wierszy, które ją zawierają (jak skorowidz na końcu książki). Kompromis: szybkie wyszukiwanie, ale droższe zapisy (jedna zmiana wiersza aktualizuje kilka wpisów indeksu); łagodzą to fastupdate i lista oczekujących GIN. Różni się od B-tree (równość i porządek na całej wartości) i GiST (geometria i bliskość). Domyślny wybór dla JSONB i wyszukiwania pełnotekstowego w Postgresie.