sql - 为什么 PostgreSQL COPY 命令不允许数组中存在 NULL 值?

标签 sql arrays postgresql 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),当我期望 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, write NULL for the element value. (Any upper- or lower-case variant of NULL 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/

相关文章:

java - 如何防止在 Heroku PostgreSQL 中删除公共(public)模式?

sql - 在 Postgresql 中插入的条件规则

mysql - 连接和左连接

javascript - 嵌套数组求和

Javascript - 计算数组中的出现次数但不改变顺序

javascript - plv8 在 eval() 中禁用执行和准备功能

MySQL 5.0 根据不同的列分配编号

mysql - 用于检查 JSON 数组中是否存在至少一项的 SQL 正则表达式

java - 在不知道数组大小的情况下分析数组

ruby-on-rails - Rails PostgreSQL:列 "table_rows"不存在(ActiveRecord::StatementInvalid)