To nelze dělat „dynamicky“. Musíte zadat sloupce, které chcete mít:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Pokud to děláte hodně, možná to budete chtít dát do pohledu.
Další možností je vytvořit v Postgresu typ objektu, který reprezentuje atributy ve vašem JSON, např.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
Poté můžete přetypovat JSON na tento typ a odpovídající atributy z JSON budou automaticky převedeny na sloupce:
S výše uvedeným typem a následujícím JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
můžete udělat:
select id, (json_populate_record(null::core_type, data)).*
from core;
a vrátí se:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Musíte se ale ujistit, že každá hodnota JSON může přetypovat na typ odpovídajícího pole objektu.
Pokud změníte typ objektu, každý dotaz, který jej používá, bude automaticky aktualizován. Takže můžete spravovat sloupce, které vás zajímají, prostřednictvím centrální definice.