假设我有 2 个表:学生和小组。
- 组表有 2 列:id、组名
- Student 表有 3 列:id、StudentName 和 GroupID
- GroupID 是组字段的外键。
我需要从 CSV 导入“学生”表,但在我的 CSV 中,显示的是群组名称,而不是群组 ID。如何在不修改 csv 的情况下使用 pgAdmin 导入它?
最佳答案
根据 Laurenz 的回答,使用以下脚本:
创建一个临时表以从 CSV 文件插入:
CREATE TEMP TABLE std_temp (id int, student_name char(25), group_name char(25));
然后,导入 CSV 文件:
COPY std_temp FROM '/home/username/Documents/std.csv' CSV HEADER;
现在,创建 std
和grp
学生和团体表格:
CREATE TABLE grp (id int, name char(25));
CREATE TABLE std (id int, name char(20), grp_id int);
这是 grp
轮到根据 distinct
填充表组名称的值。考虑如何row_number() is use to provide value for
id`:
INSERT INTO grp (id, name) select row_number() OVER (), * from (select distinct group_name from std_temp) as foo;
最后一步,根据 join
选择数据然后将其插入 std
表:
insert into std (id, name, grp_id) select std_temp.id, std_temp.student_name,grp.id from std_temp inner join grp on std_temp.group_name = grp.name;
最后,从最终std
中检索数据表:
select * from std;
关于postgresql - 导入带有外键的 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63883042/