【发布时间】:2014-03-06 11:07:18
【问题描述】:
我一直在使用 Postgresql 在后端构建一个 Lazarus Pascal 程序。它曾经与以下几行一起正常工作以打开数据库。
dbConn:= TPQConnection.Create(nil);
dbConn.HostName := 'localhost';
dbConn.DatabaseName:= 'dbHRS';
dbconn.UserName:='mizk';
dbConn.Password:='123';
dbConn.Open;
if dbConn.Connected Then
OpenHRSDB := true
else
OpenHRSDB := False;
但当我从 localhost 更改为服务器的 IP(在 LAN 上)时,程序就会停止。没有错误或警告。我不知道发生了什么。
以下是一些可能有助于缩小问题范围的相关细节。
- 我正在运行的程序来自与服务器位于同一 LAN 的工作站。
- 两台机器都运行 Ubuntu 12.04 Desktop
- 我可以使用 PGAdmin III 访问服务器上的 postgres 数据库,所以我猜这不是防火墙问题。
- 我已允许来自 ufw 的 postgresql 并且 ufw 已禁用。
- 奇怪的是,当防火墙被禁用时,我可以使用工作站从终端对服务器进行 SSH 连接。但是当它启用时,我不能
我现在最担心的是为什么 Pascal 程序在给出 IP 号码时无法运行,以及 postgres 日志中的消息是什么。
非常感谢任何输入。谢谢!
编辑:这里有更多信息:
文件 postgresql.conf 包含以下几行:
listen_addresses = '*'
端口 = 5430
很抱歉...这是打开连接日志记录后的正确日志。 在我关闭、重新启动并运行我的程序后,日志文件包含以下内容:
2014-03-06 18:28:23 IST LOG:数据库系统于 2014-03-06 18:28:22 IST 关闭 2014-03-06 18:28:23 IST LOG:收到连接:主机=[本地] 2014-03-06 18:28:23 IST LOG:不完整的启动包 2014-03-06 18:28:23 IST LOG:数据库系统已准备好接受连接 2014-03-06 18:28:23 IST LOG:autovacuum 启动器启动 2014-03-06 18:28:24 IST LOG:收到连接:主机=[本地] 2014-03-06 18:28:24 IST LOG:连接授权:用户=postgres 数据库=postgres 2014-03-06 18:28:24 IST LOG:收到连接:主机=[本地] 2014-03-06 18:28:24 IST LOG:连接授权:用户=postgres 数据库=postgres 2014-03-06 18:28:25 IST LOG:收到连接:主机=[本地] 2014-03-06 18:28:25 IST LOG:连接授权:用户=postgres 数据库=postgres 2014-03-06 18:28:29 IST LOG:收到连接:主机=[本地] 2014-03-06 18:28:29 IST LOG:启动包不完整
【问题讨论】:
-
不确定您提到的观点是否涵盖了这一点,但是服务器实例上的服务器参数"listen_addresses" 呢?默认情况下,这是 localhost(当您使用它时,还要检查端口)
-
@DrColossos 是的,listen_addresses 设置为“*”。否则 PGAdmin III 将无法工作。
-
那么pg_hba文件呢?那里的所有条目也都正确吗?也许 pgAdmin 连接到系统的方式与您的脚本不同?
-
@DrColossos 是的,我已经正确地允许了我所有的 IP 号码。很抱歉我没有在问题中提到这两个:/
-
请在
postgresql.conf开启连接登录后显示PostgreSQL日志文件中的相关行。
标签: postgresql ubuntu-12.04 remote-access remote-server lazarus