Problem about connecting PostgreSQL through TCP/IP

From: Hui Chen <gray(dot)chenhui(at)gmail(dot)com>
To: pgsql-php(at)postgresql(dot)org
Subject: Problem about connecting PostgreSQL through TCP/IP
Date: 2005-08-14 17:32:56
Message-ID: 923c3c1405081410326a1c2880@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-php

Hello, everyone,

Can anyone help me? I am quite frustrating now. I have been trying to
connect PostgreSQL server through TCP/IP connection using PHP. I was
not successful. Could please read the following and give me some
hints. Thanks a million.

OS: Fedora Core 4 ("uname -s -r" yields "Linux 2.6.12-1.1398_FC4smp")
PostgreSQL: version 8.0.3
PHP: version 5.0.4

In postgresql.conf, these three lines were inserted,
listen_addresses = '*'
port = 5432
max_connections = 100

The following lines were inserted to pg_hba.conf:
local all all password
host all all 127.0.0.1/32 password
host all all 192.168.0.0/1 password

restart posgresql by
/sbin/service postgresql restart
The server was restarted OK.

The PHP script used to connect database is as follows,
<?php
$conn = pg_connect("host=localhost port=5432 dbname=foodb user=foo
password=foo") or die ("Can not connect to postgres");
$result=pg_exec("SELECT * FROM footbl");
$fetch = pg_fetch_row($result);
print "<html><body>";
print $fetch[0];
print "<body></html>";

pg_close($conn); // Close this connection
?>

Assume this PHP script is named as "connectdb.php", then on
commandline, when I run the following,
php connectedb.php
I see correct results, e.g.,
<html><body>foo<body></html>

On commandline again, I used the following to connect database,
psql -d foodb -h localhost -p 5432 -U foo
Password: ************
Welcome to psql 8.0.3, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

foodb=>

It is OK. Then I disabled "iptables" temporarily for testing purpose by
/sbin/service iptables stop
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]

On localhost, I tried this command,
telnet localhost 5432
after hit "enters", telnet exited. I checked postgresql_%S.log and see
"LOG: invalid length of startup packet"
which means postgresql server indeed saw the telnet connection.

I tried this on any of my other machines in the LAN, I observed the same thing.

In summary, it seemed the postgresql allowed TCP/IP connection, and
worked well. However, when I ran the PHP script through web browser, I
did not get connection. Instead, in Apache web server's error_log, I
see
[client 192.168.1.10] PHP Warning: pg_connect() [<a
href='function.pg-connect'>function.pg-connect</a>]: Unable to connect
to PostgreSQL server: could not connect to server: Permission
denied\n\tIs the server running on host &quot;localhost&quot; and
accepting\n\tTCP/IP connections on port 5432? in /foo/connectdb.php on
line 2

Interestingly, when I checked the log file for postgresql again, it
did not have anything for this connection failure. It seemed the
connection did not send to the database server at all. However,
1) I disabled firewall
2) I can telnet the ports
3) I can run the script from commandline

What could go wrong?

Thanks a lot for your reading this lengthy email. Waiting for your help!

Gray

Responses

Browse pgsql-php by date

  From Date Subject
Next Message Matthew Terenzio 2005-08-15 14:30:12 Re: Problem about connecting PostgreSQL through TCP/IP
Previous Message Lynna Landstreet 2005-07-21 01:30:04 Re: Times and time zones