使用pgAdmin 4导入CSV至PostgreSQL时遇整数输入语法错误
解决PostgreSQL导入CSV时的"invalid input syntax for integer"错误
这个问题我碰到过好多次,核心原因其实很明确,我帮你一步步拆解解决:
错误根源分析
你的CSV文件用**分号(;)作为字段分隔符,但PostgreSQL的COPY命令默认是用逗号(,)来分割字段的;同时CSV第一行的表头被当成了数据行,数据库试图把"id;date;time;latitude;longitude"这个字符串塞进整数类型的id字段,直接触发了语法错误。另外还有个隐藏坑:你的纬度/经度用的是逗号(,)**作为小数点分隔符,这和PostgreSQL默认的点(.)格式不兼容,不处理的话后续导入也会失败。
修正后的导入命令
根据你的场景,分两种导入方式给出修正后的命令:
1. 服务器端导入(文件存储在PostgreSQL服务器上)
COPY kordinater.test(id, date, "time", latitude, longitude) FROM '/服务器上的文件绝对路径/你的数据.csv' DELIMITER ';' CSV HEADER DECIMAL_SEPARATOR ',';
2. 客户端导入(文件在你的本地机器,用psql的\copy)
\copy kordinater.test(id, date, "time", latitude, longitude) FROM '/本地文件路径/你的数据.csv' WITH ( DELIMITER ';', CSV HEADER, DECIMAL_SEPARATOR ',' );
关键参数说明
DELIMITER ';':告诉PostgreSQL用分号匹配你的CSV字段分隔规则CSV HEADER:声明第一行是表头,跳过不导入到数据库DECIMAL_SEPARATOR ',':让数据库识别逗号作为小数点,正确转换59,86411203这类数值- 明确列出字段名:避免CSV字段顺序和表结构不一致导致的错位问题
额外注意事项
- 服务器端导入要确保PostgreSQL进程有读取该文件的权限
- 客户端导入用本地路径即可,不需要考虑服务器权限问题
CSV模式会自动处理换行、特殊字符等情况,比纯文本导入更稳定
内容的提问来源于stack exchange,提问作者Slotmachine
相关产品推荐
相关产品推荐

