PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Operator existiert nicht:json =json

Kurz gesagt – verwenden Sie JSONB anstelle von JSON oder wandeln Sie JSON in JSONB um.

Sie können JSON-Werte nicht vergleichen. Sie können stattdessen Textwerte vergleichen:

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

Beachten Sie jedoch, dass Werte vom Typ JSON als Text in einem Format gespeichert werden, in dem sie angegeben sind. Das Ergebnis des Vergleichs hängt also davon ab, ob Sie immer dasselbe Format verwenden:

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

In Postgres 9.4+ können Sie dieses Problem mit dem Typ JSONB lösen, der in einem zerlegten Binärformat gespeichert ist. Werte dieses Typs können verglichen werden:

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

daher ist diese Abfrage viel zuverlässiger:

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

Lesen Sie mehr über JSON-Typen.