sql >> Base de Datos >  >> RDS >> PostgreSQL

El operador no existe:json =json

En resumen, use JSONB en lugar de JSON o envíe JSON a JSONB.

No puede comparar valores json. En su lugar, puede comparar valores de texto:

SELECT * 
FROM movie_test 
WHERE tags::text = '["dramatic","women","political"]'

Sin embargo, tenga en cuenta que los valores de tipo JSON se almacenan como texto en un formato en el que se proporcionan. Por lo tanto, el resultado de la comparación depende de si se aplica el mismo formato de manera consistente:

SELECT 
    '["dramatic" ,"women", "political"]'::json::text =  
    '["dramatic","women","political"]'::json::text      -- yields false!
    

En Postgres 9.4+, puede resolver este problema utilizando el tipo JSONB, que se almacena en un formato binario descompuesto. Se pueden comparar valores de este tipo:

SELECT 
    '["dramatic" ,"women", "political"]'::jsonb =  
    '["dramatic","women","political"]'::jsonb           -- yields true

entonces esta consulta es mucho más confiable:

SELECT * 
FROM movie_test 
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb

Obtenga más información sobre los tipos de JSON.