Re: client encoding that psql command sets - Mailing list pgsql-general

From Adrian Klaver
Subject Re: client encoding that psql command sets
Date
Msg-id 52F37651.6010508@gmail.com
Whole thread Raw
In response to client encoding that psql command sets  (坂本 翼 <sakamoto.tsubasa@ryobi.co.jp>)
Responses Re: client encoding that psql command sets
List pgsql-general
On 02/05/2014 11:43 PM, 坂本 翼 wrote:
> Hi all,
>
> When I tried to psql command, I found that the result of command seems to be
> different from explanation of the manual. Please tell me which is
> correct performance, the result of command or the explanation of manual.
> I show the details as follows.
>
> [Events]
> The encoding that psql command sets has difference between the result of command
> and the explanation of manual.
>
> The following is the explanation of encoding that psql command sets,
> which I made extracts from the 9.2 manual.
> ---------------------------------------------------------------------------
>    VI. Reference / II. PostgreSQL Client Applications / psql / Connecting to a Database
>    "If at least one of standard input or standard output are a terminal,
>     then psql sets the client encoding to "auto",
>     which will detect the appropriate client encoding from the locale settings
>     (LC_CTYPE environment variable on Unix systems).
>     If this doesn't work out as expected,
>     the client encoding can be overridden using the environment variable PGCLIENTENCODING."
> ----------------------------------------------------------------------------
> Above explanation says that "If at least one of standard input or standard output
> are a terminal, then psql sets the client encoding to "auto",
> which will detect the appropriate client encoding from the locale settings
> (LC_CTYPE environment variable on Unix systems)".
> But according to the result from psql command, it seems that the appropriate
> client encoding is NOT detected  from the locale settings.
>
> The result of psql command is following.
>
> [Precondition of test]
>   - PostgreSQL VL:9.2.4
>   - Locale settings encoding : ja_JP.eucJP (LANG)

Not sure that it makes a difference but the docs say psql looks at
LC_CTYPE not LANG for Unix systems. You did not say what OS you are
working on though from the examples I am guessing some form of Unix.

>   - Client encoding:UTF8
>   - client_encoding(paramater of postgresql.conf) : None specified
>   - "test.txt" is psql's input file which is written "\encoding".
>
> [Result]
>   1) In case both standard input and standard output are a terminal
>    $ psql postgres -f test.txt -o result.txt
>    EUC_JP
>      → Locale setting encoding
>
>   2) In case only standard input is a terminal
>    $ psql postgres -f test.txt > result.txt
>    $ cat result.txt
>    UTF8
>      →Client encoding
>
>   3) In case only standard output is a terminal
>    $ psql postgres -o result.txt < test.txt
>    UTF8
>      →Client encoding
>
>   4) In case both standard input and standard output are not a terminal
>    $ psql postgres < test.txt > result.txt
>    $ cat result.txt
>    UTF8
>      →Client encoding
>
> 1) and 4) performed just as manual, but 2) and 3) do not.
> If 2) and 3) performed just as munual, I think that their encoding should be EUC_JP
> that is locale setting encoding.
>
> If manual has mistake, I think that correct explanation is following.
>
> "If BOTH standard input AND standard output are a terminal, then psql sets
> the client encoding to "auto", which will detect the appropriate client encoding
> from the locale settings (LC_CTYPE environment variable on Unix systems)."
>
> What do you think?
>
> Warmest Regards.
>
>
>
>
>
>
>


--
Adrian Klaver
adrian.klaver@gmail.com


pgsql-general by date:

Previous
From: mephysto
Date:
Subject: Re: Temporary table already exists
Next
From: Adrian Klaver
Date:
Subject: Re: Temporary table already exists