我在表中有json数据,我使用它将新数据插入到最终表中,如下所示
CREATE TABLE musicbrainz.acoustid_track (
id int NOT NULL,
created timestamp with time zone DEFAULT current_timestamp,
gid uuid NOT NULL,
new_id varchar(30)
);
CREATE TABLE musicbrainz.acoustid_track_json (
data jsonb
);
……表加载…
json列data
在查询中可见,您可以在WHERE
子句中引用它,例如:
insert into musicbrainz.acoustid_track
select id, created, gid, new_id
from musicbrainz.acoustid_track_json
cross join jsonb_populate_record(null::musicbrainz.acoustid_track, data);
,这个工作除了acoustid_track_json可以包含新记录或替换记录,这取决于它们是否有更新的字段
如
新纪录
{"id":67028798,"gid":"18575a2d-bc9c-48c0-b5d7-f815b97421ed","created":"2020-02-03T00:02:11.315629+00:00"}
更新记录{"id":66277512,"gid":"a31e1ecc-af48-4b8f-ba65-de5187a5c9a7","new_id":65603612,"created":"2019-11-17T12:37:49.81505+00:00","updated":"2020-02-03T13:12:58.043985+00:00"}
但是我似乎不能修改INSERT来引用更新的字段,可能是因为最终表中没有更新的字段,我该如何做到这一点。
json列data
在查询中可见,您可以在WHERE
子句中引用它,例如:
insert into musicbrainz.acoustid_track
select id, created, gid, new_id
from musicbrainz.acoustid_track_json
cross join jsonb_populate_record(null::musicbrainz.acoustid_track, data)
where data->'updated' is null;