(jsonb_array_elements(t.addresses) address
の代わりに、これらのいずれかを試すことができます ):
jsonb_array_elements(
case jsonb_typeof(addresses)
when 'array' then addresses
else '[]' end
) as address
-- or
jsonb_array_elements(
case jsonb_typeof(addresses)
when 'array' then addresses
else '[{"PostCode": null}]' end
) as address
最初のものは列の不適切なjson形式で行を非表示にし、2番目のものはnull
を提供します 彼らのために。
ただし、問題は実際には、列の1つ以上の値がjson配列ではないことに起因します。次のコマンドで簡単に修正できます:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
この修正後は、case
は必要ありません。 jsonb_array_elements()
内 。