2011-02-08 10 views
7

特定のデータベースをセットアップして実行するのに問題があります。私は誰かから得たpostgreSQLのダンプを復元しようとしています。私は役に立たないいくつかの方法を試しました。PostgreSQL用Linuxでのロケールの設定

ストレートpg_restoreの

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

  • からデータベースや表領域の作成

    1. 最初

      createdb -T template0 maggieprod -E LATIN1

      SQL:CREATE TABLESPACE magdat OWNER maggie LOCATION '/somewhere/magdat';

      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;

      アン:私は次の取得最初の方法を使用して

    私が試してみて、私が手にデータベースを作成するときにD、秒を使用して:

    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データベースから作られたことを知っています。

    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の出力は次のとおりです:

    localeの出力がある

    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のためだけにそれを行う方法はありますか?また、ダンプを試してみると、たくさんのガベージ文字が表示されます。これはエンコードされていると仮定していますが、どうすれば適切に見えますか?

    ありがとうございました。あなたはすべてのロケールがインストールされていないので、あなたはエンコーディングに一致するロケールを使用してデータベースを作成する必要が

  • 答えて

    6

    は、例えば、

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

    は、私はあなたがDebianやUbuntuのを使用していると思います。その場合は、dpkg-reconfigure localesに電話をかけるか、locales-allパッケージをインストールしてください。

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

    1

    私はThe_Denominaterからcreatedbの構文を使用してトラブルを持っていたので、私はそれを次のようでした:あなたはrecodeのコマンドを使用して、まだ興味がある場合

    CREATE DATABASE maggieprod WITH ENCODING = 'LATIN1' 
        LC_CTYPE = 'en_CA' LC_COLLATE = 'en_CA' 
        TEMPLATE template0; 
    
    0

    を使用しているデータベースのダンプがお好みの文字セットに変換しますそれを新しいデータベースにインポートします。このリンクを参照してください - http://blog.e-shell.org/134