【问题标题】:Why can't I connect to postgres from Perl?为什么我不能从 Perl 连接到 postgres?
【发布时间】:2010-09-27 21:09:53
【问题描述】:

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

$database="networkem"; $user="postgres"; $密码=""; $host="本地主机"; $dbh = DBI->connect("DBI:Pg:dbname=$dbname;host=$host", $user, $password);

我的 pg_hba 读取:

托管所有 postgres 127.0.0.1 255.255.255.255 信任

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

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

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

使用 pg_hba 读取:

托管所有 jimbo 127.0.0.1 255.255.255.255 信任

【问题讨论】:

标签: perl postgresql tcp dbi


【解决方案1】:

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

将以下内容添加到 pg_hba.conf 解决了该问题。

host all postgres 127.0.0.1/32 trust

【讨论】:

    【解决方案2】:

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

    listen_addresses = '*'
    

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

    psql -U postgres -h localhost networkem
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        DBI->errstr 会说出连接失败的原因,而不是玩 20 个问题来调试您的设置。

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

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

        【讨论】:

          猜你喜欢
          • 2023-01-31
          • 2020-06-02
          • 2011-03-23
          • 2013-03-02
          • 2018-04-05
          • 2018-09-29
          • 2017-10-10
          • 2017-07-31
          • 2020-08-26
          相关资源
          最近更新 更多