Linux機で動いているアプリの開発をWindows機で行っているのですが、毎回毎回、ちょっとした動作確認をするにもLinux機へアプリをインストールして動かさないといけないのは大変ですし、すでに実稼動しているサーバが落ちてしまっても困るので、Windows機にPostgreSQLをインストールして、動作確認を行えるようにしました。
さて、すでに稼動しているLinux機のデータをバックアップして、そのデータをWindows機に展開するのですが、とりあえずpg_dumpを使わずに、テーブル毎にダンプさせてバックアップを試みました。このやり方だと、いろいろ後で融通が利くからです(笑)
まずは、以前やったテーブルの拡張と同じやり方で、既存DBからテーブル毎にデータを取ってきます。さて、これをWindows機に展開するので、PostgreSQLのコマンドプロンプトから
psql -U postgres WIN_DB -c "copy COLUM from '.¥COLUM.db.out' using delimiters ',' with null as ''"
と実行してみるものの・・・
psql: warning: extra command-line argument "-c" ignored
psql: warning: extra command-line argument "copy COLUM from '.\COLUM.db.out' using delimiters ',' with null as ''" ignored
Welcome to psql 8.1.2, the PostgreSQL interactive terminal.
Type: ¥copyright for distribution terms
¥h for help with SQL commands
¥? for help with psql commands
¥g or terminate with semicolon to execute query
¥q to quit
あれれ、なんかエラーが。面倒なので、psqlの中から実行してみました。ついでに、念のためということで、ファイルはフルパスで指定。
WIN_DB=# copy COLUM from 'c:¥program files¥postgresql¥8.1¥bin¥COLUM.db.out' using delimiters ',' with null as '';
ERROR: could not open file ".c:program filespostgresql8.inCOLUM.db.out" for reading: No such file or directory
がび~ん!!∑( ̄□ ̄;)
ど、どうやらエスケープし忘れていた模様・・・恥ずかしい(´Д`;)
気を取り直して、
WIN_DB=# copy COLUM from 'c:¥¥program files¥¥postgresql¥¥8.1¥¥bin¥¥COLUM.db.out' using delimiters ',' with null as '';
COPY
ということで、無事コピー終了。Windows機でバックアップやリストアするときは、エスケープすることを心がけましょう、という教訓です(´Д`)
P.S. 実は・・・文字コードがLinuxではEUC、WindowsではShift-JISということを忘れていて、上記作業を二度行ったことはここだけの話です(汗)
コメント