Kortom - gebruik JSONB in plaats van JSON of cast JSON naar JSONB.
U kunt json-waarden niet vergelijken. U kunt in plaats daarvan tekstwaarden vergelijken:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Merk echter op dat waarden van het type JSON worden opgeslagen als tekst in een formaat waarin ze worden gegeven. Het resultaat van de vergelijking hangt er dus van af of u consequent hetzelfde formaat toepast:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
In Postgres 9.4+ kun je dit probleem oplossen met het type JSONB, dat is opgeslagen in een ontleed binair formaat. Waarden van dit type kunnen worden vergeleken:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
dus deze zoekopdracht is veel betrouwbaarder:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Lees meer over JSON-typen.