Stručně řečeno – použijte JSONB místo JSON nebo převádějte JSON do JSONB.
Nelze porovnávat hodnoty json. Místo toho můžete porovnat textové hodnoty:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Všimněte si však, že hodnoty typu JSON jsou uloženy jako text ve formátu, ve kterém jsou uvedeny. Výsledek porovnání tedy závisí na tom, zda konzistentně používáte stejný formát:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
V Postgresu 9.4+ můžete tento problém vyřešit pomocí typu JSONB, který je uložen v rozloženém binárním formátu. Hodnoty tohoto typu lze porovnávat:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
takže tento dotaz je mnohem spolehlivější:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Přečtěte si více o typech JSON.