1

我可以用 PHP 很好地连接并在本地使用 Psql,但 Perl 不能。

my $dbh = DBI->connect("DBI:Pg:dbname=mydb,host=localhost:5432","user","pass",{'RaiseError' => 1});

我相信错误是因为我的套接字在 tmp 中:

postgres@host/opt/psql/bin $ netstat -an | grep 5432
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN
tcp6       0      0 :::5432                 :::*                    LISTEN
unix  2      [ ACC ]     STREAM     LISTENING     24728255 /tmp/.s.PGSQL.5432
unix  3      [ ]         STREAM     CONNECTED     24729004 /tmp/.s.PGSQL.5432

当我运行我的简单 perl 脚本时,它似乎在 /var/run 中查找:

./test.pl
DBI connect('dbname=mydb','user',...) failed: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? at ./test.pl line 6

我试图简单地创建一个符号链接,但这似乎不起作用:

sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
ln: failed to create symbolic link `/var/run/postgresql/.s.PGSQL.5432': No such file or directory

其他一些简单的东西:pg_hba.conf 信任所有 localhost 连接以及我的子网的连接。

postgresql.conf 有以下内容:
listen_addresses = '*'

4

1 回答 1

3

请参阅http://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-CONNECT-HOST

主持人

要连接的主机名。如果它以斜杠开头,它指定 Unix 域通信而不是 TCP/IP 通信;该值是存储套接字文件的目录的名称。未指定主机时的默认行为是连接到 /tmp 中的 Unix 域套接字(或构建 PostgreSQL 时指定的任何套接字目录)。在没有 Unix 域套接字的机器上,默认连接到 localhost。

所以一个连接字符串host=/tmp应该让你的 Pg 客户端看起来在正确的位置(这应该是默认的)。

于 2013-05-07T20:14:50.893 回答