Re: pgsql: psql: add an optional execution-count limit to \watch.
От | Tom Lane |
---|---|
Тема | Re: pgsql: psql: add an optional execution-count limit to \watch. |
Дата | |
Msg-id | 4076950.1681139381@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: pgsql: psql: add an optional execution-count limit to \watch. (Aleksander Alekseev <aleksander@timescale.com>) |
Ответы |
Re: pgsql: psql: add an optional execution-count limit to \watch.
|
Список | pgsql-committers |
Aleksander Alekseev <aleksander@timescale.com> writes: >> Hmm, so psql is honoring the LC_NUMERIC setting in that environment, >> but perl isn't. For me, it appears that adding 'use locale;' to >> the test script will fix it ... can you confirm if it's OK for you? > Right, src/bin/psql/t/001_basic.pl has "use locale;" since cd82e5c7 > and it fails nevertheless. > ... > So it looks like what happens is LC_ALL overwrites LC_NUMERIC for perl > but not for psql. Oh, right, there already is one :-(. After some more research, I believe I see the problem: Utils.pm does BEGIN { # Set to untranslated messages, to be able to compare program output # with expected strings. delete $ENV{LANGUAGE}; delete $ENV{LC_ALL}; $ENV{LC_MESSAGES} = 'C'; Normally, with your settings, LC_ALL=en_US.UTF-8 would dominate everything. After removing that from the environment, the child psql process will honor LC_NUMERIC=ru_RU.UTF-8 and expect \watch's argument to be "0,01". However, I bet that perl has already made its decisions about what its internal locale is, so it still thinks it should print "0.01". I am betting that we need to make Utils.pm do setlocale(LC_ALL, ""); after the above-quoted bit, else it isn't doing what it is supposed to if the calling script has already done "use locale;", as indeed psql/t/001_basic.pl (and a small number of other places) do. The attached makes check-world pass for me under these conflicting environment settings, but it's kind of a scary change. Thoughts? regards, tom lane diff --git a/src/test/perl/PostgreSQL/Test/Utils.pm b/src/test/perl/PostgreSQL/Test/Utils.pm index 878e12b15e..4c6cde8974 100644 --- a/src/test/perl/PostgreSQL/Test/Utils.pm +++ b/src/test/perl/PostgreSQL/Test/Utils.pm @@ -43,6 +43,7 @@ package PostgreSQL::Test::Utils; use strict; use warnings; +use locale; use Carp; use Config; @@ -55,6 +56,7 @@ use File::Spec; use File::stat qw(stat); use File::Temp (); use IPC::Run; +use POSIX qw(locale_h); use PostgreSQL::Test::SimpleTee; # We need a version of Test::More recent enough to support subtests @@ -102,6 +104,7 @@ BEGIN delete $ENV{LANGUAGE}; delete $ENV{LC_ALL}; $ENV{LC_MESSAGES} = 'C'; + setlocale(LC_ALL, ""); # This list should be kept in sync with pg_regress.c. my @envkeys = qw (
В списке pgsql-committers по дате отправления: