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

时间:2018-10-11 17:51:19

标签: postgresql database-performance postgresql-10 sql-tuning

我正在尝试使用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)
);

1 个答案:

答案 0 :(得分:0)

命令COPY不允许在复制数据时进行表操作(例如,查询其他表以获取要插入的适当外键)。要将table2中相应行的ID插入table1中,您需要针对该字段,NOT NULL数据然后COPY分别删除该字段的UPDATE约束。 / p>

假设table1可以连接table2table1.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;