Jakiś sposób, aby utrzymać połączenie przy życiu w pgAdmin bez ustawiania go na serwerze?

14

Korzystam z postgres.heroku.com do hostowania moich baz danych. Oznacza to, że nie mam możliwości zmiany ustawień serwera. Dlatego odpowiedź na to pytanie mi nie pomaga. Heroku nie chce zmieniać swoich ustawień (skontaktowałem się z nimi).

Zastanawiam się, jaki byłby najlepszy sposób zhakowania PgAdmin III, aby utrzymać połączenie przy życiu. Mam na myśli takie rzeczy, jak utworzenie makra Autohotkey, aby zautomatyzować działania interfejsu użytkownika, gdy PgAdmin jest w tle, lub może użyć jakiegoś narzędzia sieciowego, aby wymusić wysyłanie wiadomości sieciowych w imieniu PgAdmins.

Dostałem również ofertę 500 $ na zmianę na kod PgAmin III. Deweloper PgAdmin nie zmodyfikuje kodu, tylko z powodu Heroku.

Co powinienem zrobić? PgAdmin jest lepszy na wiele sposobów, ma tę wadę.

David
źródło
Do Twojej wiadomości, Heroku nie jest jedynym, który ma ten problem. Występuje ten problem na maszynie wirtualnej z systemem Linux hostowanej na platformie Azure i myślę, że problem polega na tym, że dostawca usług zamyka bezczynne połączenia TCP. Byłoby bardzo miło, gdyby PgAdmin mógł ujawnić opcję utrzymania przy życiu
Jonas Stawski
1
Mam problem z pgadmin od 2002 roku! Z pewnością pgadmin może zostać zakodowany tak, aby automatycznie łączył się ponownie po przekroczeniu limitu czasu, zamiast zmuszać Cię do zamknięcia aplikacji, otwarcia jej ponownie i ponownego otwarcia całego drzewa?
Matthew Lock

Odpowiedzi:

18

libpq, podstawowa biblioteka klienta PostgreSQL, ma keepalivesopcję włączenia utrzymywania protokołu TCP .

Wygląda na to, że PgAdmin-III nie pozwala bezpośrednio określić dowolnych parametrów połączenia, ale istnieje obejście.

Gdy spojrzysz na konfigurację połączenia w PgAdmin-III, zobaczysz opcję „usługi”. Odnosi się to do pliku usługi połączenia . Aby go użyć, utwórz plik ~/.pg_service.confz treściami takimi jak:

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

i podczas łączenia z PgAdmin-III wprowadź myherokudbw servicepolu.

Spowoduje to, że PgAdmin-III będzie używać parametrów połączenia określonych w pliku usługi, w tym włączania keepalives.

(Jeśli korzystasz z systemu Windows, plik usługi może znajdować się w innej lokalizacji; zobacz dokumentację).

Nie ma zmiennej środowiskowej libpqdo kontrolowania keepalives, więc nie możesz ustawić tego w ten sposób, będziesz musiał użyć pliku usługi.

Dodanie obsługi dodatkowych parametrów połączenia do PgAdmin-III lub pola wyboru w opcjach połączenia w celu kontrolowania parametru keepalives powinno być dość trywialne. Zastanawiam się, czy Dave zrozumiał, o co prosiłeś, o twoją ofertę sfinansowania pracy.


Aktualizacja : plik usługi jest sprawdzany w lokalizacji określonej w PGSYSCONFDIRzmiennej środowiskowej. Jeśli nie jest ustawiony, domyślnie jest to lokalizacja specyficzna dla platformy, która nie wydaje się być odpowiednio udokumentowana dla systemu Windows. Prześlę łatkę do dokumentacji. Dokumentacja dla.pgpass pokazuje jej ścieżkę tak, %APPDATA%\postgresql\pgpass.confjakby tak ~/.pg_service.confbyło, %APPDATA%\postgresql\pg_service.confale nie wydaje się.

Właściwa ścieżka to:

%APPDATA%\postgresql\.pg_service.conf

Więc:

  • Start-> Uruchom
  • `% APPDATA%
  • utwórz katalog „postgresql”, jeśli nie istnieje
  • utwórz plik „.pg_service.conf” jako plik tekstowy z zawartością podaną powyżej (patrz uwaga poniżej dotycząca nazewnictwa plików)
  • W PgAdmin-III wpisz „localhost” w polu Nazwa hosta i nazwę usługi w polu usługi.

Przetestowałem na Windowsie i stwierdziłem, że nie można pozostawić hostpola w PgAdmin-III pustym w Windows. Wygląda na to, że PgAdmin-III zastępuje dowolny host określony w pliku usługi tym, co określono w oknie dialogowym połączenia. Dlatego nie należy dołączać hostklucza do pliku usługi. (Zgłoś błąd).

Spraw, aby „ukrywanie rozszerzeń plików dla znanych typów plików” było wyłączone w systemie Windows, aby .pg_service.conf.txtzamiast tego nie wywoływać go przypadkowo . Jeśli nie masz pewności, czy ma prawidłową nazwę, sprawdź kolumnę „Typ” w Eksploratorze Windows w widoku listy; będzie czytać „Dokument tekstowy”, jeśli będzie niepoprawnie nazwany .pg_service.conf.txti CONF Filepoprawnie nazwany .pg_service.conf. Jeśli masz problemy ze zmianą nazwy, wyłącz „ukryj rozszerzenia plików dla znanych typów plików” lub użyj rozsądnego edytora tekstu, takiego jak notatnik ++, który pozwoli ci tworzyć pliki o dowolnych nazwach.

Zanotuj początkowy kropka (kropka) w nazwie pliku. Tak, to jest inne pgpass.confi tak, to irytujące, graniczące z błędem.

Craig Ringer
źródło
Wielkie dzięki za to! Spędziłem teraz 45 minut na wypróbowaniu tego na moim komputerze z systemem Windows 7. Pierwszą rzeczą jest to, że nie mogę pozostawić pola „host” puste. Spowoduje to wyłączenie przycisku „OK” w tym oknie dialogowym. Próbowałem użyć „-” jako hosta, co doprowadziło mnie do drugiego problemu. Nie wiem, gdzie umieścić plik pg_service.conf. Próbowałem wykonać próbę i błąd i umieściłem go we wszystkich podkatalogach związanych z PgAdmin III, a także w C: \ Users \ pc \ AppData \ Roaming \ postgresql. Zawsze pojawia się błąd: „Nie znaleziono definicji usługi” myherokudb.
David
1
Próbowałem także przeczytać o pg_service.conf, ale wydaje mi się, że dokumentację odnoszącą się do niego można znaleźć tylko w kontekście po stronie serwera.
David
Nie wiem, skąd masz „kontekst po stronie serwera”, biorąc pod uwagę, że dokumentacja, do której się odnosiłem, odnosi się do klienta. Chyba że założysz, że „unix / linux” oznacza „serwer”, czego nie robi. Ponieważ początkowo nie zadałeś sobie trudu, aby wspomnieć, na jakim systemie operacyjnym byłeś, nie mogłem być bardziej szczegółowy. Zaktualizowałem odpowiedź o informacje specyficzne dla systemu Windows (i szczerze mówiąc, to dość sprawiedliwe, że się myliłeś). Ponadto w systemie Windows PgAdmin-III wydaje się zastępować hosta określonego w pliku usługi tym określonym w interfejsie użytkownika, więc pozostaw hostplik usługi pusty.
Craig Ringer
Dziękuję bardzo za Twoją pomoc! Twoje rozwiązanie po prostu działa! To była główna kropka w nazwie pliku, która mnie pomieszała, myślałem, że to kwestia Linuksa. Jeszcze raz dziękuję!
David
2
W rzeczywistości to rozwiązanie jednak nie działa. Długo zajęło mi dojście do tego wniosku, myśląc, że spowodowało to moją niestabilność sieci itp., Ale połączenie rzeczywiście wciąż się kończy. Jestem przekonany, że zastosowałem się do twojego opisu. Może tak być, gdyby Heroku wprowadziło coś, co pozwoli uniknąć tysięcy połączeń z ich darmowymi serwerami testowymi, na których znajdują się setki bezpłatnych baz danych.
David