Re: pgAgent Database Name Limitation

From: Martin French <Martin(dot)French(at)romaxtech(dot)com>
To: pgadmin-hackers(at)postgresql(dot)org, pgadmin-hackers-owner(at)postgresql(dot)org
Subject: Re: pgAgent Database Name Limitation
Date: 2012-09-04 10:21:14
Message-ID: OFBF8F89DE.B7BE27D9-ON80257A6F.0037623E-80257A6F.0038E045@romaxtech.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

>
> Hi all,
>
> I've come across an issue within pgAgent whereby it cannot/will not
> connect to a database where there is a space in the name.
> (I know that typically pgAgent should run within the postgres db to
> allow pgAdmin job management, however, this is a second pgAgent
> running with a specific task set)
>
> I have tried all the following variants:
>
> "dbname='DB With Spaces 1' user=user1"
> 'dbname="DB With Spaces 1" user=user1'
> "dbname=DB With Spaces 1 user=user1"
> dbname=DB With Spaces 1 user=user1
> "dbname=\'DB With Spaces 1\' user=user1"
>
> etc etc...
>
> All of which return:
> ERROR: Primary connection string is not valid!
>
> Anyone know if this a limitation within pgAgent or libpq? I had an
> odd thought that this may be because of wxStrings...
>
> I've not yet investigated the source to see how this is being
> interpreted, as I thought i'd shout up on here to see If this is a
> libpq limitation.
>
> Cheers
>
> Martin

Ok, so a little source investigation and a quick libpq program later (to
verify where this issue lies):

$ gcc testlibpq.c -I/usr/pg914/include -L/usr/pg914/lib -lpq -o test

This works:

$ ./test "dbname='DB With Spaces 1'"

These do not:

$ ./test dbname=DB With Spaces 1
$ ./test dbname="DB With Spaces 1"
$ ./test dbname='DB With Spaces 1'

However, passing the same style parameter to pgAgent still fails. I
suspect that this is where I'm seeing an issue:

connInfo connInfo::getConnectionInfo(wxString connStr)
{
connInfo cnInfo;

wxRegEx propertyExp;

// Remove the white-space(s) to match the following format
// i.e. prop=value
bool res = propertyExp.Compile(wxT("(([ ]*[\t]*)+)="));

propertyExp.ReplaceAll(&connStr, wxT("="));

res = propertyExp.Compile(wxT("=(([ ]*[\t]*)+)"));
propertyExp.ReplaceAll(&connStr, wxT("="));

[...]
}

The regex strips out spaces causing "DB With Spaces 1" to become
"DBWithSpaces1"

If everyone is happy for me to, I'll work up a patch for this to allow
spaces in the DB name for instances where the postgres DB doesn't
exist/isn't used as the pgAgent driver.

cheers
Martin

=============================================

Romax Technology Limited
Rutherford House
Nottingham Science & Technology Park
Nottingham,
NG7 2PZ
England

Telephone numbers:
+44 (0)115 951 88 00 (main)

For other office locations see:
http://www.romaxtech.com/Contact
=================================
===============
E-mail: info(at)romaxtech(dot)com
Website: www.romaxtech.com
=================================

================
Confidentiality Statement
This transmission is for the addressee only and contains information that
is confidential and privileged.
Unless you are the named addressee, or authorised to receive it on behalf
of the addressee
you may not copy or use it, or disclose it to anyone else.
If you have received this transmission in error please delete from your
system and contact the sender. Thank you for your cooperation.
=================================================

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Dave Page 2012-09-04 10:38:55 Re: pgAgent Database Name Limitation
Previous Message Akshay Joshi 2012-09-04 09:45:26 Fixed help button crash