PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'operatore non esiste:json =json

In breve:usa JSONB invece di JSON o trasmetti JSON su JSONB.

Non puoi confrontare i valori json. Puoi invece confrontare i valori del testo:

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

Si noti tuttavia che i valori di tipo JSON vengono archiviati come testo in un formato in cui vengono forniti. Pertanto, il risultato del confronto dipende dal fatto che applichi lo stesso formato in modo coerente:

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

In Postgres 9.4+ puoi risolvere questo problema usando il tipo JSONB, che è memorizzato in un formato binario scomposto. È possibile confrontare valori di questo tipo:

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

quindi questa query è molto più affidabile:

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

Ulteriori informazioni sui tipi JSON.