有什么办法可以在pgAdmin中保持活动状态,而无需在服务器上进行设置?


14

我正在使用postgres.heroku.com托管我的数据库。这意味着我无法更改服务器设置。因此,这个问题的答案对我没有帮助。Heroku不愿意更改它们的设置(我已经联系了他们)。

我想知道最好的方法是破解PgAdmin III以保持连接状态。我正在考虑诸如在PgAdmin处于后台时创建Autohotkey宏以自动执行用户界面操作,或者使用某种网络工具强制代表PgAdmins发送网络消息之类的事情。

我还得到了500美元的报价,供某人更改为PgAmin III的代码。PgAdmin的开发人员不会仅仅因为Heroku而修改代码。

我该怎么办?PgAdmin在许多方面都具有优越性,只是有这个缺点。


仅供参考,Heroku并不是唯一出现此问题的人。我们正在Azure托管的Linux VM上遇到此问题,我认为问题出在服务提供商关闭空闲TCP连接。如果PgAdmin可以公开keep alive选项,那就太好了
Jonas Stawski

1
自2002年以来,我就在pgadmin中遇到了这个问题!当然,pgadmin可以被编码为一旦超时就自动重新连接,而不是让您关闭应用程序,再次打开它并重新打开整个树?
马修·洛克

Answers:


18

libpq底层PostgreSQL客户端库,可以keepalives选择启用TCP keepalive

看起来PgAdmin-III不允许您直接指定任意连接参数,但是有一种解决方法。

当您查看PgAdmin-III中的连接配置时,将看到“服务”选项。这是指连接服务文件。要使用它,请创建~/.pg_service.conf内容如下的:

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

从PgAdmin-III连接时myherokudb,在service字段中输入。

这将导致PgAdmin-III使用服务文件中指定的连接参数,包括启用keepalive。

(如果您使用的是Windows,则服务文件可能位于其他位置;请参阅文档)。

由于没有环境变量libpq来控制keepalive,因此您不能以这种方式进行设置,必须使用服务文件。

在PgAdmin-III中添加对其他连接参数的支持,或者在连接选项中选择一个复选框来控制keepalives参数,应该是很简单的。我想知道戴夫是否理解您要重新报价以资助这项工作的要求。


更新:在PGSYSCONFDIR环境变量中指定的位置查找服务文件。如果未设置,则默认为特定于平台的位置,Windows似乎未正确记录该位置。我将提交一个文档补丁。的文档.pgpass%APPDATA%\postgresql\pgpass.conf似乎显示了其路径,因此~/.pg_service.conf应该%APPDATA%\postgresql\pg_service.conf...但似乎并非如此。

实际上,正确的路径是:

%APPDATA%\postgresql\.pg_service.conf

所以:

  • 开始->运行
  • `%APPDATA%
  • 创建目录“ postgresql”(如果不存在)
  • 使用上面给出的内容将文件“ .pg_service.conf”创建为文本文件(请参阅以下注意事项,重新命名文件)
  • 在PgAdmin-III中,在主机名中输入“ localhost”,在服务字段中输入服务名称。

我在Windows上进行了测试,发现无法host在Windows上将PgAdmin-III中的字段留空。PgAdmin-III似乎会使用连接对话框中指定的内容覆盖服务文件中指定的任何主机。因此,您不应host在服务文件中包含密钥。(我将报告一个错误)。

在Windows中关闭“隐藏已知文件类型的文件扩展名”功能,因此您不会意外地调用它.pg_service.conf.txt。如果不确定其名称是否正确,请在Windows资源管理器的列表视图中检查“类型”列;否则,请单击确定。它会读取“文本文档”,如果它的正确命名.pg_service.conf.txt,并且CONF File如果它的正确命名.pg_service.conf。如果您在重命名时遇到问题,请关闭“隐藏已知文件类型的文件扩展名”,或使用明智的文本编辑器(如notepad ++)来创建自己喜欢的文件名。

注意文件名中的前导句点(点)。是的,这与有所不同pgpass.conf,是的,这很令人讨厌,即将出现错误。


非常感谢!我现在花了45分钟在Windows 7计算机上尝试此操作。第一件事是我不能将“主机”字段留空。它将禁用该对话框中的“确定”按钮。我尝试使用“-”作为主机,这使我陷入第二个问题。我不知道将pg_service.conf文件放在哪里。我尝试进行反复试验,并将其放置在与PgAdmin III相关的所有子目录中,以及在C:\ Users \ pc \ AppData \ Roaming \ postgresql中。我总是得到错误:myherokudb“服务的定义‘’找不到。
大卫·

1
我也尝试阅读有关pg_service.conf的信息,但是我似乎只在服务器端上下文中找到引用它的文档。
大卫

考虑到我链接到的文档是指客户端,因此我不知道您从哪里获得“服务器端上下文”。除非您假设“ unix / linux”的意思是“服务器”,否则就没有。由于您本来就不愿意提及您所使用的操作系统,所以我无法更具体地说明。我现在已经用Windows特定的信息更新了答案(坦率地说,很公平,您很困惑)。另外,在Windows上,PgAdmin-III似乎会用UI中指定的主机覆盖服务文件中指定的主机,因此请host在服务文件中保留空白。
Craig Ringer 2014年

非常感谢你的帮助!您的解决方案就可以了!文件名中的前导点使我感到困惑,我认为这是Linux的事情。再次感谢你!
大卫

2
实际上,该解决方案毕竟行不通。我花了很长时间才得出结论,认为这是造成我的网络不稳定等原因,但连接确实仍然超时。我相信我已经听了你的描述。如果heroku采取了一些措施来避免与托管数百个免费数据库的免费测试服务器建立数千个连接,则可能是一种情况。
大卫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.