WIN1252でエンコードされたpg_dumpを使用して作成したdmpファイルがあります。私がやりたいのは、pg_restoreを使用してLinuxマシンのデータベースにインポートすることです。問題は、WindowsマシンでpostgreSQLがWIN1252エンコーディングを認識しますが、CP1252エンコーディングを認識しないことです(どちらも同じ規格の異なる名前であり、まったく同じです)。 Linuxマシンでは、postgreSQLはCP1252を認識しますが、WIN1252は認識しません。したがって、pg_restoreを実行しようとすると、WIN1252が適切なエンコーディングとして認識されないため、エラーが発生します。また、Windowsでpg_dumpを実行し、エンコーディングをCP1252として指定しようとすると、同様のエラーが発生します。私はこのエンコーディング形式を使い続けたいので、utf8でpg_dumpを実行することは、私がやりたいことではありません。何か助けていただければ幸いです!
編集:実際には、さらに調査したところ、postgreSQLはcp1252を理解していません。テキストファイルをあるエンコーディングから別のエンコーディングに変換するために使用されるiconv linuxコマンドは、win1252ではなくcp1252を理解し、それを取得しました。 Linuxマシンでは、クライアントのエンコーディングをWIN1252に設定できません。これはエラーメッセージです。
FATAL: conversion between WIN1252 and LATIN1 is not supported
変数client_encodingは、LinuxマシンではもともとUTF8に設定されていたため、LATIN1がどこから来ているのかわかりません。 WIN1252がサポートされていない限り、postgresはそれをlatin1に変換しようとします。これは、それに最も近いものであり、一部の文字のミスマッチのためにそれを達成できないためですか?
あなたが持っているダンプファイルはWIN1252でエンコードされており、LinuxのターゲットデータベースはサーバーのエンコードとしてLATIN1を持っていると思います。エラーメッセージが言うように、それはうまくいきません。
UTF8を使用してターゲットデータベースを再初期化することをお勧めします。
または、pg_dump -E
オプションを使用して、UTF8でダンプを作成します。
解決策は、「iconv」ユーティリティを使用することです。 cat dump.sql | iconv | psql
。これは通常、エンコーディングをクリーンアップします。
参照: http://www.documentroot.com/2013/12/utf8-encoding-and-postgres-dump.html