sql >> Databáze >  >> RDS >> PostgreSQL

Operátor neexistuje:json =json

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.




  1. Použití Spotlight Cloud k vyřešení blokování serveru SQL

  2. 13 blogových článků o doporučených postupech a tipech pro návrh databáze

  3. 10 užitečných tipů pro ladění výkonu MySQL

  4. Jak formátovat čísla se znaménkem mínus/plus v Oracle