You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决2GB级CSV导入PostgreSQL的报错并筛选指定列?

解决PostgreSQL导入Kaggle食谱CSV的问题及指定列导入方法

一、先解决CSV格式错误(根源问题)

你遇到的两个错误都是CSV格式不规范导致的:

  • unquoted newline found in data:食谱的ingredients、directions字段本身包含换行,但没被双引号包裹,PostgreSQL误将其识别为行分隔符。
  • extra data after last expected column:要么是字段内包含逗号(默认分隔符)未加引号,导致拆分出多余列;要么是CSV列数和表列数不匹配。

直接用sed删换行是治标不治本的,会破坏字段内容。推荐用Python脚本批量规范CSV并筛选需要的列:

import csv

# 替换成你的原CSV路径和输出路径
input_path = "原食谱数据集.csv"
output_path = "清理后_仅指定列.csv"

# 要保留的目标列
target_columns = ["title", "ingredients", "directions", "NER"]

with open(input_path, "r", encoding="utf-8") as infile, open(output_path, "w", encoding="utf-8", newline="") as outfile:
    reader = csv.DictReader(infile)
    writer = csv.DictWriter(outfile, fieldnames=target_columns, quoting=csv.QUOTE_ALL)
    writer.writeheader()
    for row in reader:
        # 仅写入指定列,自动处理字段内的换行和逗号
        writer.writerow({col: row[col] for col in target_columns})

这个脚本会把所有字段用双引号包裹,保留字段内的换行/逗号,同时直接过滤出你需要的4列,彻底解决格式问题。

二、pgAdmin导入步骤(针对清理后的CSV)

  1. 确保你的PostgreSQL表已创建,列名与target_columns一致(顺序不影响)。
  2. 右键目标表 → 选择Import/Export Data。
  3. 在导入配置窗口:
    • 选择Import,指定清理后的CSV文件路径。
    • 编码选择UTF8(和CSV编码一致)。
    • 分隔符设为逗号(,),如果原CSV用其他分隔符(如制表符)则对应修改。
    • 勾选Header(因为CSV包含表头行)。
    • 切换到Options标签页:勾选Quoted,引号字符设为",这样PostgreSQL会正确识别带引号的字段内容。
    • 若表列和CSV表头不完全对应,切换到Columns标签页,手动匹配CSV列和表列(只选你需要的4列即可)。
  4. 点击OK开始导入,2GB数据需要一定时间,请勿中断连接。

三、备选方案:用psql的\copy命令(更稳定快速)

如果pgAdmin导入卡顿或报错,推荐用psql客户端执行\copy命令,适合大文件:

-- 替换your_table_name为你的表名,路径替换为清理后的CSV绝对路径
\copy your_table_name(title, ingredients, directions, NER) FROM '/路径/清理后_仅指定列.csv' WITH (
    FORMAT csv,
    HEADER true,
    DELIMITER ',',
    QUOTE '"',
    ENCODING 'UTF8'
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:42:36