postgresql - 在 PostgreSQL 中使用 COPY FROM 命令在多个表中插入
问题描述
我正在尝试使用COPY FROM
PostgreSQL 中的命令性能来获取 CSV 文件(CSV -> table1)的 1 个表的所有数据,我需要插入其他数据,但是,在一个新表中。我需要第一个表的主键作为第二个表的外键。示例:我需要在 table1 中插入 1,000,000 个名称,在 table2 中插入 500,000 个名称,但是,table2 中的所有名称都引用 table1 中的 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不允许在复制数据时进行表操作(例如查找其他表以获取要插入的正确外键)。要插入table2
相应行的 ID,table1
您需要分别删除该字段、数据和该字段NOT NULL
的约束。COPY
UPDATE
假设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;
推荐阅读
- c - 如何在不使用 iwconfig 的情况下在 ADB shell 中获得网络速度
- typoscript - 如何自定义 TYPO3 styles.content.get 模板
- r - 通过更改循环中的条件来创建多个二分变量
- r - 根据由第三列分组的第二列中的值将值分配给新列?
- cucumber - 在 Cucumber 中使用不同的数据多次运行相同的步骤
- vb.net - 哪些字符必须为 URI 进行百分比编码?
- react-native - axios 或 fetch 给任何 HTTP 调用提供网络错误
- node.js - npm outdated 不显示任何内容,但 package.json 中的版本号已过时
- c# - 尝试为 WPF 用户控件创建 NUnit 测试
- ajax - 如何实现 Apify webhook?