Det kan man ikke "dynamisk". Du skal angive de kolonner, du vil have:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Hvis du gør det meget, vil du måske have det i udsigt.
En anden mulighed er at oprette en objekttype i Postgres, der repræsenterer attributterne i din JSON, f.eks.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
Du kan derefter caste JSON til den type, og de tilsvarende attributter fra JSON vil automatisk blive konverteret til kolonner:
Med ovenstående type og følgende JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
du kan gøre:
select id, (json_populate_record(null::core_type, data)).*
from core;
og det vil returnere:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Men du skal sørge for, at hver JSON-værdi kan castes til typen af det tilsvarende objektfelt.
Hvis du ændrer objekttypen, vil enhver forespørgsel, der bruger den, automatisk blive opdateret. Så du kan administrere de kolonner, du er interesseret i, gennem en central definition.