[英]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) 的典型方法是在該字段中不添加任何內容。 例如,如果您有三列( A
、 B
和C
)並且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.