PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Operador não existe:json =json


Resumindo - use JSONB em vez de JSON ou converta JSON para JSONB.

Você não pode comparar valores json. Você pode comparar valores de texto em vez disso:
SELECT * 
FROM movie_test 
WHERE tags::text = '["dramatic","women","political"]'

Observe, no entanto, que os valores do tipo JSON são armazenados como texto em um formato no qual são fornecidos. Assim, o resultado da comparação depende se você aplica consistentemente o mesmo formato:
SELECT 
    '["dramatic" ,"women", "political"]'::json::text =  
    '["dramatic","women","political"]'::json::text      -- yields false!
    

No Postgres 9.4+ você pode resolver esse problema usando o tipo JSONB, que é armazenado em um formato binário decomposto. Valores deste tipo podem ser comparados:
SELECT 
    '["dramatic" ,"women", "political"]'::jsonb =  
    '["dramatic","women","political"]'::jsonb           -- yields true

então esta consulta é muito mais confiável:
SELECT * 
FROM movie_test 
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb

Leia mais sobre tipos JSON.