Estoy usando postgres.heroku.com para alojar mis bases de datos. Esto significa que no tengo forma de cambiar la configuración del servidor. Por lo tanto, la respuesta a esta pregunta no me ayuda. Heroku no está dispuesto a cambiar su configuración (me he puesto en contacto con ellos).
Me pregunto cuál sería la mejor manera de hackear PgAdmin III para mantener viva la conexión. Estoy pensando en cosas como crear una macro Autohotkey para automatizar las acciones de la interfaz de usuario mientras PgAdmin está en segundo plano, o tal vez usar algún tipo de herramienta de red para forzar el envío de mensajes de red en nombre de PgAdmins.
También recibí una oferta de 500 $ para que alguien cambie el código de PgAmin III. El desarrollador de PgAdmin, no modificará el código, solo por Heroku.
¿Qué tengo que hacer? PgAdmin es superior en muchos aspectos, solo tiene este inconveniente.
Respuestas:
libpq
, la biblioteca de cliente de PostgreSQL subyacente, tiene lakeepalives
opción de habilitar TCP keepalives .Parece que PgAdmin-III no le permite especificar parámetros de conexión arbitrarios directamente, pero hay una solución alternativa.
Cuando observa la configuración de conexión en PgAdmin-III, verá una opción de "servicio". Esto se refiere al archivo del servicio de conexión . Para usarlo, crea un
~/.pg_service.conf
contenido como:y cuando se conecte desde PgAdmin-III, ingrese
myherokudb
en elservice
campo.Esto hará que PgAdmin-III use los parámetros de conexión especificados en el archivo de servicio, incluida la habilitación de keepalives.
(Si está en Windows, el archivo de servicio puede estar en otra ubicación; consulte la documentación).
No hay una variable de entorno
libpq
para controlar keepalives, por lo que no puede configurarlo de esa manera, tendrá que usar un archivo de servicio.Agregar soporte para parámetros de conexión adicionales a PgAdmin-III, o una casilla de verificación en las opciones de conexión para controlar el parámetro keepalives, debería ser bastante trivial. Me pregunto si Dave entendió lo que estaba pidiendo sobre su oferta para financiar el trabajo.
Actualización : el archivo de servicio se busca en la ubicación especificada en la
PGSYSCONFDIR
variable de entorno. Si no está configurado, el valor predeterminado es una ubicación específica de la plataforma, que no parece estar documentada correctamente para Windows. Enviaré un parche de documentación. La documentación de.pgpass
muestra su camino como%APPDATA%\postgresql\pgpass.conf
si así~/.pg_service.conf
fuera,%APPDATA%\postgresql\pg_service.conf
pero debería ser ... pero no parece serlo.De hecho, la ruta correcta es:
Entonces:
Lo probé en Windows y descubrí que no puede dejar el
host
campo en PgAdmin-III en blanco en Windows. PgAdmin-III parece anular cualquier host especificado en el archivo de servicio con lo que se especifica en el diálogo de conexión. Por lo tanto, no debe incluir unahost
clave en el archivo de servicio. (Informaré un error).Hacer que "ocultar extensiones de archivo para tipos de archivo conocidos" esté desactivado en Windows, para que no lo llame accidentalmente
.pg_service.conf.txt
. Si no está seguro de si se llama correctamente o no, marque la columna "Tipo" en el Explorador de Windows en la vista de lista; leerá "Documento de texto" si se nombra incorrectamente.pg_service.conf.txt
yCONF File
si se nombra correctamente.pg_service.conf
. Si tiene problemas para renombrarlo, desactive "ocultar extensiones de archivo para tipos de archivo conocidos", o use un editor de texto sensible como notepad ++ que le permitirá crear archivos con el nombre que desee.Tenga en cuenta el punto inicial (punto) en el nombre del archivo. Sí, eso es diferente
pgpass.conf
y sí, eso es molesto, rayando en un error.fuente
host
en blanco en el archivo de servicio.