Vous ne pouvez pas faire cela "dynamiquement". Vous devez spécifier les colonnes que vous souhaitez avoir :
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Si vous le faites souvent, vous voudrez peut-être l'inclure dans une vue.
Une autre option consiste à créer un type d'objet dans Postgres qui représente les attributs dans votre JSON, par ex.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
Vous pouvez ensuite convertir le JSON en ce type et les attributs correspondants du JSON seront automatiquement convertis en colonnes :
Avec le type ci-dessus et le JSON suivant :{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
tu peux faire :
select id, (json_populate_record(null::core_type, data)).*
from core;
et il retournera :
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Mais vous devez vous assurer que chaque valeur JSON peut être converti en type du champ objet correspondant.
Si vous modifiez le type d'objet, toute requête l'utilisant sera automatiquement mise à jour. Vous pouvez ainsi gérer les colonnes qui vous intéressent, au travers d'une définition centrale.