2017年11月06日

pg_dumpについて

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、その後、ダメだった、バックアップコマンドも動作するようになる。


000.png

01. 最初にWindows10で、インストール済みのpgAdmin3を起動。
001.png
02. GUIで、バックアップを選択。
002.png
03. USBをバックアップの対象にします。
003.png
04. この機器(クライアント(1)とします)では、USBが H: になりました。
H:\に、pg96_Postal_1.bakup として、バックアップします。
004.png
05. バックアップ完了。
005.png
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"
006.png
07. 念ため、リストアできるか、確認すため、新しいデータベースを作成します。
007.png
08. テーブルは 0 です。
008.png
09. GUIで、リストアを選択。
009.png
10. USBからリストアします。
010.png
11. 実行
011.png
12. リストア完了。
012.png
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"
013.png
14. テーブル 1 になりました。 
014.png
15. データが存在するか確認。
015.png
16. pgAdmin3を、USBにpg3というフォルダを作成してコピーします。(別マシンで、pg_dumpを実行するためです)
016.png



ここから、コピーした、USBをWindows7に接続します。
01. クライアント(2)とします、こちらでは、USBは、F: となりました。
001.png
02. pg3フォルダに移動。
002.png
03.
003.png
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 が見つからなかったため、アプリケーションを開始できませんでした。
となるので

004.png
05.
インストール
005.png
06.
006.png
07.
再度
007.png
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:パスワードが入力されていない
008_.png
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"です
009_.png
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"です)
010_.png
11. ここで、USB内のpgAdmin3を実行
011.png
12. インストールしていないのでも、英語表記となりますが。
012_pgadmin3.png
13. クライアント(1)と同様に設定
013.png
14.
014.png
15. バックアップ
015.png
16. USB F: を対象として選択
016.png
17. 実行
017.png
18. バックアップ完了
018.png
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"
019.png
20. 再度pg3フォルダから
020.png
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"
021.png

追記
--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. パスワードを尋ねられるので、入力。
001.png

02. バックアップ実行中。
002.png
03. 完了。



003.png

-W
--password

データベースに接続する前に、pg_dumpは強制的にパスワード入力を促します。

https://www.postgresql.jp/document/9.2/html/app-pgdump.html


--no-password

パスワードの入力を促しません。 サーバがパスワード認証を必要とし、かつ、.pgpassファイルなどの他の方法が利用できない場合、接続試行は失敗します。 バッチジョブやパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。


パスワードファイル


Windowsの場合は、pgpass.conf となるようなので、試してみます。
記述例は、PostgreSQL または、pgAdmin3が、インストールされている、機器からコピー。

結果、失敗


pgAdmin3をインストールして、pgpass.confを探してみる。
002.png

追記
Windows7を再度、クリーインストールして、Visual Studio 2013 の Visual C++ 再頒布可能パッケージをインストール後。

%APPDATA%\postgresql\pgpass.conf(ここで%APPDATA%はユーザのプロファイル内のアプリケーションデータディレクトリ)
を参考に

コマンドプロンプトから
md  \AppData\Roaming\postgresql
として、

001.png
pgpass.confを作成
記述はこんな感じです(詳細は上記リンクから)
192.168.24.57:5432:*:postgres:Passwd643
002.png

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"
003.png


タグ:bat pgAdmin3 pg_dump
posted by a23 at 18:27| Comment(0) | PostgreSQL

2017年11月04日

E2003 未定義の識別子 : 'Windows'

[dcc32 エラー] xxxUnit.pas(643): E2003 未定義の識別子 : 'Windows'
posted by a23 at 12:33| Comment(0) | Delphi

2017年11月03日

EvariantTypeCastError(メッセージ'Null型からOleStr型へのバリアント型変換はできません')を送出しました。

EvariantTypeCastError(メッセージ'Null型からOleStr型へのバリアント型変換はできません')を送出しました。
EvariantTypeCastErro.png


            if iElement.getAttribute('data-key',0)=Null then
              Str :=''
            else
              Str := iElement.getAttribute('data-key',0);
posted by a23 at 10:32| Comment(0) | Delphi