为什么我不能连接到Perl的postgres?

时间:2008-12-20 22:04:34

标签: perl postgresql tcp dbi

我相信我已经正确设置了Pg,但我的脚本似乎没有连接到数据库。我正在测试:

$database="networkem";
$user="postgres";
$password="";
$host="localhost";

$dbh = DBI->connect("DBI:Pg:dbname=$dbname;host=$host", $user, $password);

我的pg_hba上写着:

host  all  postgres   127.0.0.1  255.255.255.255   trust

我可以通过命令行使用psql,并使用-i选项启动postmaster。我错过了什么?

我还尝试了另一个通过psql正常工作的用户:

$user="jimbo"; $password="p2ssw0rd";

pg_hba阅读:

host    all    jimbo   127.0.0.1    255.255.255.255    trust

4 个答案:

答案 0 :(得分:11)

而不是播放20个问题来调试您的设置,DBI->errstr将说明连接失败的原因。

my $dbh = DBI->connect(...) or die DBI->errstr;

虽然如果我不得不猜测...因为Postgres基于主机和登录用户进行身份验证,我怀疑你给Postgres连接的用户名和你登录的Unix用户之间的混淆。

答案 1 :(得分:1)

除了Schwern的出色响应之外,您还可以查看PostgreSQL日志,根据postgresql.conf中选择的选项,它可能会告诉您很多错误。

答案 2 :(得分:1)

我有同样的问题。尝试“-h localhost”的上述提示确认我在连接网络时遇到问题。

将以下内容添加到pg_hba.conf修复了问题。

host all postgres 127.0.0.1/32 trust

答案 3 :(得分:0)

建议您在postgresql.conf中使用'listen_addresses'配置选项,而不是在命令行中使用'-i'。例如:

listen_addresses = '*'

尝试以与运行perl脚本相同的用户执行以下命令:

psql -U postgres -h localhost networkem

'-h localhost'强制网络连接而不是Unix套接字连接。如果该命令有效,那么perl脚本也应该可以工作。