postgres.git / summary / log / commit / refs

commit    efd885d05b8beded386fbb5a9d737dc9e65289a9
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Mon Jun 08 05:37:57 2026 +0000
First released in: 14.24, 15.19, 16.15, 17.11, 18.6

    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


src/fe_utils/print.c | 7 ++++--- src/test/regress/expected/psql.out | 26 ++++++++++++++++++++++++++ src/test/regress/sql/psql.sql | 11 +++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/fe_utils/print.c b/src/fe_utils/print.c index d6c4d78f981..92b5df74523 100644 --- a/src/fe_utils/print.c +++ b/src/fe_utils/print.c @@ -1458,9 +1458,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, @@ -1532,7 +1533,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; diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 7e39eef6ec0..499394cbe24 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -2723,6 +2723,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) diff --git a/src/test/regress/sql/psql.sql b/src/test/regress/sql/psql.sql index f8ad7af5a3a..e4b09ac76e3 100644 --- a/src/test/regress/sql/psql.sql +++ b/src/test/regress/sql/psql.sql @@ -446,6 +446,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 [parent: 4801610f7c66]