7

特定のデータベースをセットアップして実行するのに問題があります。他の人から入手した postgreSQL ダンプを復元しようとしています。私は無駄にいくつかの方法を試しました。

  1. pg_restore から直接

    pg_restore -C -d postgres --exit-on-error maggie_prod_20111221.dump.sql

  2. 最初にデータベースとテーブルスペースを作成する

    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 に対してのみそれを行う方法はありますか? また、ダンプを開こうとすると、大量の文字化けが表示されます。これはエンコーディングが原因であると想定していますが、どうすれば適切に表示できますか?

助けてくれてありがとう。

4

3 に答える 3

8

エンコーディングに一致するロケールでデータベースを作成する必要があります。

createdb -T template0 maggieprod -E LATIN1 --locale=en_CA

すべてのロケールがインストールされているわけではないので、Debian または Ubuntu を使用していると思います。その場合は、パッケージを呼び出すdpkg-reconfigure localesかインストールしてください。locales-all

または、 encoding を使用してデータベースを作成しますUTF8。すべてのクライアントがクライアント エンコーディングを正しく設定している限り、違いはありません。

于 2011-02-08T07:58:32.040 に答える
1

The_Denominater の createdb 構文の使用に問題があったため、次のようにしました。

CREATE DATABASE maggieprod WITH ENCODING = 'LATIN1'
  LC_CTYPE = 'en_CA' LC_COLLATE = 'en_CA'
  TEMPLATE template0;
于 2011-05-16T11:26:18.713 に答える
0

それでも興味がある場合は、recode コマンドを使用してデータベース ダンプを選択した文字セットに変換してから、新しいデータベースにインポートします。このリンクを参照してください - http://blog.e-shell.org/134

于 2012-04-08T10:31:23.723 に答える