从 table 创建具有嵌套 json 文本的视图 - Postgres
Create view having nested json text from a table - Postgres
说,我有以下 postgres table,
> select * from t;
+----+---------+-----------+---------+---------+
| id | a | b | c | d |
+----+---------+-----------+---------+---------+
| 1 | value_a | value_b | value_c | value_d |
+----+---------+-----------+---------+---------+
...
+----+---------+-----------+---------+---------+
|... | ... | ... | ... | ... |
+----+---------+-----------+---------+---------+
现在我想从这个 table 创建一个视图,它能够存储具有嵌套 json 文本的以下格式的数据。
这应该按 id
列分组。
{
"id": 1,
"a": "A",
"x":"{\"k1\":\"value_b\",\"k2\":\"{\"k21\":\"value_c\",\"k22\":\"value_d\"}\"}"
}
我不知道怎样才能做到这一点。任何人都可以给我写一个 postgres sql 查询。
您可以使用 json(b)_build_*
函数生成 json(b):
create view myview as
select
id,
a,
jsonb_build_object(
'k1', b,
'k2', jsonb_build_object(
'k21', c,
'k22', d
)
) as x
from mytable
如果您希望整行作为单个 json 对象:
create view myview as
select jsonb_build_object(
'id', id
'a', a,
'x', jsonb_build_object(
'k1', b,
'k2', jsonb_build_object(
'k21', c,
'k22', d
)
)
) val
from mytable
说,我有以下 postgres table,
> select * from t;
+----+---------+-----------+---------+---------+
| id | a | b | c | d |
+----+---------+-----------+---------+---------+
| 1 | value_a | value_b | value_c | value_d |
+----+---------+-----------+---------+---------+
...
+----+---------+-----------+---------+---------+
|... | ... | ... | ... | ... |
+----+---------+-----------+---------+---------+
现在我想从这个 table 创建一个视图,它能够存储具有嵌套 json 文本的以下格式的数据。
这应该按 id
列分组。
{
"id": 1,
"a": "A",
"x":"{\"k1\":\"value_b\",\"k2\":\"{\"k21\":\"value_c\",\"k22\":\"value_d\"}\"}"
}
我不知道怎样才能做到这一点。任何人都可以给我写一个 postgres sql 查询。
您可以使用 json(b)_build_*
函数生成 json(b):
create view myview as
select
id,
a,
jsonb_build_object(
'k1', b,
'k2', jsonb_build_object(
'k21', c,
'k22', d
)
) as x
from mytable
如果您希望整行作为单个 json 对象:
create view myview as
select jsonb_build_object(
'id', id
'a', a,
'x', jsonb_build_object(
'k1', b,
'k2', jsonb_build_object(
'k21', c,
'k22', d
)
)
) val
from mytable