2013-03-27 3 views
0

У меня есть этот сценарий PERLPerl DBI-> не подключить хлопков "нет маршрута для размещения", хотя я могу выбрать HOST

wrapper.pl

#!/usr/bin/env perl 
use strict; 
use warnings; 
use Getopt::Long; 
use DBI; 

# input params 
my $end; 
my $start; 
my $url; 
my @IP; 
my $host = "localhost"; 
my $dbname = "flows"; 
my $username; 
my $pass; 
GetOptions  ("s|start=s" => \$start, 
       "e|end=s" => \$end, 
       "r|url=s" => \$url, 
       "ip|iplist=s" => \@IP, 
       "h|host=s" => \$host, 
       "db|dbname=s" => \$dbname, 
       "u|username=s" => \$username, 
       "p|pass=s" => \$pass); 



# connect and send request to database 

my $dbh = DBI->connect("DBI:Pg:dbname=".$dbname.";host=".$host, $username, $pass, {'RaiseError' => 1}); 

Когда я бегу

./wrapper.pl -h 10.0.0.3 

Я получаю:

DBI connect('dbname=flows;host=10.0.0.3','',...) failed: could not connect to server: No route to host 
Is the server running on host "10.0.0.3" and accepting 
TCP/IP connections on port 5432? 

Я могу пинговать сервер, а также он должен принимать соединения на 5432. Могу ли я получить это сообщение из-за неправильных учетных данных?

+0

насчет 'PSQL -h 10.0.0.3 flows' из той же учетной записи пользователя и хозяин? Тот же результат? –

+1

Резервированное использование оператора конкатенации: «DBI: Pg: dbname = $ dbname; host = $ host» - интерполировать ваши скалярные переменные. – TLP

+0

'Нет маршрута к хосту' звучит как сообщение от самой ОС. (Я не знаю, есть ли способ указать прокси-сервер, но если есть, и если бы вы это сделали, то хозяин, о котором идет речь, может быть прокси-сервером.) – ikegami

ответ

0

Сначала вы должны use DBD::Pg; после use DBI;

Во-вторых добавить DBI->errstr для более правильной ошибки

мой $ ДВГ = DBI-> подключения ("DBI: Pg: имя_бд =".. $ Имя_бд "; host = ". $ host, $ username, $ pass, {'RaiseError' => 1}) или die DBI-> errstr;

В-третьих, вы должны быть в состоянии подключиться к Psql из командной строки, прежде чем triyng от DBI

psql -h 10.0.0.3 -U username -d dbname -p 5432 (Пожалуйста, проверьте синтаксис)