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


11

私は自分のデータベースをホストするためにpostgres.heroku.comを使っています。つまり、サーバー設定を変更する方法はありません。したがって、答えは この 質問は私を助けません。 Herokuはそれらの設定を変更しようとはしません(私はそれらに連絡しました)。

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

私は誰かがPgAmin IIIのコードに変更するための500ドルの申し出も受けました。 PgAdminの開発者は、Herokuが原因で、コードを変更することはありません。

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


ちなみに、Herokuだけがこの問題を抱えているわけではありません。 AzureでホストされているLinux VMでこの問題が発生しています。問題は、サービスプロバイダーがアイドル状態のTCP接続を閉じることにあると思います。 PgAdminがキープアライブオプションを公開することができれば非常に良いでしょう
Jonas Stawski

1
私は2002年からpgadminでこの問題を抱えています!確かにpgadminはタイムアウトになったら自動的に再接続するようにコーディングして、アプリを閉じて再度開いてツリー全体を再度開くようにすることはできますか?
Matthew Lock

回答:


16

libpq基礎となるPostgreSQLクライアントライブラリ 持っています keepalives TCPキープアライブを有効にするオプション

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

PgAdmin-IIIの接続設定を見ると、 "service"オプションが見えます。これは 接続サービスファイル 。それを使うには、 ~/.pg_service.conf のような内容で:

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

PgAdmin-IIIから接続する場合 myherokudb の中に service フィールド。

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

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

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

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


更新 :サービスファイルは、で指定された場所を検索します。 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上でテストしました、そして、あなたはあなたを去ることができないとわかりました host WindowsではPgAdmin-IIIのフィールドは空白です。 PgAdmin-IIIはサービスファイルで指定されたホストを接続ダイアログで指定されたもので上書きします。だからあなたは含めるべきではありません host サービスファイルにキー入力します。 (私はバグを報告します)。

Windowsでは「既知のファイルの種類のファイル拡張子を隠す」が無効になっているので、誤って呼び出さないでください。 .pg_service.conf.txt 代わりに。名前が正しいかどうかわからない場合は、リストビューでWindowsエクスプローラの[種類]列を確認してください。名前が間違っていると、「テキスト文書」と表示されます。 .pg_service.conf.txt、そして CONF File 正しく命名されていれば .pg_service.conf。名前の変更に問題がある場合は、「既知のファイルタイプのファイル拡張子を隠す」をオフにするか、次のような実用的なテキストエディタを使用してください。 メモ帳++ これで、好きな名前のファイルを作成できます。

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


これをどうもありがとう!私は今私のWindows 7コンピュータでこれを試すために45分を費やしました。まず、 "host"フィールドを空のままにすることはできません。そのダイアログの「OK」ボタンを無効にします。私はホストとして " - "を使おうとしました、そしてそれは私を第二の問題に導きました。 pg_service.confファイルの配置場所がわかりません。試行錯誤してPgAdmin IIIに関連するすべてのサブディレクトリとC:\ Users \ pc \ AppData \ Roaming \ postgresqlに配置しました。私はいつもエラーを得ました: "サービスの定義" myherokudb "が見つかりません。
David

1
私はpg_service.confについても読み込もうとしましたが、それを参照する文書はサーバサイドのコンテキストでしか見られないようです。
David

私がリンクしたドキュメントがクライアントを参照していることを考えると、私はあなたがどこで "サーバーサイドコンテキスト"を得たのかわかりません。 "unix / linux"が "server"を意味すると仮定しない限り、そうではありません。あなたはもともとあなたがどんなOSを使っていたかについて言及することに煩わされなかったので、私はより具体的にすることができませんでした。私は今、Windows固有の情報で答えを更新しました(そして率直に言って、あなたが混乱していたことは十分に公平です)。また、WindowsではPgAdmin-IIIはサービスファイルで指定されたホストをUIで指定されたもので上書きするようですので、そのままにしておきます。 host サービスファイル内は空白です。
Craig Ringer

手伝ってくれてどうもありがとう!あなたの解決策はちょうどうまくいきます!私を混乱させたのはファイル名の先頭のドットでした。Linuxのものだと思いました。ありがとうございました!
David

2
実際には、この解決策は結局うまくいきません。それが私のネットワークの不安定さなどの原因であると考えて、その結論に至るまでに長い時間がかかりましたが、接続は確かにタイムアウトになります。私はあなたの説明に従ったと確信しています。 herokuが、何百もの無料データベースをホストしている彼らの無料のテストサーバーへの何千もの接続を持つことを避けるために何かを整えていたなら、それは本当かもしれません。
David
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.