postgresql - 导入带有外键的 csv

标签 postgresql csv-import

假设我有 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;

现在,创建 stdgrp学生和团体表格:

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/

相关文章:

MySQL 在第 1 行 ',fields terminated by ' ,' optinally enclosed by ' "' lines terminated by '\n' ign' 附近使用的正确语法

django - 如何使用 django-import-export 为字段定义管理员导入格式

sql - 找到两列之间的最大值并在 postgres 中相应地更新

postgresql - PostgreSQL 在哪里存储数据库?

php - 使用 400x400 联系人 URL 的 preg_match 查询将 CSV 文件导入数据库

swift - CSVImporter 在 vi​​ewdidload 之后开始导入 [Swift]

sql - 是否可以在同一个查询中创建和使用窗口函数?

postgresql - 如何将 Google App Engine (Flex) Go 应用程序连接到 Google Cloud Postgres 实例

sql - PostgreSQL 中不需要的换行符翻译