2016-11-16 41 views
0

我有以下表定义:为什么PostgreSQL COPY命令不允许数组内的NULL值?

create table null_test (some_array character varying[]); 

和包含的数据下面的SQL文件。

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

当unnesting的数据(与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"} 
\. 

回答

2

\N代表NULL作为一个整体的价值副本,而不是作为另一个价值的一部分,\N没有什么特别的PostgreSQL的本身。在数组内部,\N只是\N,COPY只是将数组文本传递给数据库,而不是试图使用COPY的规则来解释它。

你只需要知道如何建立包含空数组文本,并从fine manual

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

所以,你可以使用这些:

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

让空值在你的阵列。

相关问题