pg_dumpについて(疑問)
pgAdminVでバックアップを実行しないと、pg_dumpが、正しく、動作しない?
CentOS6.9(64bit)に、PostgreSQL9.5.9(EDB版64bit)をインストール(pg_dumpのバージョンを合わすため、9.5に)。
クライアント(1) Windows10(64bit)にpgAdminVをインストール、バックアップ/リストアの動作OK。
クライアント(2) Windows7(32bit)にpg_dumpを実行するため、Windows10のpgAdminVフォルダをコピー。
クライアント(1) で動作した、バックアップコマンドが、動かない、クライアント(2) で、pgAdminVを実行し、pgAdminVから、バックアップを実行すると動作OK、その後、ダメだった、バックアップコマンドも動作するようになる。
01. 最初にWindows10で、インストール済みのpgAdmin3を起動。
02. GUIで、バックアップを選択。
03. USBをバックアップの対象にします。
04. この機器(クライアント(1)とします)では、USBが H: になりました。
H:\に、pg96_Postal_1.bakup として、バックアップします。
05. バックアップ完了。
06. 一番上に戻って、バックアップコマンドをテキストに、コピーします。
C:\Program Files (x86)\pgAdmin III\1.22\pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --no-password --format custom --verbose --file "H:\pg96_Postal_1.backup" "d6pg_postal_db"
07. 念ため、リストアできるか、確認すため、新しいデータベースを作成します。
08. テーブルは 0 です。
09. GUIで、リストアを選択。
10. USBからリストアします。
11. 実行
12. リストア完了。
13.
C:\Program Files (x86)\pgAdmin III\1.22\pg_restore.exe --host 192.168.24.57 --port 5432 --username "postgres" --dbname "a_restore_db" --no-password --verbose "H:\pg96_Postal_1.backup"
14. テーブル 1 になりました。
15. データが存在するか確認。
16. pgAdmin3を、USBにpg3というフォルダを作成してコピーします。(別マシンで、pg_dumpを実行するためです)
ここから、コピーした、USBをWindows7に接続します。
01. クライアント(2)とします、こちらでは、USBは、F: となりました。
02. pg3フォルダに移動。
03.
04.
クライアント(1)の6で行った
C:\Program Files (x86)\pgAdmin III\1.22\pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --no-password --format custom --verbose --file "H:\pg96_Postal_1.backup" "d6pg_postal_db"
を
C:\Program Files (x86)\pgAdmin III\1.22\をカットして、H:\ を F:\に変更。
pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --no-password --format custom --verbose --file "F:\pg96_Postal_1.backup" "d6pg_postal_db"
MSVCR120.dll が見つからなかったため、アプリケーションを開始できませんでした。
となるので
05.
インストール
06.
07.
再度
08.
F:\pg3>pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --no-p
assword --format custom --verbose --file "F:\pg96_Postal_2.backup" "d6pg_postal
_db"
とすると
エラー
pg_dump: [archiver (db)] connection to database "d6pg_postal_db" failed: fe_send
auth: no password supplied
pg_dump:[archiver(db)]データベース "d6pg_postal_db"への接続に失敗しました:fe_send
auth:パスワードが入力されていない
09. となるので、
F:\pg3>pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --pass
word "Passwd643" --format custom --verbose --file "F:\pg96_Postal_2.backup" "d6p
g_postal_db"
pg_dump: too many command-line arguments (first is "--format")
Try "pg_dump --help" for more information.
pg_dump:コマンドライン引数が多すぎます(最初は "--format"です
10. となったので
F:\pg3>pg_dump.exe --host 192.168.24.57 --port 5432 --format custom --username "
postgres" --password "Passwd643" --verbose --file "F:\pg96_Postal_2.backup" "d6p
g_postal_db"
pg_dump: too many command-line arguments (first is "--verbose")
Try "pg_dump --help" for more information.
pg_dump:コマンドライン引数が多すぎます(最初は "--verbose"です)
11. ここで、USB内のpgAdmin3を実行
12. インストールしていないのでも、英語表記となりますが。
13. クライアント(1)と同様に設定
14.
15. バックアップ
16. USB F: を対象として選択
17. 実行
18. バックアップ完了
19. 一番上に戻って、確認
host 192.168.24.57 --port 5432 --username "postgres" --no-password --format custom --blobs --verbose --file "F:\pg96_Postal_10.backup" "a_restore_db"
20. 再度pg3フォルダから
21. バックアップコマンドを実行すると動作する
pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --no-password --format custom --verbose --file "F:\pg96_Postal_21.backup" "d6pg_postal_db"
追記
--password はパラメータを取らないようです。パスワードの文字列を外してみたら如何でしょうか?
と、ご指摘をいただきましたので。
Windows7を再度、クリーインストールして、Visual Studio 2013 の Visual C++ 再頒布可能パッケージをインストール後。
前回
pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --no-password --format custom --verbose --file "F:\pg96_Postal_2.backup" "d6pg_postal_db"
今回
pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --password --format custom --verbose --file "F:\pg96_Postal_31.backup" "d6pg_postal_db"
と変更して実行。
01. パスワードを尋ねられるので、入力。
02. バックアップ実行中。
03. 完了。
-W
--password
--password
データベースに接続する前に、pg_dumpは強制的にパスワード入力を促します。
--no-password
パスワードの入力を促しません。 サーバがパスワード認証を必要とし、かつ、.pgpassファイルなどの他の方法が利用できない場合、接続試行は失敗します。 バッチジョブやパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。
パスワードファイル
Windowsの場合は、pgpass.conf となるようなので、試してみます。
記述例は、PostgreSQL または、pgAdmin3が、インストールされている、機器からコピー。
結果、失敗
pgAdmin3をインストールして、pgpass.confを探してみる。
追記
Windows7を再度、クリーインストールして、Visual Studio 2013 の Visual C++ 再頒布可能パッケージをインストール後。
%APPDATA%\postgresql\pgpass.conf(ここで%APPDATA%はユーザのプロファイル内のアプリケーションデータディレクトリ)
を参考に
コマンドプロンプトから
md \AppData\Roaming\postgresql
として、
pgpass.confを作成
記述はこんな感じです(詳細は上記リンクから)
192.168.24.57:5432:*:postgres:Passwd643
pg_dump実行で、動作しました。
F:\pg3>pg_dump.exe --host 192.168.24.57 --port 5432 --username "postgres" --no-p
assword --format custom --verbose --file "F:\pg96_Postal_201.backup" "d6pg_postal
_db"