私は大量の音楽データを含む大きなファイル(1GB以上)を持っています。このファイルをCOPYコマンドで読みたいと思います。それは一つの大きなテーブルです。トラックがたくさんあります。0x00をNULLとして扱います
しかし、行372032にはジャンルがなく、代わりに0x00文字のトラックがいくつかあります。私が0x00文字がNULLシンボルであることがわかったが、postgresqlはこれを読むのに問題がある。
私が望むのは、postgresqlは0x00をNULLとして扱います。 postgresql documentation for COPYを見て、copyコマンドに、特定の文字列をNULLとして読み取るオプションがあることを確認してください。私はこれを試しましたが、オプション '\ 0x00'(私は '\ x00'、 '0x00'、 'x00'を試しました)を追加することでそれを得ることができませんでした。私はpostgresqlが最初に何かを読むことを望んでいるので、これを置き換えることができると思います。
は、私はこれは私がいくつかの異なるエンコーディングを使用してみました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
は(動作しませんでした)、次のエラーメッセージを表示します次のスクリプト
COPY music
FROM 'mw_spotify_labels.csv'
WITH DELIMITER ' '
NULL '\0x00'
encoding 'latin1';
を走りました。 0x00をスペースで置き換えるFARTも試しましたが、0x00を定義するうまい方法が見つかりませんでした。
誰かがNULLを動作させる方法を知っていますか? "0x00を置き換えるか、このファイルをインポートすることを可能にする他の解決策を設定していますか?
私の知る限り、CSV形式は内部的にNULLをサポートしていないので、0x00文字は間違いなく無効です。私はすべての0x00文字を¥Nまたはまたは他のプレースホルダーに置き換えます。問題は現在、クエリの実行やnullの適切な処理ではありません。PostgreSQLは基本的に、破損したCSVファイルを読み込んで解析することはできません。 –
は、 'psql =#コピーtmp'から '/path/to/file.csv'を区切り文字 '、' csvヘッダーエンコーディング 'windows-1251'などの別のエンコーディングを試してください。 –