Накратко – използвайте JSONB вместо JSON или прехвърляйте JSON към JSONB.
Не можете да сравнявате json стойности. Вместо това можете да сравните текстови стойности:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Имайте предвид обаче, че стойностите от тип JSON се съхраняват като текст във формат, в който са дадени. Така резултатът от сравнението зависи от това дали последователно прилагате един и същ формат:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
В Postgres 9.4+ можете да решите този проблем, като използвате тип JSONB, който се съхранява в декомпозиран двоичен формат. Стойности от този тип могат да се сравняват:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
така че тази заявка е много по-надеждна:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Прочетете повече за типовете JSON.