[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pgsql-bugs
Subject:    Re: [BUGS] user names & non-ASCII
From:       Heikki Linnakangas <heikki.linnakangas () enterprisedb ! com>
Date:       2011-12-23 18:58:41
Message-ID: 4EF4CF61.2070209 () enterprisedb ! com
[Download RAW message or body]

On 23.12.2011 19:21, Robert Haas wrote:
> On Thu, Dec 15, 2011 at 3:40 PM, Holec, JPH Software<holec@jphsw.cz>  wrote:
>> I Have PostgreSQL server 8.4.9 on Linux, database utf-8 and Client app on
>> Windows (VC++ and libpq.dll).
>> I need to use user account with non-ASCII and PQconnectdb() with
>> options="client_encoding=WIN1250" doesn't work.
>
> I think you need a "-c" in there somewhere, maybe something like this:
>
> options='-cclient_encoding=WIN1250'
>
> ...although, for some reason, I can't get that to work from psql, even
> though I can set other parameters using that syntax.

That's because of the changes in 9.1 to determine client_encoding 
automatically from the system locale (commit 02e14562). Unless 
PGCLIENTENCODING environment variable is set, psql adds 
client_encoding='auto' to the params it passes to PQconnectdbParams. 
That overrides any setting you manually pass in the backend command-line 
options.

That doesn't seem desirable, actually. That could be changed easily, by 
passing the client_encoding='auto' setting *before* dbname in the 
PQconnectdbParams call. The options given by the user are parsed from 
dbname setting, so if we passed them in different order, the manually 
given options would override the client_encoding='auto' setting, not the 
other way round. That seems like better behavior. Patch attached. It 
might be better to not backpatch this, though, to avoid surprising and 
subtle changes in behavior in application.

-- 
   Heikki Linnakangas
   EnterpriseDB   http://www.enterprisedb.com

["let-client_encoding-be-manually-overrideable-in-psql-1.patch" (text/x-diff)]

diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index e5cf5ff..1e6e207 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1561,12 +1561,12 @@ do_connect(char *dbname, char *user, char *host, char *port)
 		values[2] = user;
 		keywords[3] = "password";
 		values[3] = password;
-		keywords[4] = "dbname";
-		values[4] = dbname;
-		keywords[5] = "fallback_application_name";
-		values[5] = pset.progname;
-		keywords[6] = "client_encoding";
-		values[6] = (pset.notty || getenv("PGCLIENTENCODING")) ? NULL : "auto";
+		keywords[4] = "client_encoding";
+		values[4] = (pset.notty || getenv("PGCLIENTENCODING")) ? NULL : "auto";
+		keywords[5] = "dbname";
+		values[5] = dbname;
+		keywords[6] = "fallback_application_name";
+		values[6] = pset.progname;
 		keywords[7] = NULL;
 		values[7] = NULL;
 
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 71829eb..b142080 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -183,14 +183,14 @@ main(int argc, char *argv[])
 		values[2] = options.username;
 		keywords[3] = "password";
 		values[3] = password;
-		keywords[4] = "dbname";
-		values[4] = (options.action == ACT_LIST_DB &&
+		keywords[4] = "client_encoding";
+		values[4] = (pset.notty || getenv("PGCLIENTENCODING")) ? NULL : "auto";
+		keywords[5] = "dbname";
+		values[5] = (options.action == ACT_LIST_DB &&
 					 options.dbname == NULL) ?
 			"postgres" : options.dbname;
-		keywords[5] = "fallback_application_name";
-		values[5] = pset.progname;
-		keywords[6] = "client_encoding";
-		values[6] = (pset.notty || getenv("PGCLIENTENCODING")) ? NULL : "auto";
+		keywords[6] = "fallback_application_name";
+		values[6] = pset.progname;
 		keywords[7] = NULL;
 		values[7] = NULL;
 


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic