簡體   English   中英

Postgres。 string_agg 文本列變為 json

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM