You need to enable JavaScript to run this app. PostgreSQL COPY导入CSV报numeric类型输入语法无效问题
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL COPY导入CSV报numeric类型输入语法无效问题

报错根本原因

COPY ... CSV HEADER 的列匹配逻辑,是严格按照表定义的列从左到右的顺序,对位CSV文件的列,完全不会根据CSV的表头名称和表的列名做自动匹配。
其中HEADER参数的唯一作用,是告知Postgres跳过CSV第一行的表头文本,不将其作为数据行导入,没有列名匹配的能力。

你现在的列顺序完全错位:

  • 建表时定义的列顺序(从左到右):Title → Sold_Price(数值类型) → Bids(整数类型) → Sold_Date(日期类型) → Card_Link → Image_Link
  • 本地CSV的列顺序(从左到右):Title → Sold_Date(日期值) → Sold_Price(价格值) → Bids → Card_Link → Image_Link

错位后,表中定义为数值类型的第2列Sold_Price,实际接收的是CSV第2列的日期文本2021-02-14,直接触发数值解析失败的报错。就算跳过这个报错,后续所有列都会错配:Bids列会收到价格值、Sold_Date列会收到竞价数字,导入后数据完全错乱。

可落地的解决方案

方案1:导入时显式指定列映射(推荐)

不需要修改表结构、也不需要调整CSV文件内容,直接在COPY语句中括号里列出和CSV顺序完全一致的表列名,让Postgres按你指定的对应关系导入即可:

COPY Public."CardData"(Title, Sold_Date, Sold_Price, Bids, Card_Link, Image_Link)
FROM 'W:\Python_Projects\cardscrapper_project\ebay_api\card_data_test.csv' 
DELIMITER ',' 
CSV HEADER ;

方案2:调整表的列定义顺序

如果希望保持原有COPY语句的写法不改动,就重建表,把列顺序调整为和CSV完全对齐:

CREATE TABLE Public."CardData"(
  Title text, 
  Sold_Date date,
  Sold_Price decimal,
  Bids int, 
  Card_Link text, 
  Image_Link text
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 16:54:03