我试图弄清楚如何将Table1中的数据插入Table2,然后使用Table2中新创建的ID更新Table1中的相应行。
我使用Postgres 12.4是为了它的价值
示例:我有两个表,例如users
和metadata
用户表包含以下列
| id | info | metadata_id |
元数据表包含以下列
| id | data |
我想将所有info
值从users
表迁移到metadata
表的data
列,并用相应的metadata.id
值更新users.metadata_id
(当前为空),实际上就是回填外键。
有什么方法可以优雅地完成这个任务吗?我有一个工作查询,它锁定了两个表,并创建了一个临时序列插入到metadata.id
和users.metadata_id
中,但这似乎很脆弱,我需要从元数据表中存在的最高ID之后开始序列,这并不理想。
我还尝试过使用带有RETURNING子句的数据修改CTE来更新users
表,但无法使其工作。
1条答案
按热度按时间yeotifhr1#
这里不能使用
returning
,因为在插入时需要跟踪用户和元数据的关联。我认为首先使用
nextval()
预先生成CTE中每个用户的元数据序列会更简单,然后可以使用该信息插入元数据并更新用户表:我们需要在
insert
语句中使用overriding system value
子句,以便Postgres允许我们写入serial
列。