PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Operator nie istnieje:json =json

W skrócie - użyj JSONB zamiast JSON lub prześlij JSON do JSONB.

Nie można porównywać wartości json. Zamiast tego możesz porównać wartości tekstowe:

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

Należy jednak pamiętać, że wartości typu JSON są przechowywane jako tekst w formacie, w jakim są podane. Zatem wynik porównania zależy od tego, czy konsekwentnie stosujesz ten sam format:

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

W Postgresie 9.4+ możesz rozwiązać ten problem za pomocą typu JSONB, który jest przechowywany w zdekomponowanym formacie binarnym. Wartości tego typu można porównać:

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

więc to zapytanie jest znacznie bardziej niezawodne:

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

Przeczytaj więcej o typach JSON.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy pozycja kolumny id w Postgresql jest ważna?

  2. Jak interpretować wartość txid_current() PosgreSQL?

  3. Jak testować pod kątem nakładających się dat w PostgreSQL

  4. Oblicz wiek w latach w PostgreSQL

  5. UUID czy SEQUENCE dla klucza podstawowego?