Você não pode fazer isso "dinamicamente". Você precisa especificar as colunas que deseja ter:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Se você faz muito isso, talvez queira colocar isso em uma visualização.
Outra opção é criar um tipo de objeto no Postgres que represente os atributos em seu JSON, por exemplo.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
Você pode então converter o JSON para esse tipo e os atributos correspondentes do JSON serão automaticamente convertidos em colunas:
Com o tipo acima e o seguinte JSON:
{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
você pode fazer:select id, (json_populate_record(null::core_type, data)).*
from core;
e retornará:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Mas você precisa ter certeza de que cada valor JSON pode ser convertido para o tipo do campo de objeto correspondente.
Se você alterar o tipo de objeto, qualquer consulta que o utilize será atualizada automaticamente. Assim, você pode gerenciar as colunas de seu interesse, por meio de uma definição central.