Не можете да направите това "динамично". Трябва да посочите колоните, които искате да имате:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Ако правите това често, може да искате да поставите това в изглед.
Друг вариант е да създадете тип обект в Postgres, който представлява атрибутите във вашия JSON, напр.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
След това можете да прехвърлите JSON към този тип и съответните атрибути от JSON автоматично ще бъдат преобразувани в колони:
С горния тип и следния JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
можете да направите:
select id, (json_populate_record(null::core_type, data)).*
from core;
и ще върне:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Но трябва да сте сигурни, че всяка JSON стойност може да се преобразува към типа на съответното обектно поле.
Ако промените типа на обекта, всяка заявка, използваща го, автоматично ще се актуализира. Така че можете да управлявате колоните, които ви интересуват, чрез централна дефиниция.