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

wa7juj8i  于 2022-11-15  发布在  Perl
关注(0)|答案(5)|浏览(181)

我相信我已经正确地设置了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
piwo6bdm

piwo6bdm1#

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

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

不过,如果我不得不猜测的话......由于Postgres是基于主机和登录用户进行身份验证的,我怀疑混淆在于您给Postgres连接的用户名和您登录的Unix用户名之间。

dgsult0t

dgsult0t2#

除了Schwern的优秀响应,您还可以检查PostgreSQL日志,根据postgresql.conf中选择的选项,它可能会告诉您很多关于什么是错误的。

mftmpeh8

mftmpeh83#

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

listen_addresses = '*'

尝试以运行perl脚本的同一用户身份执行以下命令:

psql -U postgres -h localhost networkem

“-h localhost”命令强制网络连接而不是Unix套接字连接。如果该命令有效,那么您的perl脚本也应该有效。

thtygnil

thtygnil4#

我也遇到了同样的问题。上面尝试“-h localhost”的提示确认了我在网络连接上遇到了问题。
将以下内容添加到pg_hba.conf中解决了这个问题。

host all postgres 127.0.0.1/32 trust
7ajki6be

7ajki6be5#

DBI可能连接到IPv4或IPv6 postgresql服务器接口,具体取决于配置方式。
因此,您可能需要pg_hba.conf中的这两行代码:
IPv4协议:

host  all  <user>  127.0.0.1/32  trust

IPv6协议:

host  all  <user>  ::1/128       trust

相关问题