sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur får man ett json-objekt som kolumn i postgresql?

Det kan man inte göra "dynamiskt". Du måste ange vilka kolumner du vill ha:

select name, description, id, 
       data ->> 'tax' as tax,
       data ->> 'other_attribute' as other_attribute
from core;

Om du gör det mycket, kanske du vill sätta det i synen.

Ett annat alternativ är att skapa en objekttyp i Postgres som representerar attributen i din JSON, t.ex.

create type core_type as (id integer, tax numeric, price numeric, code varchar);

Du kan sedan casta JSON till den typen och motsvarande attribut från JSON kommer automatiskt att konverteras till kolumner:

Med ovanstående typ och följande JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"} du kan göra:

select id, (json_populate_record(null::core_type, data)).*
from core;

och det kommer att returnera:

id | tax  | price | code
---+------+-------+-----
 1 | 4.50 |    10 | YXCV

Men du måste se till att alla JSON-värden kan castas till typen av motsvarande objektfält.

Om du ändrar objekttypen kommer alla frågor som använder den att uppdateras automatiskt. Så du kan hantera de kolumner du är intresserad av, genom en central definition.



  1. PHP / SQL, enkelt välj var får värdet som kolumn

  2. Beräkna och spara utrymme i PostgreSQL

  3. hur frågar man många-till-många?

  4. Kopiera två kolumner från en tabell till en annan, men bara unika värden