gpt4 book ai didi

sql - 为什么 PostgreSQL COPY 命令不允许数组内有 NULL 值?

转载 作者:行者123 更新时间:2023-11-29 12:42:50 26 4
gpt4 key购买 nike

我有下表定义:

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 的数组字面量,并从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com