Почему я не могу подключиться к postgres из Perl? - PullRequest
3 голосов
/ 21 декабря 2008

Мне кажется, я правильно настроил 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 через командную строку и запустил postmaster с параметром -i. Что мне не хватает?

Я также пытался с другим пользователем, который работает нормально через PSQL:

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

с чтением pg_hba:

host    all    jimbo   127.0.0.1    255.255.255.255    trust

Ответы [ 4 ]

11 голосов
/ 21 декабря 2008

Вместо воспроизведения 20 вопросов для отладки вашей настройки, DBI->errstr скажет, почему не удалось установить соединение.

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

Хотя, если бы мне пришлось угадывать ..., поскольку Postgres аутентифицируется на основе хоста и имени пользователя для входа, я подозреваю, что путаница заключается в имени пользователя, которое вы даете подключению Postgres, и пользователю Unix, в который вы вошли как.

1 голос
/ 18 июня 2009

У меня была такая же проблема. Подсказка, приведенная выше для попытки "-h localhost", подтвердила, что у меня возникла проблема с подключением по сети.

Добавление следующего в pg_hba.conf решило проблему.

host all postgres 127.0.0.1/32 trust
1 голос
/ 22 декабря 2008

Помимо превосходного ответа Шверна, вы также можете проверить журнал PostgreSQL, который в зависимости от параметров, выбранных в postgresql.conf, может многое рассказать вам о том, что было не так.

0 голосов
/ 10 января 2009

Рекомендуется использовать параметр конфигурации 'listen_addresses' в вашем postgresql.conf вместо '-i' в командной строке. Например:

listen_addresses = '*'

Попробуйте выполнить следующую команду для того же пользователя, с которым вы запускаете свой Perl-скрипт:

psql -U postgres -h localhost networkem

'-h localhost' инициирует сетевое соединение вместо соединения с сокетом Unix. Если эта команда работает, ваш Perl-скрипт также должен работать.

...