SQLPro for Postgres上传CSV时表原有数据被覆盖删除如何解决
SQLPro for Postgres 多CSV导入不覆盖已有数据解决方案
问题原因
覆盖问题是导入时默认开启了「导入前清空表」「替换现有表」的配置,每次导入都会先删除表内现有数据再写入新CSV的内容。
界面操作修复步骤
- 打开SQLPro for Postgres并连接到目标数据库,选中你要导入数据的已创建好的表
- 点击顶部菜单栏
File->Import,选择你要导入的第一个CSV文件,进入导入配置页 - 在配置项中找到导入行为相关设置,取消勾选
Truncate table before import(导入前清空表)、Replace existing table(替换现有表),同时选择Append data to table(向表追加数据)模式 - 确认CSV的分隔符、文件编码、是否带表头、列映射关系和你实际的CSV、目标表结构完全匹配,确认无误后执行导入
- 后续其余CSV文件全部按照上述步骤操作即可,所有数据会依次追加到表中,不会覆盖原有数据
备选方案:原生SQL命令导入(可控性更高)
如果界面导入配置异常仍出现覆盖问题,可以直接执行Postgres原生导入命令:
- 如果CSV文件存放在Postgres服务器上,执行:
COPY 你的目标表名称 FROM 'CSV文件在服务器上的绝对路径' DELIMITER ',' -- 替换为你CSV实际使用的分隔符,常见为逗号、制表符 CSV HEADER; -- 若你的CSV没有表头行,去掉HEADER参数
- 如果CSV文件存放在你本地客户端电脑上,执行客户端版copy命令:
\copy 你的目标表名称 FROM 'CSV文件在你本地的绝对路径' DELIMITER ',' CSV HEADER;
注意事项
- 导入前建议先备份目标表现有数据,避免误操作导致数据丢失
- 若目标表设置了主键、唯一索引等约束,需确保新导入的CSV数据中没有和已有数据重复的约束字段值,否则会触发唯一冲突导致导入失败
- 若CSV和目标表列顺序不匹配,可以在表名后指定列顺序,比如
COPY 表名(列1,列2,列3) FROM ...保证数据写入到对应列
内容的提问来源于stack exchange,提问作者Wojciech Cyniak
相关产品推荐
相关产品推荐

