为什么 PostgreSQL COPY 命令不允许数组中的 NULL 值?



我有以下表定义:

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"}
.

N表示NULL作为COPY的整个值,而不是作为另一个值的一部分,N对PostgreSQL本身没有任何特殊的意义。在数组中,N只是N, COPY只是将数组文字传递给数据库,而不是尝试使用COPY的规则来解释它。

您只需要知道如何构建一个包含NULL的数组字面量,并从精美的手册中:

设置数组常量的元素为NULL,将元素的值写为NULL。(NULL的任何大写或小写变体都可以。)如果你想要一个实际的字符串值" NULL ",你必须用双引号把它括起来。

所以你可以用这些:

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

最新更新