[PostgreSQL] Linux機からWindows機へデータコピー

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ということを忘れていて、上記作業を二度行ったことはここだけの話です(汗)

スポンサーリンク

この記事をシェア

アカウントをフォロー