Bạn không thể làm điều đó một cách "động". Bạn cần chỉ định các cột bạn muốn có:
select name, description, id,
data ->> 'tax' as tax,
data ->> 'other_attribute' as other_attribute
from core;
Nếu bạn làm điều đó nhiều, bạn có thể muốn đưa điều đó vào chế độ xem.
Một tùy chọn khác là tạo một loại đối tượng trong Postgres đại diện cho các thuộc tính trong JSON của bạn, ví dụ:
create type core_type as (id integer, tax numeric, price numeric, code varchar);
Sau đó, bạn có thể truyền JSON sang kiểu đó và các thuộc tính tương ứng từ JSON sẽ tự động được chuyển đổi thành cột:
Với loại trên và JSON sau:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"}
bạn có thể làm:
select id, (json_populate_record(null::core_type, data)).*
from core;
và nó sẽ trả về:
id | tax | price | code
---+------+-------+-----
1 | 4.50 | 10 | YXCV
Nhưng bạn cần đảm bảo rằng mọi giá trị JSON đều có thể được ép kiểu của trường đối tượng tương ứng.
Nếu bạn thay đổi loại đối tượng, bất kỳ truy vấn nào sử dụng nó sẽ tự động được cập nhật. Vì vậy, bạn có thể quản lý các cột mà bạn quan tâm, thông qua một định nghĩa trung tâm.