[CC'ed -hackers]
Tsubasa Sakamoto wrote:
>> 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.
> The LC_CTYPE environment variable was set up and re-verified.
> The result of psql command is following.
>
> [Result]
> % setenv LC_CTYPE ja_JP.eucJP
>
> % psql postgres -f test.txt -o result.txt EUC_JP
>
> % psql postgres -f test.txt > result.txt
> UTF8
>
> % psql postgres -o result.txt < test.txt
> UTF8
>
> % psql postgres < test.txt > result.txt
> UTF8
>
> Even when a LC_CTYPE environment variable was set up, the result did not change.
> What do you think?
I think that the documentation contradicts the code.
In bin/psql/settings.h:
typedef struct _psqlSettings
{
[...]
bool notty; /* stdin or stdout is not a tty (as determined
* on startup) */
[...]
} PsqlSettings;
extern PsqlSettings pset;
In bin/psql/command.c and bin/psql/startup.c:
keywords[6] = "client_encoding";
values[6] = (pset.notty || getenv("PGCLIENTENCODING")) ? NULL : "auto";
That matches your observations: client_encoding=auto is only
used if both stdin and stdout are attached to a tty.
I suggest the attached documentation fix.
Yours,
Laurenz Albe