Обсуждение: How and when are encoding DLLs used on Windows?

Поиск
Список
Период
Сортировка

How and when are encoding DLLs used on Windows?

От
David Schnur
Дата:
I bundle Postgres (8.3.15) with another product as a back-end database.  On Windows, the default build includes a bunch of what appear to be codec libraries, with names like, utf8_and_cyrillic.dll, ascii_and_mic.dll, etc.  But using Microsoft's dependency walker tool, I see no references to any of these in libpq.dll, psql, postgres or initdb.

So I'm wondering what these are used for, what executable or library ends up loading them, and when/how exactly this happens.  I'd like to know whether they're actually necessary, since we could save some space in our installer by omitting them.

Re: How and when are encoding DLLs used on Windows?

От
Tom Lane
Дата:
David Schnur <dnschnur@gmail.com> writes:
> I bundle Postgres (8.3.15) with another product as a back-end database.  On
> Windows, the default build includes a bunch of what appear to be codec
> libraries, with names like, utf8_and_cyrillic.dll, ascii_and_mic.dll, etc.
>  But using Microsoft's dependency walker tool, I see no references to any
> of these in libpq.dll, psql, postgres or initdb.

> So I'm wondering what these are used for, what executable or library ends
> up loading them, and when/how exactly this happens.

They're used for character set encoding conversions, eg when
database_encoding = UTF8 and client_encoding = LATIN1 (or any other
non-identical combination).

> I'd like to know
> whether they're actually necessary, since we could save some space in our
> installer by omitting them.

AFAIR, the system will function without 'em ... until you try to set
client_encoding different from database_encoding.  Removing that
functionality doesn't seem like a good idea to me, but if you know the
needs of your userbase precisely, maybe you could get away with it.

            regards, tom lane

Re: How and when are encoding DLLs used on Windows?

От
Craig Ringer
Дата:
On 11/17/2011 12:04 AM, David Schnur wrote:
> I bundle Postgres (8.3.15) with another product as a back-end database.
>   On Windows, the default build includes a bunch of what appear to be
> codec libraries, with names like,
> utf8_and_cyrillic.dll, ascii_and_mic.dll, etc.  But using Microsoft's
> dependency walker tool, I see no references to any of these in
> libpq.dll, psql, postgres or initdb.

They're loaded by LoadLibrary calls. You'll see that the names do appear
in the server executable as strings.

The PL libraries and contrib libraries are similar, in that you won't
see direct dependencies but they'll still get used via LoadLibrary if
your database calls for them.

--
Craig Ringer

Re: How and when are encoding DLLs used on Windows?

От
David Schnur
Дата:
On Wed, Nov 16, 2011 at 6:57 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
They're used for character set encoding conversions, eg when
database_encoding = UTF8 and client_encoding = LATIN1 (or any other
non-identical combination).

Thanks, Tom and Craig; that makes perfect sense.  I'd rather not assume anything about the client encoding, but I do know that the server encoding will always be UTF8.  Am I correct, then, in thinking that I only need the conversion procs whose names start with utf8_and...?

(I wrote this response a few days ago, but realized that I forgot to reply-all to the list)