1

フロントエンドに4D、バックエンドにpostgresqlを使用しています。そのため、フロントエンドからデータベースのバックアップを取得する必要があります。

ここでは、4D でバックアップを取るためにこれまでに行ったことを示します。

C_LONGINT(i_pg_connection)
i_pg_connection:=PgSQL Connect ("localhost";"admin";"admin";"test_db")
LAUNCH EXTERNAL PROCESS("C:\\Program Files\\PostgreSQL\\9.5\\bin\\pg_dump.exe -h localhost -p 5432 -U admin -F c -b -v -f C:\\Users\\Admin_user\\Desktop\\backup_test\\db_backup.backup test_db")
PgSQL Close (i_pg_connection)

しかし、それはバックアップを取っていません。バックアップ コマンドは、コマンド プロンプトでの起動中に完全に機能するため、問題ありません。

私のコードで何が問題になっていますか? 前もって感謝します。

4

1 に答える 1

1

コード内の不要なコマンド

を使用してバックアップを行う場合は、およびLAUNCH EXTERNAL PROCESSは必要ありません。PgSQL CONNECTPgSQL CLOSE

これらのプラグイン コマンドは、同じコンテキストでは実行されないためLAUNCH EXTERNAL PROCESS、この状況では不要です。

書き込みアクセス権があることを確認してください

4D データベースがサービスとして実行されている場合、より具体的には への書き込みアクセス権を持たないユーザーとして実行されている場合C:\Users\Admin_user\...、パーミッションの問題により失敗する可能性があります。

書き込みアクセス権のある場所に書き込んでいることを確認し、パラメータ$out$errパラメータをチェックして、標準出力とエラー ストリームが何であるかを確認してください。

pg_dump のパスワードを指定する必要があります

もう 1 つの問題は、パスワードを指定していないことです。

PGPASSWORD環境変数を使用するかpgpass.conf、ユーザーのプロファイル ディレクトリ内のファイルを使用できます。

PGPASSWORD環境変数について; ドキュメントには次の警告があります。

一部のオペレーティング システムでは、root 以外のユーザーが ps を介してプロセス環境変数を参照できるため、この環境変数の使用はセキュリティ上の理由からお勧めしません。代わりに ~/.pgpass ファイルの使用を検討してください

pgpass.conf の使用例

次の例では、pgpass.confファイルが配置されていることを前提としています。

C_TEXT($c;$in;$out;$err)
$c:="C:\\Program Files\\PostgreSQL\\9.5\\bin\\pg_dump.exe -h localhost -p 5432 -U admin -F"
$c:=$c+" c -b -v -f C:\\Users\\Admin_user\\Desktop\\backup_test\\db_backup.backup test_db"
LAUNCH EXTERNAL PROCESS($c;$in;$out;$err)
TRACE

PGPASSWORD 環境変数の使用例

次の例では、 pg_dump を呼び出す前にPGPASSWORD 環境変数を設定し、呼び出し後に変数をクリアします。

C_TEXT($c;$in;$out;$err)
SET ENVIRONMENT VARIABLE ( "PGPASSWORD" ; "your postgreSQL password" )  
$c:="C:\\Program Files\\PostgreSQL\\9.5\\bin\\pg_dump.exe -h localhost -p 5432 -U admin -F"
$c:=$c+" c -b -v -f C:\\Users\\Admin_user\\Desktop\\backup_test\\db_backup.backup test_db"
LAUNCH EXTERNAL PROCESS($c;$in;$out;$err)
SET ENVIRONMENT VARIABLE ( "PGPASSWORD" ; "" )  // clear password for security
TRACE

デバッグ

デバッガーを使用して、根本的な問題を確認$outしてください。$err

于 2016-06-27T16:14:23.957 に答える