簡體   English   中英

使用 psql 從 csv 文件復制時,null 列的“”會生成錯誤,而不是 null

[英]When using psql to copy from a csv file, a “” for a null column generates an error instead of a null

我正在嘗試使用 copy 將大型 csv 文件復制到 postgres 表中。

某integer列主要是null。 在 csv 文件中,這一列只有“”。

每一列都被引用,這對於其他列似乎不是問題。

當我嘗試復制它時出現此錯誤:

ERROR: invalid input syntax for integer: ""

我嘗試在我的復制語句中將 NULL 子句設置為“”和“”。 '' 什么都不做,"" 生成錯誤:

zero-length delimited identifier at or near """"

我嘗試使用 sed 將所有“”更改為“”,但即使將 null 子句設置為“”,這仍然不起作用。 我仍然得到

ERROR: invalid input syntax for integer: " "

現在,我可以通過將列設置為 -1 來繼續。 反正我不是很關心這個專欄。 我可以將它設置為 null,或者忽略它,但是當我試圖將它從復制命令的列定義部分中取出時,postgres 對我大喊大叫。

所以我的問題歸結為:如何告訴 postgres 將 "" 視為 null 值?

謝謝你。

在 a.csv 文件中指示缺失值 (null) 的典型方法是在該字段中不添加任何內容。 例如,如果您有三列( ABC )並且B沒有值,則 .csv 文件將包含"Col A value",,"Col C value" ""是一個字符串值,而不是一個數值,因此無法將其視為一個值。

這就是force_null選項的用途:

將指定列的值與 null 字符串匹配,即使它已被引用

所以假設 int 列的名稱是“y”:

\copy foo from foo.csv with (format csv, force_null (y));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM