我有以下表定义:
create table null_test (some_array character varying[]);
以及以下包含数据的 SQL 文件。
copy null_test from stdin;
{A,\N,B}
\.
当取消数据嵌套时(使用 select unnest(some_array) from null_test
),当我期望 NULL 时,第二个值为“N”。
我尝试将数据更改为如下所示(在数组值上使用内部引号):
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 和 fine manual 的数组文字。 :
To set an element of an array constant to
NULL
, writeNULL
for the element value. (Any upper- or lower-case variant ofNULL
will do.) If you want an actual string value "NULL
", you must put double quotes around it.
所以你可以使用这些:
{A,null,B}
{"A",NULL,"B"}
...
在数组中获取 NULL。
关于sql - 为什么 PostgreSQL COPY 命令不允许数组中存在 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643142/