Prečo odlievanie JSONb NULL typu zlyhá, je špecifikácia, chyba?

0

Otázka

Ako uviedol, v tomto odpoveď,

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

výsledky v "CHYBA: nie je možné cast jsonb null typu integer"... Ok, toto je "PostgreSQL spôsobom", ale prečo nie, aby to lepšie? Lepšie ako pridať CASE doložky, je to "prirodzené" vec, ktorá je casting JSON-hodnotu NULL SQL zadali hodnotu null. Takže, to nie je vykonávanie problém, ale zdá sa, že špecifikácia chybu v PostregSQL: to je?

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

Najlepšiu odpoveď

2

Dôvodom je, že SQL NULL je úplne odlišné od JSON null.

Ak si chcete urobiť:

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)

Použitie NULLIF transformovať JSON null SQL NULL.

2021-11-17 05:29:10

V iných jazykoch

Táto stránka je v iných jazykoch

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