W skrócie - użyj JSONB zamiast JSON lub prześlij JSON do JSONB.
Nie można porównywać wartości json. Zamiast tego możesz porównać wartości tekstowe:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Należy jednak pamiętać, że wartości typu JSON są przechowywane jako tekst w formacie, w jakim są podane. Zatem wynik porównania zależy od tego, czy konsekwentnie stosujesz ten sam format:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
W Postgresie 9.4+ możesz rozwiązać ten problem za pomocą typu JSONB, który jest przechowywany w zdekomponowanym formacie binarnym. Wartości tego typu można porównać:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
więc to zapytanie jest znacznie bardziej niezawodne:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Przeczytaj więcej o typach JSON.