Kurz gesagt – verwenden Sie JSONB anstelle von JSON oder wandeln Sie JSON in JSONB um.
Sie können JSON-Werte nicht vergleichen. Sie können stattdessen Textwerte vergleichen:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Beachten Sie jedoch, dass Werte vom Typ JSON als Text in einem Format gespeichert werden, in dem sie angegeben sind. Das Ergebnis des Vergleichs hängt also davon ab, ob Sie immer dasselbe Format verwenden:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
In Postgres 9.4+ können Sie dieses Problem mit dem Typ JSONB lösen, der in einem zerlegten Binärformat gespeichert ist. Werte dieses Typs können verglichen werden:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
daher ist diese Abfrage viel zuverlässiger:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Lesen Sie mehr über JSON-Typen.