簡體   English   中英

在postgresql中使用jsonb結構

[英]Use jsonb structure in postgresql

我有一張桌子emp3

```
   - id int not null
   - lvl varchar
   - includes jsonb
```

表結構:

ID 等級 包括
1 jj~ii null
2 jj~ii~aa null
3 ii null

我想通過拆分“~”來根據 lvl 列更新包含列。 我可以這樣做:

```
       do $$declare 
          i record;
          tbl_var jsonb := null;
          tbl_var1 text[];
          part varchar;
            begin
              for i in select * from emp3 where includes is null
               loop 
                 if array_length(string_to_array(i.lvl, '~'), 1) is not null then 
                 tbl_var1 := null;
                  foreach part in array string_to_array(i.lvl, '~')
                   loop
                    tbl_var1 := concat(tbl_var1, '{"lvls" : "',part,'"}');
                      UPDATE emp3 set includes = tbl_var1 where id = i.id;
                   end loop;
                else
                 tbl_var := i.lvl;
                 UPDATE emp3 set includes = tbl_var where id = i.id;
                end if;
              end loop;
             end $$;
```

Output 執行查詢后:

ID 等級 包括
1 a~b ["{"lvls": "a"}", "{"lvls": "b"}"]
2 a~b~c ["{"lvls": "a"}", "{"lvls": "b"}","{"lvls": \c"}"]
3 一個 ["{"lvls": "a"}"]

但我希望 output 采用這種格式:

ID 等級 包括
1 a~b [{“lvls”:“a”},{“lvls”:“b”}]
2 a~b~c [{“lvls”:“a”},{“lvls”:“b”},{“lvls”:“c”}]
3 一個 [{"lvls": "a"}]

沒有轉義字符並且 " 不附加在 dict 的開頭和結尾。如何實現

使用jsonb_build_object解決了這個問題:

array_append(tbl_var1, jsonb_build_object('lvls',part));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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