Ich verwende postgres.heroku.com, um meine Datenbanken zu hosten. Dies bedeutet, dass ich keine Möglichkeit habe, die Servereinstellungen zu ändern. Daher hilft mir die Antwort auf diese Frage nicht weiter. Heroku ist nicht bereit, ihre Einstellungen zu ändern (ich habe sie kontaktiert).
Ich frage mich, wie ich PgAdmin III am besten hacken könnte, um die Verbindung aufrechtzuerhalten. Ich denke an Dinge wie das Erstellen eines Autohotkey-Makros, um Benutzeroberflächenaktionen zu automatisieren, während sich PgAdmin im Hintergrund befindet, oder das Verwenden eines Netzwerk-Tools, um das Senden von Netzwerknachrichten im Namen von PgAdmins zu erzwingen.
Ich habe auch ein Angebot von 500 $ für jemanden erhalten, der zum Code von PgAmin III wechseln möchte. Der Entwickler von PgAdmin wird den Code nur wegen Heroku nicht ändern.
Was soll ich machen? PgAdmin ist in vielerlei Hinsicht überlegen, es hat nur diesen Nachteil.
Antworten:
libpq
Die zugrunde liegende PostgreSQL-Clientbibliothek bietet diekeepalives
Option, TCP-Keepalives zu aktivieren .Es sieht so aus, als ob Sie mit PgAdmin-III keine beliebigen Verbindungsparameter direkt angeben können, aber es gibt eine Problemumgehung.
Wenn Sie sich die Verbindungskonfiguration in PgAdmin-III ansehen, sehen Sie eine "Dienst" -Option. Dies bezieht sich auf die Verbindungsdienstdatei . Um es zu verwenden, erstellen Sie ein
~/.pg_service.conf
mit Inhalten wie:und wenn Sie eine Verbindung von PgAdmin-III herstellen, geben Sie
myherokudb
dasservice
Feld ein.Dadurch verwendet PgAdmin-III die in der Servicedatei angegebenen Verbindungsparameter, einschließlich der Aktivierung von Keepalives.
(Wenn Sie unter Windows arbeiten, befindet sich die Servicedatei möglicherweise an einem anderen Speicherort. Weitere Informationen finden Sie in der Dokumentation.)
Es gibt keine Umgebungsvariable
libpq
zur Steuerung von Keepalives. Sie können dies also nicht so einstellen. Sie müssen eine Servicedatei verwenden.Das Hinzufügen von Unterstützung für zusätzliche Verbindungsparameter zu PgAdmin-III oder ein Kontrollkästchen in den Verbindungsoptionen zur Steuerung des Keepalives-Parameters sollte ziemlich trivial sein. Ich frage mich, ob Dave verstanden hat, worum Sie bei Ihrem Angebot zur Finanzierung der Arbeit gebeten haben.
Update : Die Servicedatei wird an dem in der
PGSYSCONFDIR
Umgebungsvariablen angegebenen Speicherort nachgeschlagen . Wenn nicht festgelegt, wird standardmäßig ein plattformspezifischer Speicherort verwendet, der für Windows nicht ordnungsgemäß dokumentiert zu sein scheint. Ich werde einen Dokumentations-Patch einreichen. Die Dokumentation für.pgpass
zeigt seinen Weg so, als%APPDATA%\postgresql\pgpass.conf
ob es so~/.pg_service.conf
sein sollte%APPDATA%\postgresql\pg_service.conf
... aber es scheint nicht so zu sein.In der Tat ist der richtige Weg:
So:
Ich habe unter Windows getestet und festgestellt, dass Sie das
host
Feld in PgAdmin-III unter Windows nicht leer lassen können. PgAdmin-III scheint jeden in der Servicedatei angegebenen Host mit den im Verbindungsdialog angegebenen zu überschreiben. Sie sollten also keinenhost
Schlüssel in die Servicedatei aufnehmen. (Ich werde einen Fehler melden)."Windows-Dateierweiterungen für bekannte Dateitypen ausblenden" ist in Windows deaktiviert, damit Sie sie nicht versehentlich aufrufen
.pg_service.conf.txt
. Wenn Sie sich nicht sicher sind, ob der Name richtig ist oder nicht, überprüfen Sie die Spalte "Typ" im Windows Explorer in der Listenansicht. Es wird "Textdokument" gelesen, wenn es falsch benannt.pg_service.conf.txt
ist undCONF File
wenn es richtig benannt ist.pg_service.conf
. Wenn Sie Probleme beim Umbenennen haben, deaktivieren Sie "Dateierweiterungen für bekannte Dateitypen ausblenden" oder verwenden Sie einen sinnvollen Texteditor wie Notepad ++ , mit dem Sie Dateien mit beliebigen Namen erstellen können.Beachten Sie den führenden Punkt (Punkt) im Dateinamen. Ja, das ist anders als
pgpass.conf
, und ja, das ist ärgerlich und grenzt an einen Fehler.quelle
host
in der Servicedatei leer.