Re: Add \pset options for boolean value display

a.kozhemyakin <a.kozhemyakin@postgrespro.ru>

From: "a.kozhemyakin" <a.kozhemyakin@postgrespro.ru>
To: pgsql-hackers@lists.postgresql.org
Date: 2026-04-21T06:10:07Z
Lists: pgsql-hackers
Hi Hackers,

The following script, when built with addresssanitizer, fails with a 
DoubleFree error. reproduce on master (d3bba0415435)

psql postgres <<EOF
\pset display_false 'f'
SELECT 1 as one, 2 as two \g (display_false=csv csv_fieldsep='\t')
\pset display_false 'f'
EOF
Boolean false display is "f".
one | two
-----+-----
1 | 2
(1 строка)

=================================================================
==2263488==ERROR: AddressSanitizer: attempting double-free on 
0x774e419e15d0 in thread T0:
     #0 0x64c15cb777ab in free.part.0 
(/pgpro/builds/master/inst_asan/bin/psql+0x23e7ab) (BuildId: 
235e8c12978fc34235af5b00bd4a2feaab9cb794)
     #1 0x64c15cbedfbd in do_pset 
/pgpro/postgres/src/bin/psql/command.c:5310
     #2 0x64c15cbef308 in exec_command_pset 
/pgpro/postgres/src/bin/psql/command.c:2737
     #3 0x64c15cbf10d3 in exec_command 
/pgpro/postgres/src/bin/psql/command.c:431
     #4 0x64c15cbf1579 in HandleSlashCmds 
/pgpro/postgres/src/bin/psql/command.c:258
     #5 0x64c15cc25ecd in MainLoop 
/pgpro/postgres/src/bin/psql/mainloop.c:496
     #6 0x64c15cbec791 in process_file 
/pgpro/postgres/src/bin/psql/command.c:4977
     #7 0x64c15cc48cda in main /pgpro/postgres/src/bin/psql/startup.c:424
     #8 0x7b2e4322a574 in __libc_start_call_main 
../sysdeps/nptl/libc_start_call_main.h:58
     #9 0x7b2e4322a627 in __libc_start_main_impl ../csu/libc-start.c:360
     #10 0x64c15ca91b84 in _start 
(/pgpro/builds/master/inst_asan/bin/psql+0x158b84) (BuildId: 
235e8c12978fc34235af5b00bd4a2feaab9cb794)

0x774e419e15d0 is located 0 bytes inside of 2-byte region 
[0x774e419e15d0,0x774e419e15d2)
freed by thread T0 here:
     #0 0x64c15cb777ab in free.part.0 
(/pgpro/builds/master/inst_asan/bin/psql+0x23e7ab) (BuildId: 
235e8c12978fc34235af5b00bd4a2feaab9cb794)
     #1 0x64c15cbedfbd in do_pset 
/pgpro/postgres/src/bin/psql/command.c:5310
     #2 0x783e419e2980  (<unknown module>)

previously allocated by thread T0 here:
     #0 0x64c15cb725c8 in strdup 
(/pgpro/builds/master/inst_asan/bin/psql+0x2395c8) (BuildId: 
235e8c12978fc34235af5b00bd4a2feaab9cb794)
     #1 0x64c15cc92bd5 in pg_strdup 
/pgpro/postgres/src/common/fe_memutils.c:95

SUMMARY: AddressSanitizer: double-free 
(/pgpro/builds/master/inst_asan/bin/psql+0x23e7ab) (BuildId: 
235e8c12978fc34235af5b00bd4a2feaab9cb794) in free.part.0
==2263488==ABORTING

645cb44c5490f70da4dca57b8ecca6562fb883a7 is the first bad commit

gcc --version
gcc (Ubuntu 15.2.0-4ubuntu4) 15.2.0

building CPPFLAGS="-Og -fsanitize=address -fsanitize=undefined 
-fno-sanitize-recover=all -fno-sanitize=nonnull-attribute 
-fstack-protector" LDFLAGS='-fsanitize=address -fsanitize=undefined 
-static-libasan' \
./configure --prefix /pgpro/builds/master_simple && make world-bin -s 
-j$(nproc) && make install-world-bin -s

04.11.2025 00:16, David G. Johnston пишет:
> On Monday, November 3, 2025, Álvaro Herrera <alvherre@kurilemu.de> wrote:
>
>     On 2025-Oct-21, Álvaro Herrera wrote:
>     > On 2025-Oct-20, David G. Johnston wrote:
>     > > Thank you.  Seems good from a quick read.  I’m regretting the
>     choice of the
>     > > display_ prefix; is there any technical limitation or other
>     opposition to
>     > > using just true and false?
>     > >
>     > > \pset true ‘true’
>     > > \pset false ‘false’
>
>     > Uhm.  I don't know.  [...]  I'll gladly take a vote.
>
>     I got zero votes and lots of digression, so I have pushed with your
>     original choice of "display_true" and "display_false".  The "true" and
>     "false" variable names sound too generic and I think they're more
>     likely
>     to cause confusion.  I think "null" is not a great name either,
>     but it's
>     been there since forever so I'm not going to propose changing it.
>
>
> Thank you.
>
> David J.
>

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. psql: save/restore truePrint/falsePrint printQueryOpt values

  2. Add \pset options for boolean value display