Est-il possible de maintenir la connexion active dans pgAdmin sans la configurer sur le serveur?

14

J'utilise postgres.heroku.com pour héberger mes bases de données. Cela signifie que je n'ai aucun moyen de modifier les paramètres du serveur. Par conséquent, la réponse à cette question ne m'aide pas. Heroku n'est pas disposé à modifier leurs paramètres (je les ai contactés).

Je me demande quelle serait la meilleure façon de pirater PgAdmin III pour maintenir la connexion en vie. Je pense à des choses comme la création d'une macro Autohotkey pour automatiser les actions de l'interface utilisateur pendant que PgAdmin est en arrière-plan, ou peut-être utiliser une sorte d'outil réseau pour forcer l'envoi de messages réseau au nom de PgAdmins.

J'ai également reçu une offre de 500 $ pour que quelqu'un change le code de PgAmin III. Le développeur de PgAdmin, ne modifiera pas le code, juste à cause de Heroku.

Que devrais-je faire? PgAdmin est supérieur à bien des égards, il a juste cet inconvénient.

David
la source
Pour info, Heroku n'est pas le seul à avoir ce problème. Nous rencontrons ce problème sur une machine virtuelle Linux hébergée sur Azure et je pense que le problème vient du fait que le fournisseur de services ferme les connexions TCP inactives. Ce serait très bien si PgAdmin pouvait exposer l'option Keep Alive
Jonas Stawski
1
J'ai ce problème avec pgadmin depuis 2002! Sûrement pgadmin pourrait être codé pour se reconnecter automatiquement une fois qu'il arrive à expiration plutôt que de vous obliger à fermer l'application, à l'ouvrir à nouveau et à rouvrir l'arborescence entière?
Matthew Lock

Réponses:

18

libpq, la bibliothèque cliente PostgreSQL sous-jacente, a la keepalivespossibilité d'activer les keepalives TCP .

Il semble que PgAdmin-III ne vous permette pas de spécifier directement des paramètres de connexion arbitraires, mais il existe une solution de contournement.

Lorsque vous regardez la configuration de connexion dans PgAdmin-III, vous verrez une option "service". Il s'agit du fichier du service de connexion . Pour l'utiliser, créez un ~/.pg_service.confavec un contenu comme:

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

et lors de la connexion à partir de PgAdmin-III, entrez myherokudbdans le servicechamp.

Cela entraînera PgAdmin-III à utiliser les paramètres de connexion spécifiés dans le fichier de service, y compris l'activation de keepalives.

(Si vous êtes sous Windows, le fichier de service peut se trouver dans un autre emplacement; voir la documentation).

Il n'y a pas de variable d'environnement libpqpour contrôler les keepalives, donc vous ne pouvez pas le configurer de cette façon, vous devrez utiliser un fichier de service.

L'ajout de la prise en charge de paramètres de connexion supplémentaires à PgAdmin-III, ou une case à cocher dans les options de connexion pour contrôler le paramètre keepalives, devrait être assez trivial. Je me demande si Dave a compris ce que vous demandiez concernant votre offre de financement des travaux.


Mise à jour : le fichier de service est recherché à l'emplacement spécifié dans la PGSYSCONFDIRvariable d'environnement. S'il n'est pas défini, il correspond par défaut à un emplacement spécifique à la plate-forme, qui ne semble pas être correctement documenté pour Windows. Je vais soumettre un patch de documentation. La documentation de.pgpass montre son chemin comme %APPDATA%\postgresql\pgpass.confsi, ~/.pg_service.confdevrait donc être %APPDATA%\postgresql\pg_service.conf... mais il ne semble pas l'être.

En fait, le chemin correct est:

%APPDATA%\postgresql\.pg_service.conf

Donc:

  • Démarrer-> Exécuter
  • `% APPDATA%
  • créer le répertoire "postgresql" s'il n'existe pas
  • créer le fichier ".pg_service.conf" en tant que fichier texte avec le contenu donné ci-dessus (voir la note ci-dessous concernant la dénomination du fichier)
  • Dans PgAdmin-III, entrez "localhost" dans le nom d'hôte et le nom du service dans le champ service.

J'ai testé sous Windows et constaté que vous ne pouvez pas laisser le hostchamp vide dans PgAdmin-III sous Windows. PgAdmin-III semble remplacer tout hôte spécifié dans le fichier de service par ce qui est spécifié dans la boîte de dialogue de connexion. Vous ne devez donc pas inclure de hostclé dans le fichier de service. (Je vais signaler un bug).

Faire "masquer les extensions de fichier pour les types de fichiers connus" est désactivé dans Windows, donc vous ne l'appelez pas accidentellement à la .pg_service.conf.txtplace. Si vous ne savez pas s'il est nommé à droite ou non, vérifiez la colonne "Type" dans l'Explorateur Windows en mode liste; il lira "Document texte" s'il est mal nommé .pg_service.conf.txtet CONF Files'il est correctement nommé .pg_service.conf. Si vous avez des problèmes pour le renommer, désactivez «masquer les extensions de fichier pour les types de fichiers connus» ou utilisez un éditeur de texte judicieux comme notepad ++ qui vous permettra de créer des fichiers nommés comme vous le souhaitez.

Notez la première période (point) dans le nom de fichier. Oui, c'est différent de pgpass.conf, et oui, c'est ennuyeux, à la limite d'un bug.

Craig Ringer
la source
Merci beaucoup pour cela! J'ai maintenant passé 45 minutes à essayer cela sur mon ordinateur Windows 7. La première chose est que je ne peux pas laisser le champ "host" vide. Cela désactivera le bouton "OK" dans cette boîte de dialogue. J'ai essayé d'utiliser "-" comme hôte, ce qui m'a amené au deuxième problème. Je ne sais pas où placer le fichier pg_service.conf. J'ai tenté de faire des essais et des erreurs et je l'ai placé dans tous les sous-répertoires liés à PgAdmin III et également dans C: \ Users \ pc \ AppData \ Roaming \ postgresql. J'ai toujours eu l'erreur: "Définition du service" myherokudb "introuvable.
David
1
J'ai également tenté de lire sur pg_service.conf, mais il semble que je ne trouve la documentation s'y référant que dans un contexte côté serveur.
David
Je ne sais pas où vous avez obtenu le "contexte côté serveur" étant donné que la documentation à laquelle j'ai lié fait référence au client. Sauf si vous supposez que "unix / linux" signifie "serveur", ce qui n'est pas le cas. Puisque vous n'avez pas pris la peine de mentionner à l'origine le système d'exploitation sur lequel vous étiez, je ne pourrais pas être plus précis. J'ai maintenant mis à jour la réponse avec des informations spécifiques à Windows (et franchement, c'est assez juste que vous étiez confus). De plus, sous Windows, PgAdmin-III semble remplacer l'hôte spécifié dans le fichier de service par celui spécifié dans l'interface utilisateur, laissez donc hostle fichier de service vide.
Craig Ringer
Je vous remercie beaucoup pour votre aide! Votre solution fonctionne tout simplement! C'était le premier point du nom de fichier qui m'a dérouté, je pensais que c'était une chose Linux. Merci encore!
David
2
En fait, cette solution ne fonctionne pas après tout. Il m'a fallu beaucoup de temps pour arriver à cette conclusion, pensant que cela était dû à l'instabilité de mon réseau, etc., mais la connexion expire toujours. Je suis convaincu d'avoir suivi votre description. Cela pourrait être le cas si Heroku avait mis en place quelque chose pour éviter d'avoir des milliers de connexions à leurs serveurs de test gratuits hébergeant des centaines de bases de données gratuites.
David