sql >> Databáze >  >> RDS >> PostgreSQL

nemůže extrahovat prvky ze skaláru

Můžete zkusit jednu z těchto možností (místo 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

První skrývá řádky s nesprávným formátem json sloupce, druhý dává null pro ně.

Problém však ve skutečnosti pramení z toho, že jedna nebo více hodnot ve sloupci není pole json. Můžete to snadno opravit příkazem:

update contact
set addresses = '[null]' 
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';

Po této opravě nebudete potřebovat case v jsonb_array_elements() .




  1. Jak napíšu dotaz Django s poddotazem jako součást klauzule WHERE?

  2. Jak vložit data do tabulky SQL Server pomocí R?

  3. Musím se chránit před vkládáním SQL, pokud jsem použil rozevírací seznam?

  4. kde najdu mysql.data.dll pro c#