Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4lBI-002Ws1-1T for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 19:43:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4lBF-001s7D-36 for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 19:43:18 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4lBF-001s75-1q for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 19:43:18 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4lBD-00000000kcC-03rk for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 19:43:17 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-7986e0553bdso6564667b3.2 for ; Mon, 23 Mar 2026 12:43:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774294993; cv=none; d=google.com; s=arc-20240605; b=UcpXypZYZF0YsNv+nfA73dl/qYysbhUIdpdBopQhdGhou2DhpwjyYPcspbqvgrrdxZ CYBe0W9a4mvNm7bzGnQl6+yNJ0M7/4avYXPR1FueWv+dPNL6ki6j7qFKCETGgfNptA7j jY1G6B9K6qc7gs42RltQbfgpZdyC06EMAOlGftJuZYhNPLds5y/GhU8XlSL/MPw1sAV6 uEdwi2HhXgknjyjBCBPNKYfmwQhAsSCna5hw+XxKBCFJynW+2acSAdnS9V+aOzsZlADL Wf91EY6s6SRm2+7l6Z/R+IRQSvV/4y5ZZldlxv52D8ruXyX2yvQi1ga94ekeUtw4vXIE WnIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=DwbOzX7AKfveu0BODcBZsWIE3SbG7utHu2zXaUKDQPY=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=EjyQE6WOlZldMwVxuKWtEMwvE5VG790ME5rX1LWn2zhJN9ySFSvtx1ehx1sHWzsP3V 6s1wJ3JixBCV5zqHE1duWisq7og8r5bO208ru2X54IzKzM3PfDqcRtr8NMpSydyhY9pf vhKvb+y2bSBCLBPI8w4e4y8nq8nyq1b/aQ+l909Q/KYYPr1JJnSk4P9JCjba8g51OR04 V7O+Ua4SCleKcG+VEXHBvnML0BklvUpc4Gkc5mPV7YKyP+GwAp9IGwOxkgk4MqQ9W1Jc djU4myfRHXAkBW129EZawJtRapc00Q7/DwkpIgv8KRcSPtQjKA7KDLNio2w7jABdfXm8 Aj9w==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774294993; x=1774899793; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=DwbOzX7AKfveu0BODcBZsWIE3SbG7utHu2zXaUKDQPY=; b=S6H4ewpJhcgZUFTXNBQ1DUrZyaitE4HIZGfM6SkFvoTa311oOstTT2sRTWrLM6CZSq yNRXZb7KN6h77AfSFoo9UftJj72bo7O++vonz1qgacPBLgOuFl6KVwkewH9plUll6f+M LG4J7hAGBdlvhP0ZCzh76T2YCax0BE+wBwtGVhmWVJiNPq/CgYvWlIV6twlinUIHtm0a J6d3oBdQTMdu2pEuWDoq+A8JemlfN2JRD8lUkg7KsiM+KYDCadgLnTOBxb0cjdOI9srC pr6t9YQIUsqC1WIF1Hcw3Qu0s6PsqOnxfMVzTIp8fWpXd1ZnV3xRqvrqoATa2NDBWUpO 1nPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774294993; x=1774899793; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=DwbOzX7AKfveu0BODcBZsWIE3SbG7utHu2zXaUKDQPY=; b=EMrkLphbjVoduKXvK3+gJ/vQLD5c1PYembHSEY/o3dDn7FS309U+xRkGvW9NfxUyDN EJJwFVDJ4BxmlP9o2AopNuIyMm5d/ysyyLxB2eEYq6z0YGkHtVp6+IPgnn0LBbjEzYPA lC7l1MUgy0aRN+iwbyIoVKmAX8EtWVsLZU7mTWmWSdS2vHAs97w16ZvKVVrplZgC7qGy ovESR2rIBPoPjO5ycki5dPt2a8pqWVqMi1o05kiOfTa3AFsj/dDQa2jSfUFvKQRYReCI CalvgXZLbUuVnWqTFi8MTzrX2KkoFh/nXO3DxldjxY0vdufsLkwkhW6OxYW9vZ5DkIdR 4/SQ== X-Gm-Message-State: AOJu0YxFPMYLaE1DeOmCmsPQ4gaOAolBwaS2GBwrcCtAQsTPgQIe4oIm ZfpmGX+6ueRUt1w160oBc+eHdV/f7yj7a3R4EMx6tXDHs+dQvapjLV/0DcppsFDg/FelzY8lXwy u8Qqfnaz228qynEx8CjvoD5+A4Ab7QUX2Khvq X-Gm-Gg: ATEYQzzZv7KE1WWR/5OSTfiEmrc/UeL012pnqWYlgK/crY7FroKik0uD+3oFU5mM3cs H5/eJO77I76TDaI1bV1vJjPiDDvsz4+J+JZvw45VZ9gZDsY4YyYO8BZlhHDhVOEAJAulm4udCnl XSGUynOhWe97ZKH68CZXy7m8iLItkvTRbvX4DqN08sa4pDXgbW/1CBhX/xjl1REEp6j7qTkXXjR UPNhFWdq35wgIe0EsXVESQ9aILLJMxKjvT5jUgXfBjDEO/s128gny3RGCnVX3GOruURt7y4poI9 HghCFJMJKUIxjzJYypyCJzdJGisR/d+Xk885Qoi6hNoVUIFpGe69QhaFwmXh8d17b6FA2HS5u+E hkkK0/7mrpZgplNFBDaIWGFEPmuYU3kqeutX1qC6DgnP914gtdw814wb4uw== X-Received: by 2002:a05:690c:c508:b0:79a:b46c:e621 with SMTP id 00721157ae682-79ab46cf348mr53890407b3.2.1774294993227; Mon, 23 Mar 2026 12:43:13 -0700 (PDT) MIME-Version: 1.0 From: Pavel Stehule Date: Mon, 23 Mar 2026 20:42:35 +0100 X-Gm-Features: AaiRm52BnceFAsp1bMgVfime7s9LSut97lH1yUaVHCup0rmuaLSMwJh7g6qp2lw Message-ID: Subject: bugfix - fix broken output in expanded aligned format, when data are too short To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ccb20d064db63e45" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ccb20d064db63e45 Content-Type: multipart/alternative; boundary="000000000000ccb20b064db63e43" --000000000000ccb20b064db63e43 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi There is a bug in fe_utils (2026-03-23 20:36:21) postgres=3D# \pset border 2 columns 0 csv_fieldsep ',' display_false 'f' display_true 't' expanded on fieldsep '|' fieldsep_zero off footer on format aligned linestyle unicode null '=E2=88=85' numericlocale off pager 1 pager_min_lines 0 recordsep '\n' recordsep_zero off tableattr title tuples_only off unicode_border_linestyle single unicode_column_linestyle single unicode_header_linestyle double xheader_width full (2026-03-23 20:36:56) postgres=3D# select * from foo; kuku =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=90 =E2=94=82 a =E2=94=82 b =E2=94=82 =E2=95=9E=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=AA=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=A1 =E2=94=82 10 =E2=94=82 20 =E2=94=82 =E2=94=82 10 =E2=94=82 20 =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=98 (2 rows) (2026-03-23 20:36:58) postgres=3D# \x Expanded display is on. (2026-03-23 20:37:01) postgres=3D# select * from foo; =E2=94=8C=E2=94=80[ RECORD 1 ]=E2=94=80=E2=94=90 =E2=94=82 a =E2=94=82 10 =E2=94=82 =E2=94=82 b =E2=94=82 20 =E2=94=82 =E2=95=9E=E2=95=90[ RECORD 2 ]=E2=95=90=E2=95=A1 =E2=94=82 a =E2=94=82 10 =E2=94=82 =E2=94=82 b =E2=94=82 20 =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=98 the bugfix is really short pavel@nemesis:~/src/postgresql$ git diff master diff --git a/src/fe_utils/print.c b/src/fe_utils/print.c index 12d969e8666..58a04a902d5 100644 --- a/src/fe_utils/print.c +++ b/src/fe_utils/print.c @@ -1445,7 +1445,7 @@ print_aligned_vertical(const printTableContent *cont, /* * Calculate available width for data in wrapped mode */ - if (cont->opt->format =3D=3D PRINT_WRAPPED) + if (cont->opt->format =3D=3D PRINT_WRAPPED || cont->opt->format =3D=3D PRINT_ALIGNED) { unsigned int swidth, rwidth =3D 0, after fix: (2026-03-23 20:40:11) postgres=3D# \x Expanded display is on. (2026-03-23 20:40:13) postgres=3D# select * from foo; =E2=94=8C=E2=94=80[ RECORD 1 ]=E2=94=80=E2=94=90 =E2=94=82 a =E2=94=82 10 =E2=94=82 =E2=94=82 b =E2=94=82 20 =E2=94=82 =E2=95=9E=E2=95=90[ RECORD 2 ]=E2=95=90=E2=95=A1 =E2=94=82 a =E2=94=82 10 =E2=94=82 =E2=94=82 b =E2=94=82 20 =E2=94=82 =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 Regards Pavel --000000000000ccb20b064db63e43 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5IaTwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlcmUgaXMg YSBidWcgaW4gZmVfdXRpbHM8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PigyMDI2LTAzLTIzIDIw OjM2OjIxKSBwb3N0Z3Jlcz0jIFxwc2V0IDxicj5ib3JkZXIgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgMjxicj5jb2x1bW5zIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgMDxicj5jc3ZfZmll bGRzZXAgwqAgwqAgwqAgwqAgwqAgwqAgJiMzOTssJiMzOTs8YnI+ZGlzcGxheV9mYWxzZSDCoCDC oCDCoCDCoCDCoCDCoCYjMzk7ZiYjMzk7PGJyPmRpc3BsYXlfdHJ1ZSDCoCDCoCDCoCDCoCDCoCDC oCAmIzM5O3QmIzM5Ozxicj5leHBhbmRlZCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvbjxicj5m aWVsZHNlcCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmIzM5O3wmIzM5Ozxicj5maWVsZHNlcF96 ZXJvIMKgIMKgIMKgIMKgIMKgIMKgb2ZmPGJyPmZvb3RlciDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBvbjxicj5mb3JtYXQgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWxpZ25lZDxicj5s aW5lc3R5bGUgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB1bmljb2RlPGJyPm51bGwgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgJiMzOTviiIUmIzM5Ozxicj5udW1lcmljbG9jYWxlIMKgIMKg IMKgIMKgIMKgIMKgb2ZmPGJyPnBhZ2VyIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgMTxi cj5wYWdlcl9taW5fbGluZXMgwqAgwqAgwqAgwqAgwqAwPGJyPnJlY29yZHNlcCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCYjMzk7XG4mIzM5Ozxicj5yZWNvcmRzZXBfemVybyDCoCDCoCDCoCDCoCDC oCBvZmY8YnI+dGFibGVhdHRyIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgPGJyPnRpdGxlIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgPGJyPnR1cGxlc19vbmx5IMKgIMKgIMKgIMKgIMKgIMKg IMKgb2ZmPGJyPnVuaWNvZGVfYm9yZGVyX2xpbmVzdHlsZSBzaW5nbGU8YnI+dW5pY29kZV9jb2x1 bW5fbGluZXN0eWxlIHNpbmdsZTxicj51bmljb2RlX2hlYWRlcl9saW5lc3R5bGUgZG91YmxlPGJy PnhoZWFkZXJfd2lkdGggwqAgwqAgwqAgwqAgwqAgwqBmdWxsPGJyPjxicj48L2Rpdj48ZGl2Pjxz cGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPigyMDI2LTAzLTIzIDIwOjM2OjU2KSBw b3N0Z3Jlcz0jIHNlbGVjdCAqIGZyb20gZm9vOzxicj5rdWt1PGJyPuKUjOKUgOKUgOKUgOKUgOKU rOKUgOKUgOKUgOKUgOKUkDxicj7ilIIgYSDCoOKUgiBiIMKg4pSCPGJyPuKVnuKVkOKVkOKVkOKV kOKVquKVkOKVkOKVkOKVkOKVoTxicj7ilIIgMTAg4pSCIDIwIOKUgjxicj7ilIIgMTAg4pSCIDIw IOKUgjxicj7ilJTilIDilIDilIDilIDilLTilIDilIDilIDilIDilJg8YnI+KDIgcm93cyk8YnI+ PGJyPigyMDI2LTAzLTIzIDIwOjM2OjU4KSBwb3N0Z3Jlcz0jIFx4PGJyPkV4cGFuZGVkIGRpc3Bs YXkgaXMgb24uPGJyPigyMDI2LTAzLTIzIDIwOjM3OjAxKSBwb3N0Z3Jlcz0jIHNlbGVjdCAqIGZy b20gZm9vOzxicj7ilIzilIBbIFJFQ09SRCAxIF3ilIDilJA8YnI+4pSCIGEg4pSCIDEwIOKUgjxi cj7ilIIgYiDilIIgMjAg4pSCPGJyPuKVnuKVkFsgUkVDT1JEIDIgXeKVkOKVoTxicj7ilIIgYSDi lIIgMTAg4pSCPGJyPuKUgiBiIOKUgiAyMCDilII8YnI+4pSU4pSA4pSA4pSA4pS04pSA4pSA4pSA 4pSA4pSYPC9zcGFuPjxicj48YnI+PC9kaXY+PGRpdj50aGUgYnVnZml4IGlzIHJlYWxseSBzaG9y dDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+cGF2ZWxAbmVtZXNpczp+L3NyYy9wb3N0Z3Jlc3Fs JCBnaXQgZGlmZiBtYXN0ZXI8YnI+ZGlmZiAtLWdpdCBhL3NyYy9mZV91dGlscy9wcmludC5jIGIv c3JjL2ZlX3V0aWxzL3ByaW50LmM8YnI+aW5kZXggMTJkOTY5ZTg2NjYuLjU4YTA0YTkwMmQ1IDEw MDY0NDxicj4tLS0gYS9zcmMvZmVfdXRpbHMvcHJpbnQuYzxicj4rKysgYi9zcmMvZmVfdXRpbHMv cHJpbnQuYzxicj5AQCAtMTQ0NSw3ICsxNDQ1LDcgQEAgcHJpbnRfYWxpZ25lZF92ZXJ0aWNhbChj b25zdCBwcmludFRhYmxlQ29udGVudCAqY29udCw8YnI+wqAgwqAgLyo8YnI+wqAgwqAgwqAqIENh bGN1bGF0ZSBhdmFpbGFibGUgd2lkdGggZm9yIGRhdGEgaW4gd3JhcHBlZCBtb2RlPGJyPsKgIMKg IMKgKi88YnI+LSDCoCBpZiAoY29udC0mZ3Q7b3B0LSZndDtmb3JtYXQgPT0gUFJJTlRfV1JBUFBF RCk8YnI+KyDCoCBpZiAoY29udC0mZ3Q7b3B0LSZndDtmb3JtYXQgPT0gUFJJTlRfV1JBUFBFRCB8 fCBjb250LSZndDtvcHQtJmd0O2Zvcm1hdCA9PSBQUklOVF9BTElHTkVEKTxicj7CoCDCoCB7PGJy PsKgIMKgIMKgIMKgIHVuc2lnbmVkIGludCBzd2lkdGgsPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHJ3aWR0aCA9IDAsPGJyPjxicj48L2Rpdj48ZGl2PmFmdGVyIGZpeDo8L2Rpdj48 ZGl2Pjxicj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPigy MDI2LTAzLTIzIDIwOjQwOjExKSBwb3N0Z3Jlcz0jIFx4PGJyPkV4cGFuZGVkIGRpc3BsYXkgaXMg b24uPGJyPigyMDI2LTAzLTIzIDIwOjQwOjEzKSBwb3N0Z3Jlcz0jIHNlbGVjdCAqIGZyb20gZm9v Ozxicj7ilIzilIBbIFJFQ09SRCAxIF3ilIDilJA8YnI+4pSCIGEg4pSCIDEwIMKgIMKgIMKgIOKU gjxicj7ilIIgYiDilIIgMjAgwqAgwqAgwqAg4pSCPGJyPuKVnuKVkFsgUkVDT1JEIDIgXeKVkOKV oTxicj7ilIIgYSDilIIgMTAgwqAgwqAgwqAg4pSCPGJyPuKUgiBiIOKUgiAyMCDCoCDCoCDCoCDi lII8YnI+4pSU4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYPGJy Pjwvc3Bhbj48YnI+PC9kaXY+PGRpdj5SZWdhcmRzPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5Q YXZlbDwvZGl2PjxkaXY+PGJyPjwvZGl2PjwvZGl2Pg0K --000000000000ccb20b064db63e43-- --000000000000ccb20d064db63e45 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-fix-expended-aligned-format.patch" Content-Disposition: attachment; filename="0001-fix-expended-aligned-format.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3lb2v60 RnJvbSAxMzEyNjE2MjBmMzU5OTdiZTFjZjJiNDcyNjU3N2MyYzI4NDMzNWQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIzIE1hciAyMDI2IDIwOjM5OjMxICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gZml4IGV4cGVuZGVkIGFsaWduZWQgZm9ybWF0CgotLS0KIHNyYy9mZV91dGlscy9wcmlu dC5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0aWxzL3ByaW50LmMgYi9zcmMvZmVfdXRpbHMvcHJpbnQu YwppbmRleCAxMmQ5NjllODY2Ni4uNThhMDRhOTAyZDUgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGls cy9wcmludC5jCisrKyBiL3NyYy9mZV91dGlscy9wcmludC5jCkBAIC0xNDQ1LDcgKzE0NDUsNyBA QCBwcmludF9hbGlnbmVkX3ZlcnRpY2FsKGNvbnN0IHByaW50VGFibGVDb250ZW50ICpjb250LAog CS8qCiAJICogQ2FsY3VsYXRlIGF2YWlsYWJsZSB3aWR0aCBmb3IgZGF0YSBpbiB3cmFwcGVkIG1v ZGUKIAkgKi8KLQlpZiAoY29udC0+b3B0LT5mb3JtYXQgPT0gUFJJTlRfV1JBUFBFRCkKKwlpZiAo Y29udC0+b3B0LT5mb3JtYXQgPT0gUFJJTlRfV1JBUFBFRCB8fCBjb250LT5vcHQtPmZvcm1hdCA9 PSBQUklOVF9BTElHTkVEKQogCXsKIAkJdW5zaWduZWQgaW50IHN3aWR0aCwKIAkJCQkJcndpZHRo ID0gMCwKLS0gCjIuNTMuMAoK --000000000000ccb20d064db63e45--