【问题标题】:Why doesn't the PostgreSQL COPY command allow NULL values inside arrays?为什么 PostgreSQL COPY 命令不允许在数组中使用 NULL 值?
【发布时间】:2016-11-16 21:59:54
【问题描述】:

我有如下表定义:

create table null_test (some_array character varying[]);

以及以下包含数据的 SQL 文件。

copy null_test from stdin;
{A,\N,B}
\.

当取消嵌套数据(使用select unnest(some_array) from null_test)时,第二个值是“N”,而我期望为 NULL。

我尝试将数据更改为如下所示(在数组值上使用内部引号):

copy null_test from stdin;
{"A",\N,"B"}
\.

插入了相同的非空值“N”?

为什么这不起作用?有解决方法吗?

编辑

根据接受的答案,以下工作有效。但是,根据您使用的是单个值还是数组值,COPY 命令中 NULL 值的两种表示是不一致的。

copy null_test from stdin;
{"A",NULL,"B"}
\.

【问题讨论】:

    标签: sql arrays postgresql null


    【解决方案1】:

    \N 表示 NULL 作为 COPY 的一个完整值,而不是另一个值的一部分,\N 对 PostgreSQL 本身没有什么特别的。在数组内部,\N 只是 \N,COPY 只是将数组字面量传递给数据库,而不是尝试使用 COPY 的规则来解释它。

    您只需要知道如何从fine manual 构建一个包含NULL 的数组字面量:

    要将数组常量的元素设置为NULL,请将元素值写入NULL。 (NULL 的任何大写或小写变体都可以。)如果你想要一个实际的字符串值“NULL”,你必须在它周围加上双引号。

    所以你可以使用这些:

    {A,null,B}
    {"A",NULL,"B"}
    ...
    

    在你的数组中获取 NULL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 2019-03-11
      相关资源
      最近更新 更多