2013-05-07 54 views
1

我可以正常連接使用PHP和本地使用PSQL,但Perl不。的Perl - 連接到PostgreSQL數據庫 - 在沒有找到合適的插座

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

我相信錯誤是因爲我的插座是在TMP:

[email protected]/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的信任所有本地主機連接,以及那些我子網。

postgresql.conf中有以下幾點:
的listen_addresses = '*'

+0

嘗試'127.0.0.1',而不是'localhost'。這應該會導致它使用TCP而不是UNIX套接字。 – jordanm 2013-05-07 19:58:26

回答

2

http://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-CONNECT-HOST:主機

主機

名稱來連接。如果以斜線開頭,則指定 Unix域通信而不是TCP/IP通信;值 是存儲套接字文件的目錄的名稱。未指定的主機時,該 默認行爲是連接到/ tmp目錄(或任何插座目錄指定 PostgreSQL的時候)一個 Unix域套接字。在沒有Unix域套接字的機器上, 默認是連接到本地主機。

所以有host=/tmp應該在正確的地方您的PG客戶端的外觀(這應該是默認反正)的連接字符串。

+0

就是這樣 - 我曾嘗試使用套接字的完整路徑(/tmp/.s.PGSQL.5432),但沒有奏效。使用/ tmp就行了。 – user1830388 2013-05-07 20:34:07

相關問題