sql >> Database teknologi >  >> RDS >> PostgreSQL

Bedste praksis til at identificere en jsonb null i plpgsql

Begge dine linkede svar indeholder løsninger, men det kan være godt at have et omnibussvar.

Postgres er stærkt skrevet. Dens funktioner og operatører returnerer specifikke typer.

-> returnerer jsonb. Sammenlign det ikke med SQL null, men 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)

->> returnerer tekst og konverterer jsonb null til 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)

Bemærk, at mens jsonb null bare er en anden værdi, er SQL null meget speciel. Nul er ikke en værdi, det er manglen på en værdi. Nul er lig med ingenting, ikke engang null . Det kan virke som om at caste null til jsonb skulle producere jsonb null, men SQL-standarden kræver, at null kun caster til null ellers ville det betyde, at null svarer til noget.

Dette er grunden til, at jsonb null kan konverteres til null, men null castes ikke til jsonb null. null::jsonb er null . Dette er ubelejligt, men kræves af SQL-standarden. Det er en af ​​grundene til, at det ikke anbefales at caste frem og tilbage mellem jsonb og tekst.



  1. Opret dynamisk tabel fra funktion i PostgreSQL

  2. Klassisk ASP kalder Oracle-lagret procedure med OraOleadb-driver

  3. HikariCP med PostgreSQL:setQueryTimeout(int) er endnu ikke implementeret

  4. Problemer med MySQL-forespørgsel ved hjælp af AVG()