Re: 001_password.pl fails with --without-readline

Oleg Tselebrovskiy <o.tselebrovskiy@postgrespro.ru>

From: Oleg Tselebrovskiy <o.tselebrovskiy@postgrespro.ru>
To: Soumya S Murali <soumyamurali.work@gmail.com>
Cc: pgsql-hackers@postgresql.org
Date: 2026-01-14T10:11:11Z
Lists: pgsql-hackers

Attachments

The easiest way to fix 030_pager.pl is to just replace ' ' with '*'
in regex. With readline, everything that we look for is placed on
its own line so we don't break anything, but --without-readline
produces the following output (with some hand-written debug info):

	IPC::Run 0000 [#2(438962)]: ** pumping
	IPC::Run 0000 [#2(438962)]: read( 11 ) = 4 chars '39
	IPC::Run 0000 [#2(438962)]: '

	stream:postgres=# \pset expanded
	SELECT generate_series(1,20) as g;
	Expanded display is on.
	postgres=# 39

So the output that is turned on with IPCRUNDEBUG=data shows us "we got
only 4 chars, '39\n\0'!", but in reality we have more stuff in stream,
so pump_until() function doesn't match with passed regex

Patch is attached

Regards,
Oleg

Commits

  1. Make psql/t/030_pager.pl more robust.

  2. Improve guards against false regex matches in BackgroundPsql.pm.

  3. Fix unsafe pushdown of quals referencing grouping Vars

  4. tests: BackgroundPsql: Fix potential for lost errors on windows