как я могу использовать jsonb в postgres 12

#postgresql

#postgresql

Вопрос:

 select  id,  cast((nd -gt;gt; 'bath') as float) as bath,  cast((nd -gt;gt; 'bed') as integer) as bed,  cast(ndp as NUMERIC) as price ,  FIRST_VALUE(cast((nd -gt;gt; 'bed') as integer)) OVER( ORDER BY  cast((nd -gt;gt; 'bed') as integer)) priority_bed,  FIRST_VALUE(cast((nd -gt;gt; 'bath') as float)) OVER( ORDER BY  cast((nd -gt;gt; 'bath') as float)) priority_bath  FROM  properties p cross  join  lateral jsonb_array_elements(p.bed_bath_price) as nd cross  join  lateral jsonb_array_elements(nd -gt; 'price') as ndp  

Я использую postgres 13,и приведение(ndp как числовое) работает просто отлично, но в postgres 12 оно дает не может привести jsonb к нулю …..

Комментарии:

1. Вы можете попробовать join lateral jsonb_array_elements(nd -gt;gt; 'price') as ndp , чтобы ndp был текстом, а не jsonb

2. @Эдуард, вернее, не совсем cross join lateral jsonb_array_elements_text(nd -gt; 'price') as ndp так .

3. @Stefanov.sm, да, вы, конечно, правы … Я немного поторопился, извини

4. @Эдуард Ура!

Ответ №1:

Вы также не можете преобразовать значение JSONB null в числовое значение в v13. Разница должна заключаться в самих данных, а не в версии запущенной вами базы данных.

Вы могли бы написать что-то подобное case when jsonb_typeof(ndp)lt;gt;'null' then ndp::numeric end или определить функцию для инкапсуляции , если вы будете часто это делать.