sql >> Database >  >> RDS >> PostgreSQL

Best practice om een ​​jsonb null te identificeren in plpgsql

Beide gekoppelde antwoorden bevatten oplossingen, maar het is misschien goed om een ​​omnibusantwoord te hebben.

Postgres is sterk getypt. De functies en operators geven specifieke typen terug.

-> geeft jsonb terug. Vergelijk het niet met SQL null maar met 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)

->> geeft tekst terug en converteert jsonb null naar 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)

Merk op dat hoewel jsonb null gewoon een andere waarde is, SQL null heel speciaal is. Null is geen waarde, het is het ontbreken van een waarde. Null is gelijk aan niets, zelfs niet null . Het lijkt misschien alsof het casten van null naar jsonb jsonb null zou moeten opleveren, maar de SQL-standaard vereist dat null alleen cast naar null anders zou dat betekenen dat null gelijk is aan iets.

Dit is de reden waarom jsonb null kan worden geconverteerd naar null, maar null wordt niet naar jsonb null gecast. null::jsonb is null . Dit is onhandig, maar vereist door de SQL-standaard. Dit is een van de redenen waarom heen en weer schakelen tussen jsonb en tekst niet wordt aanbevolen.



  1. Bereken percentiel van recentheid in MySQL

  2. Oracle 12c PLSQL SOAP EXTRACTWAARDE van matrixreactie

  3. Kan AWS-Postgres-server niet verbinden met spring boot-applicatie met heroku-hosting

  4. Tips voor het upgraden van MySQL 5.7 naar MySQL 8