treat 0x00 as NULL



我有一个包含大量音乐数据的大文件(超过 1gb),我想使用 COPY 命令读取此文件。这是一张大桌子。有很多曲目。

但是,在第 372032 行中,有一些曲目没有流派,而是0x00字符。经过一番谷歌搜索,我发现0x00字符是一个空符号,但postgresql在阅读时遇到了问题。

我想要的是postgresql将0x00视为NULL。查看 COPY 的 postgresql 文档,发现 copy 命令有一个将特定字符串读取为 NULL 的选项。我试过这个,但无法通过添加选项 NULL '\0x00' 来获得它(我也尝试了'\x00'、'0x00'、'x00')。我认为这是因为postgresql首先希望能够读取某些内容,然后才能替换。

我运行了以下脚本

COPY music
FROM 'mw_spotify_labels.csv'
WITH DELIMITER '    '
NULL 'x00'
encoding 'latin1';

这给了我以下错误消息

ERROR:  invalid byte sequence for encoding "LATIN1": 0x00
CONTEXT:  COPY music, line 372032
********** Error **********
ERROR: invalid byte sequence for encoding "LATIN1": 0x00
SQL state: 22021
Context: COPY music, line 372032

我尝试使用几种不同的编码(不起作用)。我也尝试过用空格代替0x00的 FART,但我找不到定义0x00的好方法。

有没有人知道一种方法可以让 NULL 工作,用 ' ' 设置替换0x00或其他解决方案,使我可以导入此文件?

通过 Vim 编辑文件,并将所有x00替换为''。这行得通。

:%s/%x00//g

相关内容

  • 没有找到相关文章

最新更新