【问题标题】:Use COPY but table has extra columns?使用 COPY 但表有额外的列?
【发布时间】:2020-02-07 00:25:20
【问题描述】:

我有一个供应商提供的 CSV 文件。我想将它复制到一个表中,除了表有几个额外的列,我想通过触发器中的派生来填充。相当直接的副本:copy mytable from '/some/file.csv' DELIMITER ',' csv;

复制命令失败,告诉我缺少数据: ERROR: missing data for column "arrival_dates"

当然,该列不在原始 csv 中。有没有办法强制复制只填写它得到的列?本质上,csv 有前 18 列,然后还有两列我通过触发器派生和填充。我尝试将 DEFAULT 分配给表声明中的列,但这没有帮助。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    这是相当微不足道的。与INSERT 一样,COPY 允许您指定输入字段的字段对应的列。

    如果你的表有col1col2col3col4,但文件不包含第三列,你可以简单

    COPY atable(col1, col2, col4)
    FROM '/some/file.csv'
       (FORMAT 'csv', DELIMITER ',');
    

    【讨论】:

    • 这适用于 psql 中的 COPY\copy
    • 那么,如果 csv 有 3 列 a,b,c 而我的表有 4 a,b,c,d 我可以做 COPY (a,b,c) FROM 'some/file.cxv' 并且它会停止抱怨缺少 d 列?
    • 是的。您可以自己验证。
    猜你喜欢
    • 2016-06-30
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多