2017-09-18 33 views
1

我試圖將一個CSV文件複製到Postgres 9.5.3中,並遇到NULL問題。該文件以ASCII編碼,我的client_encoding爲UTF-8,服務器編碼爲UTF-8。 空值位於帶引號的字符串中,如下所示。在PostgreSQL數據庫中複製NULL

enter image description here

我得到這個錯誤

ERROR: invalid byte sequence for encoding "UTF8": 0x00 
CONTEXT: COPY test_null, line 1 
********** Error ********** 

ERROR: invalid byte sequence for encoding "UTF8": 0x00 
SQL state: 22021 
Context: COPY test_null, line 1 

我的表結構

CREATE TABLE TEST_NULL(NULLCOLUMN CHAR(10)); 

copy TEST_NULL from 'F:\User Area\DCS.TXT' csv NULL AS 'null'; 

我試圖通過指定 「\」 轉義它,並試圖複製命令的其他選項,但似乎沒有任何工作。不知道,如何處理這個。

+0

DCS.TXT文件的第一行是什麼? –

+2

你使用utf8編碼空值將數據庫的空值混淆,你需要去除文本文件中的空值。 tr可以做到這一點,就像其他一些utils一樣。 tr -d'\ 000' outfile –

+0

我可以重新定義我的列到bytea並加載NULL嗎? –

回答

0

您的文件包含ASCII 0字符,它被PostgreSQL拒絕。

如果要將它們加載到數據庫中,必須使用一些其他表示形式來表示NULL值,其中COPY