在PostgreSQL中使用COPY FROM命令将数据插入多个表

3
我正在尝试使用PostgreSQL的COPY FROM命令的性能,将CSV文件(CSV->表1)中1个表的所有数据获取,并在新表中插入其他数据。我需要在第二张表中添加第一张表的主键作为外键。 例如: 我需要在表1中插入100万个名称,在表2中插入50万个名称,但是,表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)
);
1个回答

1

命令COPY在复制数据时不允许进行表操作(例如查找其他表以获取插入适当外键所需的内容)。要将table1中对应行的id插入到table2中,您需要删除该字段的NOT NULL约束,COPY数据,然后单独UPDATE该字段。

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

COPY之前:

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;

嗨@Ilya Konyukhov,感谢你的回答。你给了我一个想法(在这两个表中创建具有相同值的字段,然后进行更新)。非常感谢! - Wandré Veloso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接