psql: Fix expanded aligned output

When a table's columns are narrower than the record header line, the
expanded aligned format produced misaligned output because the data
column width was not adjusted to match the record header width, leading
to output like:
+-[ RECORD 1 ]-+
| a | 10 |
| b | 20 |
+---+----+

This commit adjusts the output so as the column width match with the
header line, giving:
+-[ RECORD 1 ]-+
| a | 10       |
| b | 20       |
+---+----------+

Author: Pavel Stehule <pavel.stehule@gmail.com>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://postgr.es/m/CAFj8pRCzGpsr9zTHbtTd4mGh2YPJqOEgLgt8JLiopuYA9_1xGw@mail.gmail.com
Backpatch-through: 14
This commit is contained in:
Michael Paquier 2026-06-08 14:37:51 +09:00
parent 75dcc63dac
commit 3d0d6741d8
3 changed files with 41 additions and 3 deletions

View file

@ -1443,9 +1443,10 @@ print_aligned_vertical(const printTableContent *cont,
}
/*
* Calculate available width for data in wrapped mode
* Determine data column width: fit output width in wrapped mode, or
* ensure alignment with the record header line in aligned mode.
*/
if (cont->opt->format == PRINT_WRAPPED)
if (cont->opt->format == PRINT_WRAPPED || cont->opt->format == PRINT_ALIGNED)
{
unsigned int swidth,
rwidth = 0,
@ -1517,7 +1518,7 @@ print_aligned_vertical(const printTableContent *cont,
if (width < rwidth)
width = rwidth;
if (output_columns > 0)
if (cont->opt->format == PRINT_WRAPPED && output_columns > 0)
{
unsigned int min_width;

View file

@ -2854,6 +2854,32 @@ execute q;
+------------------+-------------------+
deallocate q;
-- expanded output with short-width columns
\pset border 2
\pset expanded on
create table psql_short_tab(a int, b int);
insert into psql_short_tab values(10,20),(30,40);
\pset format aligned
select * from psql_short_tab;
+-[ RECORD 1 ]-+
| a | 10 |
| b | 20 |
+-[ RECORD 2 ]-+
| a | 30 |
| b | 40 |
+---+----------+
\pset format wrapped
select * from psql_short_tab;
+-[ RECORD 1 ]-+
| a | 10 |
| b | 20 |
+-[ RECORD 2 ]-+
| a | 30 |
| b | 40 |
+---+----------+
drop table psql_short_tab;
\pset linestyle ascii
\pset border 1
-- support table for output-format tests (useful to create a footer)

View file

@ -499,6 +499,17 @@ execute q;
deallocate q;
-- expanded output with short-width columns
\pset border 2
\pset expanded on
create table psql_short_tab(a int, b int);
insert into psql_short_tab values(10,20),(30,40);
\pset format aligned
select * from psql_short_tab;
\pset format wrapped
select * from psql_short_tab;
drop table psql_short_tab;
\pset linestyle ascii
\pset border 1