Dat kun je niet "dynamisch" doen. U moet de kolommen specificeren die u wilt hebben:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Als je dat veel doet, wil je dat misschien in beeld brengen.
Een andere optie is om in Postgres een objecttype te maken dat de attributen in uw JSON vertegenwoordigt, b.v.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
U kunt dan de JSON naar dat type casten en de bijbehorende attributen van de JSON worden automatisch geconverteerd naar kolommen:
Met het bovenstaande type en de volgende JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
je kunt doen:
select id, (json_populate_record(null::core_type, data)).*
from core;
en het zal terugkeren:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Maar u moet ervoor zorgen dat elke JSON-waarde kan worden gecast naar het type van het corresponderende objectveld.
Als u het objecttype wijzigt, wordt elke query die het gebruikt automatisch bijgewerkt. Via een centrale definitie kunt u dus de kolommen waarin u geïnteresseerd bent beheren.