You need to enable JavaScript to run this app. PostgreSQL导入CSV文件被截断仅导入65535行的原因及解决办法
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL导入CSV文件被截断仅导入65535行的原因及解决办法

问题原因
  • CSV文件导出环节截断:使用旧版Excel(支持.xls格式版本)导出CSV时,单工作表最大行数限制为65536行,去除表头后刚好为65535行数据,导出时就已经丢失了超出部分。
  • 文件含异常结束符:CSV文件中被错误插入了EOF(ASCII 0x1A)结束符,PostgreSQL的COPY命令读取到该字符时会判定文件已结束,刚好停在65535行位置。
  • 目标表字段类型超限:如果表的主键、唯一键等非空字段使用了16位整数类型(如无符号smallint),其最大值为65535,插入第65536行时触发类型上限错误,导入隐性中断。
  • 第三方工具限制:通过老版本phpPgAdmin、Navicat试用版等第三方管理工具执行导入时,部分工具对单次导入行数设置了65535的上限,自动截断超出部分。
  • 导入触发隐性报错:第65536行存在格式错误(如字段数不匹配、类型转换失败),当前会话未开启错误打印,导入静默中断。
修复方案
  1. 验证CSV文件完整性
    优先确认原始CSV行数符合预期,Linux/Mac执行命令:
    wc -l 你的CSV文件路径
    Windows PowerShell执行命令:
    (Get-Content 你的CSV文件路径 | Measure-Object -Line).Lines
    如果确认是导出环节截断,不要使用旧版Excel中转CSV,直接从业务系统导出完整CSV,或使用支持xlsx格式的Excel重新导出。

  2. 移除文件异常结束符
    Linux/Mac执行命令清除EOF字符:
    sed -i 's/\x1A//g' 你的CSV文件路径
    Windows可使用Notepad++打开文件,开启「视图-显示符号-显示所有字符」,手动删除识别到的EOF符号,或执行PowerShell命令:
    (Get-Content 你的CSV文件路径 -Raw) -replace "x1A", "" | Set-Content 新的CSV文件路径`

  3. 调整目标表字段类型
    执行SQL查看表结构确认字段类型:

\d+ 你的表名

如果存在使用smallint的非空自增字段,修改为上限更高的整数类型:

ALTER TABLE 你的表名 ALTER COLUMN 字段名 TYPE integer;
  1. 使用命令行执行导入并开启错误捕获
    建议直接使用psql命令行执行COPY命令,绕过第三方工具限制,同时增加错误日志配置避免静默中断:
-- 提前创建错误日志表,用于存储导入失败的行数据
CREATE TABLE 导入错误日志 (LIKE 你的表名, 错误信息 text, 错误发生时间 timestamp);

COPY 你的表名(字段列表)
FROM '你的CSV文件绝对路径'
DELIMITER ','
CSV HEADER
LOG ERRORS INTO 导入错误日志
SEGMENT REJECT LIMIT UNLIMITED;

导入完成后执行SELECT COUNT(*) FROM 你的表名确认导入行数,同时可查询导入错误日志表处理异常数据。

内容的提问来源于stack exchange,提问作者sheanshar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 15:09:02