Re: Re: BUG #6742: pg_dump doesn't convert encoding of DB object names to OS encoding

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Alexander Law <exclusion(at)gmail(dot)com>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Re: BUG #6742: pg_dump doesn't convert encoding of DB object names to OS encoding
Date: 2012-08-07 17:24:01
Message-ID: CA+Tgmoa=3Rrbv11gOtO+TV8+LyPRjF9C9+LJ5eiYmhXbnfVo2A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-general pgsql-hackers

On Wed, Jul 25, 2012 at 7:54 AM, Alexander Law <exclusion(at)gmail(dot)com> wrote:
> Hello,
> I would like to fix this bug, but it looks like it would be not one-line
> patch.
> Looking at the pg_dump code I see that the object names come through the
> following chain:
> 1. pg_dump executes 'SELECT c.tableoid, c.oid, c.relname, ... ' and gets the
> object_name with the encoding chosen for db connection/dump.
> 2. it invokes write_msg function or alike:
>
> write_msg(NULL, "finding the columns and types of table \"%s\"\n",
> tbinfo->dobj.name);
> 3. vwrite_msg localizes text message, but not the argument(s):
> vfprintf(stderr, _(fmt), ap);
> Here gettext (_) internally translates fmt to OS encoding (if it's different
> from UTF-8 - encoding of a localized strings).
>
> And I can see only a few solutions of the problem:
> 1. To convert the object name at the back-end, i.e. to modify all the
> similar SELECT's as:
> 'SELECT c.tableoid, c.oid, c.relname, convert_to(c.relname, 'OS_ENCODING')
> AS locrelname, ...'
> and then do write_msg(NULL, "finding the columns and types of table
> \"%s\"\n", tbinfo->dobj.local_name);
> The downside of this approach is that it requires rewriting all the SELECT's
> for all the object. And it doesn't help us to write out any other text from
> backend, such as localized backend error.
>
> 2. To setup another connection to backend with the OS encoding, and to get
> all the object names through it. It looks insane too. And we have the same
> problem with the localized backend errors coming on "main" connection.
>
> 3. To make convert_to_os_encoding(text, encoding) function for a frontend
> utilities. Unfortunately frontend can't use internal PostgreSQL conversion
> functions, and modifying them to use through libpq looks unfeasible.
> So the only way to implement such function is to use another encoding
> conversion framework (library).
> And my question is - is it possible to include libiconv (add this
> dependency) to the frontend utilities code?
>
> 4. To force users to use OS encoding as the Database encoding. Or to not use
> non-ASCII characters in an db object names and to disable nls on Windows
> completely. It doesn't look like a solution at all.

I think if you're going to try to do something about this, #1 is
probably the best option.

It does sound like a lot of work, though.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message dcarmich 2012-08-07 17:24:49 BUG #7483: uuid-ossp does not compile on OS X 10.8
Previous Message Robert Haas 2012-08-07 17:12:29 Re: BUG #6739: PGAdmin 3 Should allow to select multiple tables in the left tree

Browse pgsql-general by date

  From Date Subject
Next Message Ben Chobot 2012-08-07 17:44:05 Re: can we avoid pg_basebackup on planned switches?
Previous Message David Greco 2012-08-07 17:16:08 Re: Feature Request - Postgres FDW

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2012-08-07 17:40:08 Re: WIP patch for LATERAL subqueries
Previous Message David Fetter 2012-08-07 17:13:34 Re: [PATCH] Docs: Make notes on sequences and rollback more obvious