sql >> データベース >  >> RDS >> PostgreSQL

スカラーから要素を抽出できません

    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()内 。




    1. 関数内のfetch_assocでの致命的なエラー

    2. MySQLを使用して外部キーを使用してテーブルに値を挿入するにはどうすればよいですか?

    3. MySQLのIF()関数の標準メソッド

    4. Oracle PL / SQLのONLINEを使用して、非パーティション表をパーティション表に変換します。