我正在尝试使用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)
);
答案 0 :(得分:0)
命令COPY不允许在复制数据时进行表操作(例如,查询其他表以获取要插入的适当外键)。要将table2
中相应行的ID插入table1
中,您需要针对该字段,NOT NULL
数据然后COPY
分别删除该字段的UPDATE
约束。 / p>
假设table1
可以连接table2
和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;