2017-10-13 22 views
0

我有一個INTEGER列具有NOT NULL約束和DEFAULT值= 0;PostgreSQL:從csv缺失值複製到一個列與NOT NULL約束

我需要從一系列csv文件中複製數據。

在其中一些文件中,此列是一個空字符串。

到目前爲止,我已經將COPY命令中的NULL參數設置爲某個不存在的值,所以空字符串不會被轉換爲NULL值,但現在我收到一個錯誤,指出INTEGER列的空字符串值不正確。

我想使用COPY命令,因爲它的速度,但也許這是不可能的。 該文件不包含標題。文件中的所有列都有表中的對應項。

它有辦法規定:

  1. 空刺痛爲零,或

  2. 如果有恩空字符串使用默認的列值?

+0

你的意思是空串如''?然後問題是類型不匹配。如果列只是空的,你的設置默認爲0應該可以正常工作'123,,456等'。 –

+0

是的,我認爲問題在於你說的類型不匹配,但由於某種原因它不起作用。我沒有使用postgreSQL的經驗,但在我看來,COPY就像是BULK insert,並且沒有違約行爲。我已經實現了一個解決方法,我使用允許NULL的臨時表,然後將所有NULL更新爲默認值,最後將記錄插入到目標表中。我可以在明天發佈工作示例以及文件示例 –

回答

0

您可以創建在不包含列,並在其上創建一個INSTEAD OF INSERT觸發器表的視圖。當您將COPY數據放入該視圖中時,將使用該表的默認值。不知道表現是否足夠好。

+0

感謝您的建議。目前,我轉向其他workaroud。 TEMP TABLE + UPDATE + INSERT(請參閱原文中的我的評論)。重要的問題是應該使用默認值與COPY操作,COPY中明確提及列以及如何避免類型不匹配。 –