En bref - utilisez JSONB au lieu de JSON ou convertissez JSON en JSONB.
Vous ne pouvez pas comparer les valeurs json. Vous pouvez comparer les valeurs textuelles à la place :
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Notez cependant que les valeurs de type JSON sont stockées sous forme de texte dans un format dans lequel elles sont données. Ainsi, le résultat de la comparaison dépend si vous appliquez systématiquement le même format :
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
Dans Postgres 9.4+, vous pouvez résoudre ce problème en utilisant le type JSONB, qui est stocké dans un format binaire décomposé. Les valeurs de ce type peuvent être comparées :
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
donc cette requête est beaucoup plus fiable :
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
En savoir plus sur les types JSON.