古いバージョンのPostgreSQLは、新しいバージョンほどUTF-8準拠に厳密ではありませんでした。おそらく、無効なUTF-8を含むデータをそのような古いバージョンから新しいバージョンに復元しようとしています。
無効な文字列はクリーンアップする必要があります。これらのエラーのためにインポートされなかったテーブルごとに、次の手順に従うことができます。
-
テーブルの内容をダンプファイルからSQLプレーンテキストファイルに抽出します。
pg_restore --table=tablename --data-only dumpfile >plaintext.sql
-
テキストエディタで、または
iconv
を使用して自動的に無効な文字を削除します :iconv -c -f UTF-8 -t UTF-8 <plaintext.sql >plaintext-cleaned.sql
-
サニタイズされたデータをインポートします:
psql dbname < plaintext-cleaned.sql