人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

postgresqlの質問です。

UNICODEで初期化したDBに格納されているデータをdumpしたUNICODEのデータがあります。
これをEUCで初期化されたDBに復元したいのですが、
どのような方法があるでしょうか?

OS:Vine3.2
postgresql7.1.9

以上、宜しくお願いします。

●質問者: masashi0316
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB dump EUC OS postgreSQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● JULY
●50ポイント

「dump」とおっしゃっているのが「pg_dump」で得られたものであれば、データベース上でどの文字コードで保存しているかは、関係ありません。

その dump したファイルの中身を見れば、たぶん、

SET CLIENT_ENCODING ?

という行があると思います。pg_dump を実行した時のクライアント側の文字コードでファイルが作られているはずです。

サーバ側の文字コードとクライアント側の文字コードは、自動的に変換されます。pg_dump で得られる結果の文字コードはクライアント側の文字コードになっているので、サーバ側の文字コードを意識する必要はありません。

それより、PostgreSQL のバージョンがすごく古いのが気になりますが...

◎質問者からの返答

pg_dumpで得られるものです。

また、確かにファイル冒頭に

SET client_encoding = 'UNICODE';

とあります。

以下の作業をするとエラーになり困っています。

1.pg_dump [DbName] > [BackUpFileName]を実施。

2.1.で得られたファイルを復元側のサーバに配置。

3.復元側サーバでcreatedb [DbName]を実施。

4.psql -e -f [BackUpFileName] [DbName]

ここで、

COPY [TableName]・・・の後に

ERROR: ignoring unconvertible EUC_JP character 0xe382

と表示され、[TableName]のデータが取り込めません。

解決方法をご教授いただければ幸いです。

#バージョンは確かに古いですね、

#テスト環境のため怠慢してました^^


2 ● b-wind
●50ポイント

いまだにそんな古いバージョンが残っていたのか…。

もうサポートも無いし、早めにバージョンアップを検討したほうがいいですよ。


ダンプしたデータの先頭に、

SET CLIENT_ENCODING 'UNICODE';

か、psql でレストアする場合は

\encoding UNICODE

と記述しておけば自動的にコードが変換されて格納されます。


ただし、当然ですが PostgreSQL が対応していない文字については変換しきれない可能性はあります。

そのばあいワーニングがでるので判別は容易ですが。

◎質問者からの返答

>PostgreSQL が対応していない文字については変換しきれない可能性はあります

これですかねぇ。

\encoding UNICODE

も記述してみましたがだめでした。

それと、一つ書き忘れてましたが、

復元側のサーバでDBを作成する際、

createdb -E UNICODE [DbName]としてやると

うまく取り込めます。

でも、ちょっと理由があって、EUCの文字コードで作成されたDBに格納する必要があります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ