Perché casting JSONb NULL a un tipo di esito negativo, si tratta di una specifica bug?

0

Domanda

Come commentato in questa risposta,

SELECT (j->'i')::int FROM  (SELECT '{"i":null}'::jsonb) t(j); -- fail

risultati in "ERRORE: impossibile eseguire il cast jsonb null di tipo integer"... Ok, questo è il "PostgreSQL via", ma perché non fare di meglio? Meglio che aggiungere CASE clausole, che sta facendo il "naturale" e la cosa, che è la fusione in JSON-valore NULL ad un SQL digitato il valore null. Così, non è un problema di implementazione, ma sembra una specificazione bug in PostregSQL: com'è?

casting jsonb postgresql
2021-11-16 19:53:05
1

Migliore risposta

2

Il motivo è che il NULL è molto diverso da JSON null.

Se si desidera fare ciò:

SELECT nullif((j->'i'), 'null')::int FROM  (SELECT '{"i":null}'::jsonb) t(j);
 nullif 
--------
   NULL
(1 row)

 SELECT pg_typeof(nullif((j->'i'), 'null')::int) FROM  (SELECT '{"i":null}'::jsonb) t(j);
 pg_typeof 
-----------
 integer


SELECT nullif((j->'i'), 'null')::int FROM  (SELECT '{"i": 1}'::jsonb) t(j);
 nullif 
--------
      1
(1 row)

Utilizzare NULLIF per trasformare JSON null a SQL NULL.

2021-11-17 05:29:10

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................