Postgres快速导入csv文件

连接数据库: psql -U <user_name> -d <database_name> -h 远程数据库IP地址 -p 端口psql位于安装目录的bin目录下,建议将路径X:\XXX\PostgreSQL\15\bin\添加到环境变量中 如果想免密码,则需要设置环境变量 PGPASSWORD

使用\copy命令导入,该命令必须在服务端运行,不能通过pg_admindbeaver等数据库管理客户端的sql命令执行。 \copy bbb FROM 'D:\NavicatExports\aaa.csv' DELIMITER ',' NULL '' CSV HEADER; 其中bbb是事先创建好的表的名称,下同

报错: ERROR: character with byte sequence 0xba 0x22 in encoding "GBK" has no equivalent in encoding "UTF8" 原因: csv文件内容为utf-8 no bom编码,其中有中文。 解决方案: \encoding UTF8

\timing

\c 目标数据库名

通过实践,目标表名不能是中文,但文件名可以是中文。 \copy bbb FROM 'C:\我是中文.csv' WITH (FORMAT CSV,DELIMITER ',' , HEADER TRUE);

\copy bbb FROM 'C:\我是中文.csv' WITH (FORMAT CSV,DELIMITER E'\t' , HEADER TRUE);

专用于postgresql的导入工具pgfutter,支持 CSVJSON 格式数据的导入。 使用方法:

1
pgfutter --host "地址" --db "数据库" --port "端口" --user "用户名" --pw "密码" --schema "public" --table "表名" csv 待导入的csv文件.csv

Database connection details can be provided via environment variables or as separate flags.

参数 默认值 含义
DB_NAME postgres database name
DB_HOST localhost host name
DB_PORT 5432 port
DB_SCHEMA import schema to create tables for
DB_USER postgres database user
DB_PASS password (or empty if none)

更多用法参见官方文档

经测试,导入时对第一行最后一列为空的数据的数据导入出错。

其中数据库迁移包括:

  • 从 MySQL 迁移到 PostgreSQL
  • 从 SQLite 迁移到 PostgreSQL
  • 从 MS SQL Server® 迁移到 PostgreSQL 其中文件包括:
  • CSV 系列
  • 固定列格式—作者也不清楚是什么
  • dBase 文件 ( db3)
  • IBM IXF 文件
  • pgloader 支持存档格式zip、tar和gzip :直接在临时文件中提取存档,然后加载扩展文件。
  • 支持出错时停止或者出错时继续
  • 导入参数必须通过脚本文件定义,然后再通过pgloader加载脚本来导入。