Calender
Sun Mon Tue Wed Thu Fri Sat
     12
3456789
10111213141516
17181920212223
24252627282930
<< November 2019 >>
広告
SEARCH

SELECTED ENTRIES
RECENT COMMENTS
RECENT TRACKBACK
CATEGORIES
ARCHIVES
LINKS
PROFILE
OTHERS
SKYPE
PC: skype.jojo.jp
chat
iPad: iphone.jojo.jp
chat call
THANKS



本日:
昨日:
多言語
広告
 ▼▲ 作業日報 ▼△
    What's under the hood?
<< NULL の 正規表現 は ¥x0 (SED) | main | 消えた$1問題 >>
【PostgreSQL】DBファイルの互換性(Linux->Windows)
 Postgres8.3系のLinuxで利用したデータベースファイルはWindowsにはコピーでは持ってこれませんでした、pgpoolで(無謀にも)Win版とLinux版をレプリケーションすることは可能でした

 私の調べたところではMAXALIGNでエラーが出るところまでです、 おそらくLinux側でふさわしく再構築しなおせば、いけるのかも知れませんが簡単なコピーでは動きませんでした

経緯:
  Linuxで構築したDB(ファイル)をWindows版で利用しようと思い何も考えずにWindowsへコピーするとサービスが起動しない、、イベントログを見てみると下のようなエラーがでている
FATAL: invalid value for parameter "lc_monetary": "ja_JP.UTF-8"
FATAL: invalid value for parameter "lc_numeric": "ja_JP.UTF-8"
FATAL: invalid value for parameter "lc_time": "ja_JP.UTF-8"
※正確には一つ出るたびに停止します
 Linux版はデフォルトのUTF-8だったためWindowsバイナリとは合っていないのかと思い、Win版の設定を確認したところ文字コードは"C"
→postgres.confを調整
#lc_monetary = 'ja_JP.UTF-8' # locale for monetary formatting
lc_monetary = 'C' # locale for monetary formatting
#lc_numeric = 'ja_JP.UTF-8' # locale for number formatting
lc_numeric = 'C' # locale for number formatting
#lc_time = 'ja_JP.UTF-8' # locale for time formatting
lc_time = 'C' # locale for time formatting
再起動するとイベントログに以下のエラー
FATAL: could not create lock file "postmaster.pid": Permission denied
→dataディテクトリ以下に(postgres/pg)ユーザへの全権を与える
再起動
エラー発生アプリケーション postgres.exe、バージョン 8.3.1.876、エラー発生モジュール postgres.exe、バージョン 8.3.1.876、エラー発生アドレス 0x00249229
→不明だったので再起動
FATAL: database files are incompatible with server
DETAIL: The database cluster was initialized with MAXALIGN 4, but the server was compiled with MAXALIGN 8.
HINT: It looks like you need to initdb.

もしかしてOSが64Bit版(Windows Server2003 Enterprise x64 Edition SP2)だからかな?と思い32Bitマシンへもっていってみる(Windows PostgreSQLは32ビット版)
 32ビット環境(XP)でもやってみましたがMAXALIGNのエラーが同様に出ました

 pg_dumpall,pg_restoreによるバックアップ、回復は問題ありませんでしたがかなり大きなデータ(34Gbyte)だったのでコピーで済ませたかったのです。
試しに
./bin/initdb --lc-monetary=C --lc-numeric=C --lc-time=C /usr/local/pgsql/data
したものをコピーしてみましたが同じでした

番外として:
 pg_poolによるレプリケーション(WindowsとLinux)はなんとなく動きました(DB,テーブル作成,INSERT等)が、COPYコマンドでは失敗しました、COPYコマンドで指定したCSVファイルの位置が違うので当たり前ですが、、たらーっ

Version:
PostgreSQL8.3.3
pgpool-II-2.1
| サーバー関連 | 15:55 | comments(0) | trackbacks(0) |









http://blog.jojo.jp/trackback/1001391