Das geht nicht "dynamisch". Sie müssen die gewünschten Spalten angeben:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Wenn Sie dies häufig tun, möchten Sie dies vielleicht in eine Ansicht stellen.
Eine andere Möglichkeit besteht darin, einen Objekttyp in Postgres zu erstellen, der die Attribute in Ihrem JSON darstellt, z.
create type core_type as (id integer, tax numeric, price numeric, code varchar);
Sie können den JSON dann in diesen Typ umwandeln und die entsprechenden Attribute aus dem JSON werden automatisch in Spalten konvertiert:
Mit obigem Typ und folgendem JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
Sie können Folgendes tun:
select id, (json_populate_record(null::core_type, data)).*
from core;
und es wird zurückgegeben:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Aber Sie müssen sicherstellen, dass jeder JSON-Wert kann in den Typ des entsprechenden Objektfeldes umgewandelt werden.
Wenn Sie den Objekttyp ändern, wird jede Abfrage, die ihn verwendet, automatisch aktualisiert. So können Sie die für Sie interessanten Spalten über eine zentrale Definition verwalten.