Singkatnya - gunakan JSONB sebagai ganti JSON atau berikan JSON ke JSONB.
Anda tidak dapat membandingkan nilai json. Anda dapat membandingkan nilai teks sebagai gantinya:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Namun perhatikan bahwa nilai tipe JSON disimpan sebagai teks dalam format yang diberikan. Jadi, hasil perbandingan tergantung pada apakah Anda secara konsisten menerapkan format yang sama:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
Di Postgres 9.4+ Anda dapat menyelesaikan masalah ini menggunakan tipe JSONB, yang disimpan dalam format biner yang didekomposisi. Nilai jenis ini dapat dibandingkan:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
jadi kueri ini jauh lebih andal:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Baca selengkapnya tentang Jenis JSON.