在PostgreSQL中使用Copy From命令在多个表中插入 [英] Use COPY FROM command in PostgreSQL to insert in multiple tables

查看:6
本文介绍了在PostgreSQL中使用Copy From命令在多个表中插入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用PostgreSQL中COPY FROM命令的性能来获取CSV文件(CSV->Table1)的1个表的所有数据,我需要插入其他数据,但是,在一个新表中。我需要第一个表的主键放在第二个表中作为外键。 示例: 我需要在表1中插入1,000,000个名称,在表2中插入500,000个名称,但是,表2中的所有名称都引用了表1中的1个元组。

CREATE TABLE table1 (
   table1Id bigserial  NOT NULL,
   Name varchar(100)  NULL,
   CONSTRAINT table1Id PRIMARY KEY (table1Id)
);
CREATE TABLE table2 (
   table2Id bigserial  NOT NULL,
   Other_name varchar(100)  NOT NULL
   table1_table1Id int8  NOT NULL,
   CONSTRAINT table2_pk PRIMARY KEY (table2Id)
);

推荐答案

命令COPY在复制数据时不允许表操作(例如查找其他表以获取要插入的正确外键)。若要插入table1中相应行的table2ID,您需要删除该字段的NOT NULL约束,COPY数据,然后分别插入UPDATE这些字段。

假设table1table2表可以通过table1.Name = table2.Other_name连接,则代码为:

复制前:

ALTER TABLE table2 ALTER COLUMN table1_table1Id DROP NOT NULL;

复制后:

UPDATE table2 SET table2.table1_table1Id = table1.table1Id
FROM table1
WHERE table1.Name = table2.Other_name;
ALTER TABLE table2 ALTER COLUMN table1_table1Id SET NOT NULL;

这篇关于在PostgreSQL中使用Copy From命令在多个表中插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆