2017-09-18 32 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