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

Най-добра практика за идентифициране на jsonb null в plpgsql

И двата ви свързани отговора съдържат решения, но може да е добре да имате омнибусен отговор.

Postgres е строго типизиран. Неговите функции и оператори връщат конкретни типове.

-> връща jsonb. Сравнете не с SQL null, а с jsonb null .

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->'i_am_null' = 'null'::jsonb;
 ?column? 
----------
 t
(1 row)

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->'a_string' = 'null'::jsonb;
 ?column? 
----------
 f
(1 row)

->> връща текст и ще преобразува jsonb null в SQL null .

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->>'i_am_null' is null;
 ?column? 
----------
 t
(1 row)

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->>'a_string' is null;
 ?column? 
----------
 f
(1 row)

Имайте предвид, че докато jsonb null е просто друга стойност, SQL null е много специална. Null не е стойност, това е липсата на стойност. Null не е равно на нищо, дори не на null . Може да изглежда, че прехвърлянето на null към jsonb трябва да произведе jsonb null, но стандартът SQL изисква null да прехвърля само към null в противен случай това би означавало, че null е еквивалентно на нещо.

Ето защо jsonb null може да се преобразува в null, но null не се преобразува в jsonb null. null::jsonb е нулева . Това е неудобно, но се изисква от SQL стандарта. Това е една от причините да не се препоръчва прехвърлянето напред и назад между jsonb и текст.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - как да криптирате колона и нейните данни

  2. Кога да използваме наследени таблици в PostgreSQL?

  3. Преброяване на честотата на масив или jsonb обект

  4. Използване на анотация на Django Window в комбинация с различна клауза

  5. Postgres - Изтеглете копие на цяла DB от отдалечен сървър към локална машина за разработка