我有以下表定义:
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"}
...