【问题标题】:Copy from csv with default values使用默认值从 csv 复制
【发布时间】:2016-07-05 17:15:52
【问题描述】:

我有 CSV 文件要导入到包含许多列的 PostgreSQL 表中。 我首先创建一个临时表,然后在其中复制 CSV 文件...

DROP TABLE IF EXISTS mylist;
CREATE TEMP TABLE mylist (a text, b text, c text, d text, e text, f text, 
                      g text, h text, i text, j text, k text, l text,
                      m text, n text, o text, p text, q text, r text, 
                      s text, t text, u text, v text, w text, 
                      CONSTRAINT popisp_pkey PRIMARY KEY(A));

COPY mylist FROM 'C:\temp\popisp1.csv' DELIMITER AS ';' CSV;

这会将数据复制到表中,但会出现其他问题。在没有任何数据的字段中,似乎复制了 Null,但我需要一个空字符串 ('')。

这里有什么方法可以自动获取表格单元格中没有数据的空字符串吗?
我试图将 DEFAULT '' 添加到每个列声明但没有成功。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    添加NULL 参数和一个肯定不会出现在文件中的字符串:

    COPY mylist FROM 'C:\temp\popisp1.csv' DELIMITER AS ';' NULL '<<>>' CSV;
    

    the documentation:

    指定表示空值的字符串。默认为文本格式的 \N(反斜杠-N),以及 CSV 中未加引号的空字符串 格式。即使是文本格式的案例,您也可能更喜欢空字符串 您不想将空值与空字符串区分开来。这个 使用二进制格式时不允许使用选项。

    或者使用coalesce():

    update mylist set
        a = coalesce(a, ''),
        b = coalesce(b, ''),
    --    ...
        w = coalesce(w, '');
    

    【讨论】:

    • 我自己找到的。但这并不是“自动”的:)
    • 好吧,我还有一个提议 ;)
    • 嗯,我第一次看到这个!它部分工作。所有单元格为空的列不填充''。你能改进一下吗?
    • 最后,我必须使用 Coalesce 方法来获得想要的结果。无论如何,感谢您的帮助!
    • 在文档中是否有可以阅读更多关于“NULL '>'”表达式的地方?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多