Kort sagt - använd JSONB istället för JSON eller casta JSON till JSONB.
Du kan inte jämföra json-värden. Du kan jämföra textvärden istället:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Observera dock att värden av typen JSON lagras som text i ett format som de är givna i. Resultatet av jämförelsen beror alltså på om du konsekvent använder samma format:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
I Postgres 9.4+ kan du lösa detta problem med typen JSONB, som lagras i ett sönderdelat binärt format. Värden av denna typ kan jämföras:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
så den här frågan är mycket mer tillförlitlig:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Läs mer om JSON-typer.