可以說我有一些看起來像的資料
create table test.from
(
id integer primary key,
data json
);
insert into test.from
values
(4, '{ "some_field": 11 }'),
(9, '{ "some_field": 22 }');
create table test.to
(
id integer primary key,
some_field int
);
我希望“to”表中的行與“from”行具有相同的 id 鍵,并將 json 擴展為單獨的列。但是使用 json_populate_record 如下所示,不出所料會給我 null 作為鍵。
Method 1:
insert into test.to
select l.*
from test.from fr
cross join lateral json_populate_record(null::test.to, fr.data) l;
我可以通過命名如下列來實作我正在尋找的東西
Method 2:
insert into test.to (id, some_field)
select
fr.id as id,
l.some_field
from test.from fr
cross join lateral json_populate_record(null::test.to, fr.data) l;
挑戰在于我想避免命名除 id 列之外的任何列,因為它變得乏味,而且因為我想在列名未知的函式中執行此操作。
我必須對方法 1 進行哪些修改才能使用正確的 id 更新記錄?
uj5u.com熱心網友回復:
只需將密鑰附加id到您的資料中,如下所示:
insert into test.to
select l.*
from
test.from fr
cross join lateral jsonb_populate_record(
null::test.to,
fr.data::jsonb || jsonb_build_object('id', fr.id)) l;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/426888.html
標籤:sql PostgreSQL
上一篇:調整視窗大小時如何調整放置的tkinter小部件的大小?
下一篇:日期轉換為Postgresql
