web-dev-qa-db-ja.com

サーバーに設定せずにpgAdminで接続を維持する方法はありますか?

データベースをホストするためにpostgres.heroku.comを使用しています。つまり、サーバー設定を変更する方法がありません。したがって、 this 質問への回答は役に立ちません。 Herokuは設定を変更するつもりはありません(私は連絡しました)。

接続を維持するためにPgAdmin IIIをハッキングする最良の方法は何でしょうか。 PgAdminがバックグラウンドで動作しているときにユーザーインターフェースのアクションを自動化するAutohotkeyマクロを作成したり、何らかのネットワークツールを使用してPgAdminsに代わってネットワークメッセージを強制的に送信したりすることを考えています。

また、PgAmin IIIのコードに変更するための500ドルのオファーも受け取りました。 PgAdminの開発者は、Herokuのためにコードを変更しません。

私は何をすべきか? PgAdminは多くの点で優れていますが、この欠点があります。

14
David

libpq、基になるPostgreSQLクライアントライブラリ keepalivesオプションを有効にしてTCPキープアライブ を有効にします。

PgAdmin-IIIでは任意の接続パラメータを直接指定できないようですが、回避策があります。

PgAdmin-IIIの接続構成を見ると、「サービス」オプションが表示されます。これは 接続サービスファイル を参照します。これを使用するには、次のような内容の~/.pg_service.confを作成します。

[myherokudb]
user=myusername
keepalives=1
connect_timeout=20
keepalives_idle=10

pgAdmin-IIIから接続する場合は、myherokudbフィールドにserviceと入力します。

これにより、PgAdmin-IIIは、キープアライブの有効化を含め、サービスファイルで指定された接続パラメーターを使用します。

(Windowsを使用している場合、サービスファイルは別の場所にある可能性があります。ドキュメントを参照してください)。

キープアライブを制御するためのlibpqには環境変数がないため、そのように設定することはできません。サービスファイルを使用する必要があります。

PgAdmin-IIIへの追加の接続パラメーターのサポート、または接続オプションのキープアライブパラメーターを制御するためのチェックボックスを追加することは、かなり簡単なはずです。デイブはあなたが仕事に資金を提供するというあなたの申し出についてあなたが求めていたものを理解したのだろうか。


Update:サービスファイルは、PGSYSCONFDIR環境変数で指定された場所で検索されます。設定されていない場合、デフォルトでプラットフォーム固有の場所に設定されますが、Windowsでは適切に文書化されていないようです。ドキュメントのパッチを提出します。 .pgpass のドキュメントでは、パスが%APPDATA%\postgresql\pgpass.confと表示されているため、~/.pg_service.conf%APPDATA%\postgresql\pg_service.confである必要がありますが、そうではありません。 。

実際、正しいパスは次のとおりです。

%APPDATA%\postgresql\.pg_service.conf

そう:

  • スタート->実行
  • `%APPDATA%
  • 「postgresql」ディレクトリが存在しない場合は作成します
  • 上記の内容でテキストファイルとしてファイル「.pg_service.conf」を作成します(ファイルの名前については下記の注を参照)
  • PgAdmin-IIIで、ホスト名に「localhost」を入力し、サービスフィールドにサービス名を入力します。

私はWindowsでテストしましたが、WindowsではPgAdmin-IIIのHostフィールドを空白のままにすることはできません。 PgAdmin-IIIは、サービスファイルで指定されたすべてのホストを、接続ダイアログで指定されたもので上書きするようです。そのため、サービスファイルにHostキーを含めないでください。 (私はバグを報告します)。

Windowsでは「既知のファイルタイプのファイル拡張子を非表示にする」がオフになっているため、誤って.pg_service.conf.txtと呼ばないようにしてください。名前が正しいかどうかわからない場合は、リストビューでWindowsエクスプローラーの[タイプ]列を確認してください。 .pg_service.conf.txtの名前が正しくない場合は「テキストドキュメント」と読み、CONF Fileの名前が正しい場合は.pg_service.confと読みます。名前の変更に問題がある場合は、「既知のファイルタイプのファイル拡張子を非表示にする」をオフにするか、 notepad ++ などの適切なテキストエディタを使用して、好きな名前のファイルを作成できます。

ファイル名の先頭のピリオド(ドット)に注意してください。はい、それはpgpass.confとは異なります。そして、はい、それは迷惑で、バグに接しています。

18
Craig Ringer