No puedes hacer eso "dinámicamente". Debe especificar las columnas que desea tener:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Si hace eso con mucha frecuencia, es posible que desee ponerlo en una vista.
Otra opción es crear un tipo de objeto en Postgres que represente los atributos en su JSON, p.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
Luego puede convertir el JSON a ese tipo y los atributos correspondientes del JSON se convertirán automáticamente en columnas:
Con el tipo anterior y el siguiente JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
puedes hacer:
select id, (json_populate_record(null::core_type, data)).*
from core;
y devolverá:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Pero debe asegurarse de que cada valor JSON pueda convertirse al tipo del campo de objeto correspondiente.
Si cambia el tipo de objeto, cualquier consulta que lo utilice se actualizará automáticamente. Así podrás gestionar las columnas que te interesen, a través de una definición central.