I wonder if "hanging" actually means that it interpreted the sleep time as a very large integer, so it's just sleeping for a long time.
There is some interaction with pspg in stream mode
The probable scenario
It is starting pspg due to my setting PSQL_WATCH_PAGER. pspg is waiting on quit command, or on pipe ending. Quit command cannot to come because it is not on tty, so it is dead lock
I can write to safeguard the fast ending on pspg when it is in stream mode, and tty is not available.
And generally, the root perl should to reset PSQL_WATCH_PAGER env variable before executing psql. Probably it does with PSQL_PAGER, and maybe with PAGER.
with last change in pspg, this tests fails as "expected"
aster/src/bin/psql/../../../src/test/regress/pg_regress' /usr/bin/prove -I ../../../src/test/perl/ -I . t/*.pl # +++ tap check in src/bin/psql +++ t/001_basic.pl ........... 59/? # Failed test '\watch with 3 iterations: no stderr' # at t/001_basic.pl line 356. # got: 'stream mode can be used only in interactive mode (tty is not available)' # expected: ''
# Failed test '\watch with 3 iterations: matches' # at t/001_basic.pl line 356. # '' # doesn't match '(?^l:1\n1\n1)' # Looks like you failed 2 tests of 80. t/001_basic.pl ........... Dubious, test returned 2 (wstat 512, 0x200) Failed 2/80 subtests t/010_tab_completion.pl .. ok t/020_cancel.pl .......... ok
About the server locale, note that the ->new() call explicitly requests the C locale -- it's only psql that is using the Czech locale. Supposedly, the Perl code should also be using the Czech locale, so the sprintf('%g') should be consistent with what psql \watch expects. However, you cannot ask the server to be consistent with that -- say, if you hypothetically tried to use "to_char(9D99)" and \gset that to use as \watch argument, it wouldn't work, because that'd use the server's C locale, not Czech. (I know because I tried.)
-- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "Puedes vivir sólo una vez, pero si lo haces bien, una vez es suficiente"