PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Операторът не съществува:json =json

Накратко – използвайте JSONB вместо JSON или прехвърляйте JSON към JSONB.

Не можете да сравнявате json стойности. Вместо това можете да сравните текстови стойности:

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

Имайте предвид обаче, че стойностите от тип JSON се съхраняват като текст във формат, в който са дадени. Така резултатът от сравнението зависи от това дали последователно прилагате един и същ формат:

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

В Postgres 9.4+ можете да решите този проблем, като използвате тип JSONB, който се съхранява в декомпозиран двоичен формат. Стойности от този тип могат да се сравняват:

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

така че тази заявка е много по-надеждна:

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

Прочетете повече за типовете 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. Как да намерите дублиращи се записи в PostgreSQL

  2. Буквено-цифрово сортиране с PostgreSQL

  3. IntegrityError:прави разлика между уникално ограничение и ненулеви нарушения

  4. Не мога да инсталирам pg gem на Windows

  5. Как да създадете разширение postgres вътре в контейнера?