Un modo per mantenere attiva la connessione in pgAdmin senza impostarla sul server?


14

Sto usando postgres.heroku.com per ospitare i miei database. Ciò significa che non ho modo di modificare le impostazioni del server. Pertanto, la risposta a questa domanda non mi aiuta. Heroku non è disposto a modificare le loro impostazioni (le ho contattate).

Mi chiedo quale sarebbe il modo migliore per hackerare PgAdmin III per mantenere viva la connessione. Sto pensando a cose come la creazione di una macro di Autohotkey per automatizzare le azioni dell'interfaccia utente mentre PgAdmin è in background o forse usare un qualche tipo di strumento di rete per forzare l'invio di messaggi di rete per conto di PgAdmins.

Ho anche ricevuto un'offerta di 500 $ per qualcuno di cambiare al codice di PgAmin III. Lo sviluppatore di PgAdmin, non modificherà il codice, solo a causa di Heroku.

Cosa dovrei fare? PgAdmin è superiore in molti modi, ha solo questo inconveniente.


Cordiali saluti, Heroku non è l'unico con questo problema. Stiamo riscontrando questo problema su una macchina virtuale Linux ospitata su Azure e penso che il problema riguardi il provider di servizi che chiude le connessioni TCP inattive. Sarebbe molto bello se PgAdmin potesse esporre l'opzione keep alive
Jonas Stawski

1
Ho avuto questo problema con pgadmin dal 2002! Sicuramente pgadmin potrebbe essere codificato per riconnettersi automaticamente una volta scaduto anziché farti chiudere l'app, aprirla di nuovo e riaprire l'intero albero?
Matthew Lock,

Risposte:


18

libpq, la libreria client PostgreSQL sottostante, ha l' keepalivesopzione per abilitare keepalive TCP .

Sembra che PgAdmin-III non ti permetta di specificare direttamente parametri di connessione arbitrari, ma c'è una soluzione alternativa.

Quando guardi la configurazione della connessione in PgAdmin-III, vedrai un'opzione di "servizio". Questo si riferisce al file del servizio di connessione . Per usarlo, crea un ~/.pg_service.confcon contenuti come:

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

e quando ci si collega da PgAdmin-III entrare myherokudbnel servicecampo.

Ciò farà sì che PgAdmin-III utilizzi i parametri di connessione specificati nel file di servizio, inclusa l'abilitazione di keepalive.

(Se sei su Windows, il file di servizio potrebbe trovarsi in un'altra posizione; consultare la documentazione).

Non ci sono variabili d'ambiente libpqper controllare keepalive, quindi non puoi impostarlo in questo modo, dovrai usare un file di servizio.

L'aggiunta di supporto per parametri di connessione aggiuntivi a PgAdmin-III, o una casella di controllo nelle opzioni di connessione per controllare il parametro keepalives, dovrebbe essere piuttosto banale. Mi chiedo se Dave abbia capito cosa stavi chiedendo per la tua offerta di finanziamento del lavoro.


Aggiornamento : il file di servizio viene cercato nella posizione specificata nella PGSYSCONFDIRvariabile di ambiente. Se non impostato, viene impostato automaticamente su una posizione specifica della piattaforma, che non sembra essere documentata correttamente per Windows. Invierò una patch di documentazione. La documentazione per.pgpass mostra il suo percorso come %APPDATA%\postgresql\pgpass.confse, quindi ~/.pg_service.confdovrebbe essere %APPDATA%\postgresql\pg_service.conf... ma non sembra essere.

In effetti, il percorso corretto è:

%APPDATA%\postgresql\.pg_service.conf

Così:

  • Start-> Esegui
  • `% Appdata%
  • creare la directory "postgresql" se non esiste
  • creare il file ".pg_service.conf" come file di testo con i contenuti sopra indicati (vedere la nota sotto relativa alla denominazione dei file)
  • In PgAdmin-III, immettere "localhost" nel nome host e il nome del servizio nel campo del servizio.

Ho provato su Windows e ho scoperto che non è possibile lasciare il hostcampo in PgAdmin-III vuoto su Windows. PgAdmin-III sembra sovrascrivere qualsiasi host specificato nel file di servizio con ciò che è specificato nella finestra di dialogo della connessione. Quindi non dovresti includere una hostchiave nel file di servizio. (Segnalerò un bug).

Rendi "nascondi estensioni di file per tipi di file noti" è disattivato in Windows, quindi non chiamarlo accidentalmente .pg_service.conf.txt. Se non sei sicuro che abbia il nome giusto o meno, controlla la colonna "Tipo" in Esplora risorse nella vista elenco; leggerà "Documento di testo" se ha un nome errato .pg_service.conf.txte CONF Filese ha un nome corretto .pg_service.conf. Se hai problemi a rinominarlo, disattiva "nascondi estensioni di file per tipi di file conosciuti" o usa un editor di testo sensibile come notepad ++ che ti permetterà di creare file con il nome che preferisci.

Nota il punto iniziale (punto) nel nome del file. Sì, è diverso pgpass.confe sì, è fastidioso, al limite di un bug.


Grazie mille per questo! Ho trascorso 45 minuti a provare questo sul mio computer Windows 7. La prima cosa è che non posso lasciare vuoto il campo "host". Disabiliterà il pulsante "OK" in quella finestra di dialogo. Ho tentato di utilizzare "-" come host, il che mi ha portato al secondo problema. Non so dove posizionare il file pg_service.conf. Ho provato a fare prove ed errori e l'ho inserito in tutte le sottodirectory relative a PgAdmin III e anche in C: \ Users \ pc \ AppData \ Roaming \ postgresql. Ho sempre ricevuto l'errore: "Definizione del servizio" myherokudb "non trovata.
David

1
Ho anche provato a leggere su pg_service.conf, ma mi sembra di trovare solo la documentazione che si riferisce ad essa in un contesto lato server.
David

Non so dove tu abbia ottenuto il "contesto lato server" dato che la documentazione a cui mi sono collegato fa riferimento al client. A meno che non si presuma "unix / linux" significa "server", cosa che non accade. Dato che inizialmente non ti eri preoccupato di menzionare il tuo sistema operativo, non potrei essere più specifico. Ora ho aggiornato la risposta con informazioni specifiche di Windows (e francamente, è abbastanza giusto che tu fossi confuso). Inoltre, su Windows PgAdmin-III sembra sovrascrivere l'host specificato nel file di servizio con quello specificato nell'interfaccia utente, quindi lasciare hostvuoto il file di servizio.
Craig Ringer,

Grazie mille per il vostro aiuto! La tua soluzione funziona e basta! Era il punto principale nel nome del file che mi confondeva, pensavo fosse una cosa Linux. Grazie ancora!
David

2
In realtà, questa soluzione non funziona dopo tutto. Mi ci è voluto molto tempo per giungere a questa conclusione, pensando che fosse stata la causa dell'instabilità della mia rete, ecc., Ma la connessione in effetti è ancora scaduta. Sono fiducioso di aver seguito la tua descrizione. Potrebbe essere un caso, se Heroku ha messo in atto qualcosa per evitare di avere migliaia di connessioni ai loro server di test gratuiti che ospitano centinaia di database gratuiti.
David,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.