2016-11-16 66 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"} 
... 

讓空值在你的陣列。

相關問題