Обсуждение: prob with PERL/Postgres
PERL SNIPPET: # build arrays from file (OMITTED) use Pg; $dbhost='127.0.0.1'; $dbname='mpact'; #$connstr="dbname=$dbname"; $connstr="host=$dbhost dbname=$dbname"; $conn = Pg::connectdb($connstr); #more code related to date omitted $result=$conn->exec($sql); (PGRES_COMMAND_OK eq $result->resultStatus) or die $conn->errorMessage; WHY DO I GET PQsendQuery() -- There is no connection to the backend. I have tried leaving host blank, using IP 127.0.0.1 and hostname localhost. This script should work - the problem is something with postgres but I dont know what. Any ideas out there? Thanks, Kris
I use the Perl DBI module to connect to a postgres data base on the local system. I don't specify the host name. This is the syntax I use to connect to the data base: use DBI; $dbname = "foo"; $connstr = "dbi:Pg:dbname=$dbname"; $dbh = DBI->connect($connstr); Kristopher Yates wrote: > PERL SNIPPET: > > # build arrays from file (OMITTED) > > use Pg; > $dbhost='127.0.0.1'; > $dbname='mpact'; > #$connstr="dbname=$dbname"; > $connstr="host=$dbhost dbname=$dbname"; > $conn = Pg::connectdb($connstr); > > #more code related to date omitted > > $result=$conn->exec($sql); > (PGRES_COMMAND_OK eq $result->resultStatus) > or die $conn->errorMessage; > > WHY DO I GET PQsendQuery() -- There is no connection to the > backend. I have tried leaving host blank, using IP 127.0.0.1 and > hostname localhost. This script should work - the problem is > something with postgres but I dont know what. Any ideas out > there? Thanks, Kris > > ---------------------------(end of broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/users-lounge/docs/faq.html -- ================================================= Katherine (Kate) L. Collins Senior Software Engineer/Meteorologist Weather Services International (WSI Corporation) 900 Technology Park Drive Billerica, MA 01821 EMAIL: kcollins@wsi.com PHONE: (978) 262-0610 FAX: (978) 262-0700 http://www.intellicast.com
Kristopher Yates wrote: >PERL SNIPPET: > ># build arrays from file (OMITTED) > >use Pg; >$dbhost='127.0.0.1'; >$dbname='mpact'; >#$connstr="dbname=$dbname"; >$connstr="host=$dbhost dbname=$dbname"; >$conn = Pg::connectdb($connstr); > >#more code related to date omitted > > $result=$conn->exec($sql); > (PGRES_COMMAND_OK eq $result->resultStatus) > or die $conn->errorMessage; > >WHY DO I GET PQsendQuery() -- There is no connection to the >backend. I have tried leaving host blank, using IP 127.0.0.1 and >hostname localhost. This script should work - the problem is >something with postgres but I dont know what. Any ideas out >there? Thanks, Kris > >---------------------------(end of broadcast)--------------------------- >TIP 5: Have you checked our extensive FAQ? > >http://www.postgresql.org/users-lounge/docs/faq.html > > have you checked your /etc/host file? as well is your loopback on ? what about your pg_hba.conf it should probably have ,by default: ---pg_hba.conf---- # By default, allow anything over UNIX domain sockets and localhost. local all trust host all 127.0.0.1 255.255.255.255 trust ---pg_hba.conf---- you can use stonger security consult the Pg docs on that! its been a while since ive looked at them here is how i connect:: #!/usr/bin/perl use strict; use warnings; use Pg; my $command="select * from write;"; my $conninfo = "dbname=write user=www password=Apache1312 host=localhost"; my $conn = Pg::connectdb($conninfo); if (Pg::PGRES_CONNECTION_OK == $conn->status){ my $result = $conn->exec($command); if (Pg::PGRES_TUPLES_OK == $result->resultStatus) { while (my @row = $result->fetchrow) { print join (" ",@row); } } }
On Mon, 6 Aug 2001, Kate Collins wrote: > I use the Perl DBI module to connect to a postgres data base on the local > system. I don't specify the host name. This is the syntax I use to connect to > the data base: > > use DBI; > > $dbname = "foo"; > $connstr = "dbi:Pg:dbname=$dbname"; > $dbh = DBI->connect($connstr); Kate, he uses a diff module by the same author (Edmund Mergl) but with a very diff syntax. The advantage of the DBI - Kris, if you're interested - is that the syntax is much like ESQL/C and the code is much more portable. For example I use DBI to access both pg and oracle. Cheers, Tom > Kristopher Yates wrote: > > > PERL SNIPPET: > > > > # build arrays from file (OMITTED) > > > > use Pg; > > $dbhost='127.0.0.1'; > > $dbname='mpact'; > > #$connstr="dbname=$dbname"; > > $connstr="host=$dbhost dbname=$dbname"; > > $conn = Pg::connectdb($connstr); > > > > #more code related to date omitted > > > > $result=$conn->exec($sql); > > (PGRES_COMMAND_OK eq $result->resultStatus) > > or die $conn->errorMessage; > > > > WHY DO I GET PQsendQuery() -- There is no connection to the > > backend. I have tried leaving host blank, using IP 127.0.0.1 and > > hostname localhost. This script should work - the problem is > > something with postgres but I dont know what. Any ideas out > > there? Thanks, Kris > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 5: Have you checked our extensive FAQ? > > > > http://www.postgresql.org/users-lounge/docs/faq.html > > > -- > ================================================= > Katherine (Kate) L. Collins > Senior Software Engineer/Meteorologist > Weather Services International (WSI Corporation) > 900 Technology Park Drive > Billerica, MA 01821 > EMAIL: kcollins@wsi.com > PHONE: (978) 262-0610 > FAX: (978) 262-0700 > http://www.intellicast.com > > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly > -------------------------------------------------------------------- SVCMC - Center for Behavioral Health -------------------------------------------------------------------- Thomas Good tomg@ { admin | q8 } .nrnet.org Programmer/Analyst Phone: 718-354-5528 Residential Services Mobile: 917-282-7359 -------------------------------------------------------------------- /* Die Wahrheit Ist Irgendwo Da Draussen... */ --------------------------------------------------------------------
1. I'm assuming that psql works fine? psql -h 127.0.0.1 mpact?
1b. Have you checked the port?? You ARE running postmaster with the '-i' option, aren't you?
The recommended solutions are typically to use the DBI and DBD modules. Try man DBD::Pg.
Alternatively: have you tried the setdbLogin method instead:
$conn = Pg::setdbLogin($pghost, $pgport, $pgoptions, $pgtty, $dbname, $login, $pwd)
Opens a new connection to the backend. The connection identifier $conn ( a pointer to the PGconn structure )
must be used in subsequent commands for unique identifica- tion. Before using $conn you should call
$conn->statusto ensure, that the connection was properly made. Closing a connection is done by deleting the
connectionhandle, eg 'undef $conn;'.
Hope this helps a little......
Allan
Kristopher Yates wrote:
> PERL SNIPPET:
>
> # build arrays from file (OMITTED)
>
> use Pg;
> $dbhost='127.0.0.1';
> $dbname='mpact';
> #$connstr="dbname=$dbname";
> $connstr="host=$dbhost dbname=$dbname";
> $conn = Pg::connectdb($connstr);
>
> #more code related to date omitted
>
> $result=$conn->exec($sql);
> (PGRES_COMMAND_OK eq $result->resultStatus)
> or die $conn->errorMessage;
>
> WHY DO I GET PQsendQuery() -- There is no connection to the
> backend. I have tried leaving host blank, using IP 127.0.0.1 and
> hostname localhost. This script should work - the problem is
> something with postgres but I dont know what. Any ideas out
> there? Thanks, Kris
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
Thomas Good <tomg@admin.nrnet.org> writes:
> Kate, he uses a diff module by the same author (Edmund Mergl) but with
> a very diff syntax. The advantage of the DBI - Kris, if you're
> interested - is that the syntax is much like ESQL/C and the code is
> much more portable. For example I use DBI to access both pg and
> oracle.
DBI is a good alternative, but is unlikely to act much differently as
far as connection problems go.
> use Pg;
> $dbhost='127.0.0.1';
> $dbname='mpact';
> #$connstr="dbname=$dbname";
> $connstr="host=$dbhost dbname=$dbname";
> $conn = Pg::connectdb($connstr);
>
> #more code related to date omitted
>
> $result=$conn->exec($sql);
> (PGRES_COMMAND_OK eq $result->resultStatus)
> or die $conn->errorMessage;
>
> WHY DO I GET PQsendQuery() -- There is no connection to the
> backend.
It's hard to tell with only that much information. I think the real
mistake in this code is not checking for failure of the connectdb()
call. Had you checked at that point, you would have gotten a more
useful error message. The examples in the Pg documentation recommend
$conn = Pg::connectdb(whatever);die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status;
Try that, and if you're still in the dark, let us see the error
message...
regards, tom lane
On Mon, 6 Aug 2001, Tom Lane wrote:
> Thomas Good <tomg@admin.nrnet.org> writes:
> > Kate, he uses a diff module by the same author (Edmund Mergl) but with
> > a very diff syntax. The advantage of the DBI - Kris, if you're
> > interested - is that the syntax is much like ESQL/C and the code is
> > much more portable. For example I use DBI to access both pg and
> > oracle.
>
> DBI is a good alternative, but is unlikely to act much differently as
> far as connection problems go.
You know Thomas, after I build Pg (including 7.1.2) and fire up initdb
there comes a message about starting the db with -D and the location of
the datafiles. Nothing about using -i...it might be good to include,
no?
Cheers,
Tom
-------------------------------------------------------------------- SVCMC - Center for Behavioral Health
--------------------------------------------------------------------
Thomas Good tomg@ { admin | q8 } .nrnet.org
Programmer/Analyst Phone: 718-354-5528
Residential Services Mobile: 917-282-7359
--------------------------------------------------------------------
/* Die Wahrheit Ist Irgendwo Da Draussen... */
--------------------------------------------------------------------
I use the Perl DBI module to connect to a postgres data base on the local system. I don't specify the host name. This is the syntax I use to connect to the data base: use DBI; $dbname = "foo"; $connstr = "dbi:Pg:dbname=$dbname"; $dbh = DBI->connect($connstr); Kristopher Yates wrote: > PERL SNIPPET: > > # build arrays from file (OMITTED) > > use Pg; > $dbhost='127.0.0.1'; > $dbname='mpact'; > #$connstr="dbname=$dbname"; > $connstr="host=$dbhost dbname=$dbname"; > $conn = Pg::connectdb($connstr); > > #more code related to date omitted > > $result=$conn->exec($sql); > (PGRES_COMMAND_OK eq $result->resultStatus) > or die $conn->errorMessage; > > WHY DO I GET PQsendQuery() -- There is no connection to the > backend. I have tried leaving host blank, using IP 127.0.0.1 and > hostname localhost. This script should work - the problem is > something with postgres but I dont know what. Any ideas out > there? Thanks, Kris > > ---------------------------(end of broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/users-lounge/docs/faq.html -- ================================================= Katherine (Kate) L. Collins Senior Software Engineer/Meteorologist Weather Services International (WSI Corporation) 900 Technology Park Drive Billerica, MA 01821 EMAIL: kcollins@wsi.com PHONE: (978) 262-0610 FAX: (978) 262-0700 http://www.intellicast.com