你不能那樣做「動態」。你需要指定你想要的列:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
如果你做了很多,你可能想把它放到一個視圖中。
另一種選擇是在Postgres中創建一個代表JSON屬性的對象類型,例如,
create type core_type as (id integer, tax numeric, price numeric, code varchar);
你可以再投的JSON到類型,並從JSON相應的屬性將自動轉換爲列:
通過上述類型和下面的JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
你可以這樣做:
select id, (json_populate_record(null::core_object, data)).*
from core;
,它將返回:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
但您需要確保將每個JSON值都可以轉換爲相應對象字段的類型。
如果更改對象類型,則使用它的任何查詢都會自動更新。所以你可以通過一箇中心定義來管理你感興趣的列。
參見[Postgres的:從JSONB字段拼合聚合鍵/值對(http://stackoverflow.com/a/ 35179515/1995738) – klin