[英]Postgres. string_agg text column into json
我通常使用具有這種結構的腳本在 postgres 表中插入行。
select 'my_table' as name,
'{"my_table":{' ||
string_agg('"' || nr || code || '":{"code":"' || nr || code || '","name_eng":"' || eng || '","name_de":"' || de || '","name_se":"' || se || '","nr_cd":"' || nr || '","code":"' || code || '"}', ',') || '}}' as records,
'[{"attribut":"nr_cd","codetable_type":"String"},{"attribut":"cus_immopaccode","codetable_type":"String"}]' as custom_attributes
from (select '01' as code, 'Rat' as eng, 'Ratte' as de, 'Ratta' se
union all select '02', 'Cow','Kuh','Ko'
union all select '03', 'Dog','Hund','Hund'
union all select '04', 'Cat','Katze','Katt'
)d
cross join (select '1' as nr
union all select '2'
union all select '3'
)m
到目前為止,它們的數據類型一直是 name(text)、records(text)、custom_attributes(text),但現在 records 列已更改為 jsonb。
因此,我需要重寫查詢,但我在 json 中表現不佳,當我嘗試使用 jsonb_build_object 和 jsonb_object_agg 構建它時,並沒有成功。
也許那里有一些樂於助人的靈魂可以幫助我並節省我的工作時間? :)
提前致謝。
給你的例子:
select
json_build_object (
'table',
json_object_agg (
nr || code,
json_build_object (
'Code', nr || code, 'name_eng', eng, 'name_de', de, 'name_se', se, 'nr_cd', nr, 'code', code
)
)
)
from (
select '01' as code, 'Rat' as eng, 'Ratte' as de, 'Ratta' se
union all
select '02', 'Cow','Kuh','Ko'
union all
select '03', 'Dog','Hund','Hund'
union all
select '04', 'Cat','Katze','Katt'
)d
cross join (
select '1' as nr
union all
select '2'
union all
select '3'
)m
結果:
{
"table": {
"101": {
"Code": "101",
"name_eng": "Rat",
"name_de": "Ratte",
"name_se": "Ratta",
"nr_cd": "1",
"code": "01"
},
"201": {
"Code": "201",
"name_eng": "Rat",
"name_de": "Ratte",
"name_se": "Ratta",
"nr_cd": "2",
"code": "01"
},
"301": {
"Code": "301",
"name_eng": "Rat",
"name_de": "Ratte",
"name_se": "Ratta",
"nr_cd": "3",
"code": "01"
},
"102": {
"Code": "102",
"name_eng": "Cow",
"name_de": "Kuh",
"name_se": "Ko",
"nr_cd": "1",
"code": "02"
},
"202": {
"Code": "202",
"name_eng": "Cow",
"name_de": "Kuh",
"name_se": "Ko",
"nr_cd": "2",
"code": "02"
},
"302": {
"Code": "302",
"name_eng": "Cow",
"name_de": "Kuh",
"name_se": "Ko",
"nr_cd": "3",
"code": "02"
},
"103": {
"Code": "103",
"name_eng": "Dog",
"name_de": "Hund",
"name_se": "Hund",
"nr_cd": "1",
"code": "03"
},
"203": {
"Code": "203",
"name_eng": "Dog",
"name_de": "Hund",
"name_se": "Hund",
"nr_cd": "2",
"code": "03"
},
"303": {
"Code": "303",
"name_eng": "Dog",
"name_de": "Hund",
"name_se": "Hund",
"nr_cd": "3",
"code": "03"
},
"104": {
"Code": "104",
"name_eng": "Cat",
"name_de": "Katze",
"name_se": "Katt",
"nr_cd": "1",
"code": "04"
},
"204": {
"Code": "204",
"name_eng": "Cat",
"name_de": "Katze",
"name_se": "Katt",
"nr_cd": "2",
"code": "04"
},
"304": {
"Code": "304",
"name_eng": "Cat",
"name_de": "Katze",
"name_se": "Katt",
"nr_cd": "3",
"code": "04"
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.