Ответ 1
Вы не можете сравнивать значения 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.