我相信我已经正确设置了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
答案 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脚本也应该可以工作。