Re: ecpglib use PQconnectdbParams

Lists: pgsql-hackers
From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: ecpglib use PQconnectdbParams
Date: 2012-02-02 18:01:48
Message-ID: 1328205708.19820.2.camel@vanquo.pezone.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

I noticed ecpglib still uses PQconnectdb() with a craftily assembled
connection string. Here is a patch to use PQconnectdbParams() instead.

Attachment Content-Type Size
ecpg-pqconnectdbparams.patch text/x-patch 3.0 KB

From: Christian Ullrich <chris(at)chrullrich(dot)net>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: ecpglib use PQconnectdbParams
Date: 2012-02-03 12:15:30
Message-ID: jggj53$4rk$1@dough.gmane.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

* Peter Eisentraut wrote:

> I noticed ecpglib still uses PQconnectdb() with a craftily assembled
> connection string. Here is a patch to use PQconnectdbParams() instead.

+ const char *conn_keywords[6];
+ const char *conn_values[6];

Shouldn't these be [7]? You can have up to 6 items, plus the terminator.

--
Christian Ullrich


From: Michael Meskes <meskes(at)postgresql(dot)org>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: ecpglib use PQconnectdbParams
Date: 2012-02-03 16:48:08
Message-ID: 20120203164808.GA4701@feivel.credativ.lan
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Thu, Feb 02, 2012 at 08:01:48PM +0200, Peter Eisentraut wrote:
> I noticed ecpglib still uses PQconnectdb() with a craftily assembled
> connection string. Here is a patch to use PQconnectdbParams() instead.

Thanks, committed. Will sync as soon as I'm online again.

Michael
--
Michael Meskes
Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org
Jabber: michael.meskes at googlemail dot com
VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL


From: Marko Kreen <markokr(at)gmail(dot)com>
To: Christian Ullrich <chris(at)chrullrich(dot)net>
Cc: Michael Meskes <meskes(at)postgresql(dot)org>, Peter Eisentraut <peter_e(at)gmx(dot)net>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: ecpglib use PQconnectdbParams
Date: 2012-02-06 16:50:44
Message-ID: 20120206165044.GA16393@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Fri, Feb 03, 2012 at 01:15:30PM +0100, Christian Ullrich wrote:
> * Peter Eisentraut wrote:
> >I noticed ecpglib still uses PQconnectdb() with a craftily assembled
> >connection string. Here is a patch to use PQconnectdbParams() instead.
>
> + const char *conn_keywords[6];
> + const char *conn_values[6];
>
> Shouldn't these be [7]? You can have up to 6 items, plus the terminator.

This bug is now in GIT.

--
marko


From: Michael Meskes <meskes(at)postgresql(dot)org>
To: Christian Ullrich <chris(at)chrullrich(dot)net>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: ecpglib use PQconnectdbParams
Date: 2012-02-06 20:11:32
Message-ID: 20120206201132.GA4535@feivel.credativ.lan
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Fri, Feb 03, 2012 at 01:15:30PM +0100, Christian Ullrich wrote:
> Shouldn't these be [7]? You can have up to 6 items, plus the terminator.

I take it only keywords have to be [7], right? Committed, thanks for spotting this.

There seems to be one more problem that I haven't had time to tackle yet. With
this patch the connection regression test (make checktcp) doesn't run through
anymore because one test connection cannot be made. It spits out the error
message:

FATAL: invalid command-line arguments for server process
HINT: Try "postgres --help" for more information.

This connection used to work without the patch and besides the error message is
not really telling in this context.

So if anyone is interested in looking at this fine, if not I will as soon as I
find some spare time.

Michael
--
Michael Meskes
Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org
Jabber: michael.meskes at googlemail dot com
VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL


From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: Michael Meskes <meskes(at)postgresql(dot)org>
Cc: Christian Ullrich <chris(at)chrullrich(dot)net>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: ecpglib use PQconnectdbParams
Date: 2012-02-08 12:47:01
Message-ID: 1328705221.29869.3.camel@vanquo.pezone.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On mån, 2012-02-06 at 21:11 +0100, Michael Meskes wrote:
> On Fri, Feb 03, 2012 at 01:15:30PM +0100, Christian Ullrich wrote:
> > Shouldn't these be [7]? You can have up to 6 items, plus the terminator.
>
> I take it only keywords have to be [7], right? Committed, thanks for spotting this.
>
> There seems to be one more problem that I haven't had time to tackle yet. With
> this patch the connection regression test (make checktcp) doesn't run through
> anymore because one test connection cannot be made. It spits out the error
> message:
>
> FATAL: invalid command-line arguments for server process
> HINT: Try "postgres --help" for more information.
>
> This connection used to work without the patch and besides the error message is
> not really telling in this context.

You can get more information on that with the attached patch, which
might be a useful addition in general. The problem comes from this:

exec sql connect to unix:postgresql://localhost/connectdb?connect_timeout=14 user connectuser;

and the updated error message is:

ECPGconnect: could not open database: FATAL: invalid command-line arguments for server process: connect_timeout=14

Because connect_timeout is a separate libpq connection parameter, but
now it's stuck into "options". It might have worked more or less by
accident before.

It's not clear to me why this only appears on checktcp. And why we
don't run those tests by default. That should be clarified, because
there are also other failures in that test that show that it hasn't been
run in a while.

Attachment Content-Type Size
postgres-cmdline-error.patch text/x-patch 589 bytes

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: Michael Meskes <meskes(at)postgresql(dot)org>, Christian Ullrich <chris(at)chrullrich(dot)net>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: ecpglib use PQconnectdbParams
Date: 2012-02-08 15:19:40
Message-ID: 17170.1328714380@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Peter Eisentraut <peter_e(at)gmx(dot)net> writes:
> if (IsUnderPostmaster)
> ereport(FATAL,
> (errcode(ERRCODE_SYNTAX_ERROR),
> - errmsg("invalid command-line arguments for server process"),
> + errmsg("invalid command-line arguments for server process: %s", argv[optind]),
> errhint("Try \"%s --help\" for more information.", progname)));
> else
> ereport(FATAL,

+1 for that change, but please s/arguments/argument/ in the text. Also,
what about the other branch of the "if" that's just out of sight here?

regards, tom lane


From: Michael Meskes <meskes(at)postgresql(dot)org>
To: Peter Eisentraut <peter_e(at)gmx(dot)net>
Cc: Michael Meskes <meskes(at)postgresql(dot)org>, Christian Ullrich <chris(at)chrullrich(dot)net>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: ecpglib use PQconnectdbParams
Date: 2012-02-13 11:21:46
Message-ID: 20120213112146.GA29242@feivel.credativ.lan
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

> Because connect_timeout is a separate libpq connection parameter, but
> now it's stuck into "options". It might have worked more or less by
> accident before.

So it is not an option, right? But the old function accepted it as an option it seems.

> It's not clear to me why this only appears on checktcp. And why we
> don't run those tests by default. That should be clarified, because

This was decided when regression tests for ecpg were introduced to not depend
on the use of TCP ports.

For details see this thread:
http://archives.postgresql.org/pgsql-hackers/2006-08/msg00078.php
and in particular these emails:
http://archives.postgresql.org/pgsql-hackers/2006-08/msg00118.php
http://archives.postgresql.org/pgsql-hackers/2006-08/msg00134.php

Michael
--
Michael Meskes
Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
Michael at BorussiaFan dot De, Meskes at (Debian|Postgresql) dot Org
Jabber: michael.meskes at googlemail dot com
VfL Borussia! Força Barça! Go SF 49ers! Use Debian GNU/Linux, PostgreSQL