質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
バックアップ

バックアップとは、保存データやプログラムの複製を異なる記録装置などへ保存することを言います。バックアップを取っておくことで、機器のトラブルでデータが損傷するなどの不測の事態にもデータを複製することが可能です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

0回答

1460閲覧

Postgresのデータベースバックアップに失敗する(pgpass.confファイルが作れない)

nonki03

総合スコア11

バックアップ

バックアップとは、保存データやプログラムの複製を異なる記録装置などへ保存することを言います。バックアップを取っておくことで、機器のトラブルでデータが損傷するなどの不測の事態にもデータを複製することが可能です。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/05/21 15:41

現在Postgresをデータベースに採用したC#アプリケーションを開発しています。

データベースのバックアップ機能がアプリケーション側で実装されていて、

cmd

1"C:\Program Files\PostgreSQL\11\bin\pg_dump" -Fc -h localhost -p 5432 -U postgres -w -d dbnameabc

上記のようなコマンドをpg_dumpに対して実行しバックアップを実行していますが、
開発環境では成功するけど実行環境では失敗するということで調査したところ、
Postgres側でパスワード必須設定がされており、パスワード入力を省く
「-w」のオプションが意味を成していない感じで、
この場合、Postgresは作成されたパスワードファイル「pgpass.conf」を見に行く
とPostgres公式にもあったので、読みに行く先に設定されているAPPDATA/Roamingの下に
パスワードファイルが作成されているであろう…と見に行くと、存在していませんでした。

このパスワードファイルはアプリケーション側で以下のような感じで作成されています。

C#

1// アプリケーションデータフォルダパス 2string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 3string folderPath = appDataPath + @"\postgresql"; 4 5// 指定フォルダー作成 6if (!File.Exists(folderPath)) 7{ 8 Directory.CreateDirectory(folderPath); 9} 10 11// パスワードファイル作成 12string filePath = folderPath + @"\pgpass.conf"; 13using (FileStream fs = File.Create(@filePath)) 14{ 15 StreamWriter sw = new StreamWriter(fs); 16 sw.WriteLine("localhost:5432:dbnameabc:postgres:postgres"); 17 sw.Close(); 18}

最終的な原因としては、このアプリケーション自体をAdministrator権限ではなくSystem権限でサービスとしてバックグラウンド起動していることから、

C#

1string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

で取得しているAPPDATAフォルダのパスが、
開発環境:C:\Users\nonki\AppData\Roaming
実行環境:C:\Windows\System32\config\systemprofile\AppData\Roaming
と差がある上、System32フォルダ下なのでファイルやフォルダが権限的に作成できない状況にあることが原因だと判断しました。

上記のことから「pgpass.confの作成場所をどこか別の場所に変えよう」という案が出ていますが、pgpass.confを見に行くところを変更する方法が調べても見つからず、手詰まりになった…という状態です。

質問したい内容としては、
①Postgressがpgpass.confを見に行く場所を変更できますか?
②そもそも①の手段が正しいのでしょうか? 一般的にはどのように解決すべきなのでしょうか?
という点です。

開発環境はWindows10Pro
実行環境はWindowsServer2019
です。

つたない説明ですみませんが、ご助力いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2020/05/21 17:22

本来バッチ処理としてタスクスケジューラに登録して実行させることを目的に用意されているコマンド群だと思いますので、Windowsサービスに組み込むことは考慮されていないのではないでしょうか。
退会済みユーザー

退会済みユーザー

2020/05/21 23:52

.pgpass ファイルをホームディレクトリに作る、ってことでなく?
nonki03

2020/05/22 17:07

回答遅くなってすみません… >KoichiSugiyamaさん タスクスケジューラでの使用を想定した機能…その考え方は盲点でした… やはりそうなのですかね…もう少し見直してみようと思います。 >m6uさん ホームディレクトリかどうかは決めてないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問