特定のデータベースをセットアップして実行するのに問題があります。他の人から入手した postgreSQL ダンプを復元しようとしています。私は無駄にいくつかの方法を試しました。
pg_restore から直接
pg_restore -C -d postgres --exit-on-error maggie_prod_20111221.dump.sql
最初にデータベースとテーブルスペースを作成する
createdb -T template0 maggieprod -E LATIN1
SQL:
CREATE TABLESPACE magdat OWNER maggie LOCATION '/somewhere/magdat';
pg_restore -v -d template1 maggie_prod_20110121.dump.sql
最初の方法を使用すると、次のようになります。
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 2308; 1262 16386 DATABASE maggieprod postgres
pg_restore: [archiver (db)] could not execute query: ERROR: encoding LATIN1 does not match locale en_CA.utf8
DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.
Command was: CREATE DATABASE maggieprod WITH TEMPLATE = template0 ENCODING = 'LATIN1' TABLESPACE = magdat;
2番目を使用して、データベースを作成しようとすると、次のようになります。
createdb: database creation failed: ERROR: encoding LATIN1 does not match locale en_CA.utf8
DETAIL: The chosen LC_CTYPE setting requires encoding UTF8.
LATIN1 エンコーディング データベースを作成できないようです。何故ですか?私はロケールとエンコーディングに不慣れで、それらについてあまり知りません。ダンプが LATIN1 データベースから作成されたことはわかっています。
の出力locale
は次のとおりです。
LANG=en_CA.utf8
LC_CTYPE="en_CA.utf8"
LC_NUMERIC="en_CA.utf8"
LC_TIME="en_CA.utf8"
LC_COLLATE="en_CA.utf8"
LC_MONETARY="en_CA.utf8"
LC_MESSAGES="en_CA.utf8"
LC_PAPER="en_CA.utf8"
LC_NAME="en_CA.utf8"
LC_ADDRESS="en_CA.utf8"
LC_TELEPHONE="en_CA.utf8"
LC_MEASUREMENT="en_CA.utf8"
LC_IDENTIFICATION="en_CA.utf8"
LC_ALL=
そしての出力locale -a
は次のとおりです。
C
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX
2 番目のコマンドに LATIN1 が表示されません。もしそうなら、どうやって追加しますか?コンピュータのロケールを変更する必要があると考えるのは正しいですか? もしそうなら、postgreSQL に対してのみそれを行う方法はありますか? また、ダンプを開こうとすると、大量の文字化けが表示されます。これはエンコーディングが原因であると想定していますが、どうすれば適切に表示できますか?
助けてくれてありがとう。