简而言之 - 使用 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 类型 https://www.postgresql.org/docs/current/datatype-json.html.