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 1wHG0e-0070BR-19 for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Apr 2026 07:04:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wHFzd-00CX2v-1r for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Apr 2026 07:02:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wHFzc-00CX2n-38 for pgsql-hackers@lists.postgresql.org; Mon, 27 Apr 2026 07:02:57 +0000 Received: from mail-yx1-xb12a.google.com ([2607:f8b0:4864:20::b12a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wHFzZ-00000002zO3-3bKI for pgsql-hackers@lists.postgresql.org; Mon, 27 Apr 2026 07:02:56 +0000 Received: by mail-yx1-xb12a.google.com with SMTP id 956f58d0204a3-651c366f7efso9902021d50.1 for ; Mon, 27 Apr 2026 00:02:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777273372; cv=none; d=google.com; s=arc-20240605; b=hbWcm+Ta4X6cYBgVMLmGiR4yRUBh3pGLsWLPmPUpZzcVJb5Nxpyw67WCcQiSbHxsjJ hjfwaaP71wX4MKruNgKe70otNRjvOni6hd7ZmtOf+nV0+5q5PnZ6sv0ORhNXsFKmO+1H wO9rAbC9rmM3KatKnSabK8bfMCS7LK52CbkDKqTMNRBoSRRF6+hzxIHUtZgsIe57JLaB 5BGZ1KTiFC/39Stp16dXc6DxEpjNJgKcyHDuQ/rDWSi2RXaxZHHwCkF7sIget+Hs5O+5 MFft0zCT6+8/9DJhnnLSKLZPhCQx/L2PmfOYeotriGAQSPaVJjdScO+3FxmVsUwwgdfe 77fg== 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=J/eg/+anvYCYFtE5zec99qyrF97BlI7nS9ztsLmRIQQ=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=dKa76sdtIoC+i8UaWc7sTCherEttEQ5BWbTLpdNyo4A6m043JOZb94ML6AUc0XMnaJ dTPcNamCYhU3R60mzTH5aF4ilhZuK11Tn5WxZcevBuNOLXWmMCX1+KbsW/felP7VvWMQ hUKYEok6UmDfpGugHGPZB7NwknyHLnQGohlzsh0+llu9uyBOwyeazsjqQiMacuiU5ZNq fWjaHcGQNkyF5PIDuCuioDwhM/Mkprmg7sUeVR7muSaD2nfxqXOlYUUsZCXtN2vHEhk8 UunsY/KUDTxQR/DO0opkXczYfmq5Ns9fh7tJRVi0iDUZJ6PtRgFyP6+i0iNZxyTCA30f da8g==; 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=1777273372; x=1777878172; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=J/eg/+anvYCYFtE5zec99qyrF97BlI7nS9ztsLmRIQQ=; b=sD0G5LJWnEIsHkrlmUVNYYMUf1Dmkn2EMh1UYCYxM/SPes0/NkZiMtXngo7j4UJ/qZ S97mcbjCU6CX4ZWvCieB1ZLNUDfrBlXi91BsS4JGbuwCLpOQYgFzKknOqmX8Lm3WkT83 CcCat0IngjLmknkwVE7v5h2xgRFnu6U4oyzVdRP9ABX/m3GgFLN+9RlDrYosPGkh3N83 U3dcaboLWFYrNqlLEOQDzLs4V3hkZSp/Eu5suUeEPYvM/MvBVt0qH3BE44eS/8BV2SML L/cTvhKxjWGiiIjrJfq5WUPkdVp3t1j+5HG8enMLBCmNPEoBsKLGA8vDF0rbCwy5Jklg XI5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777273372; x=1777878172; 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=J/eg/+anvYCYFtE5zec99qyrF97BlI7nS9ztsLmRIQQ=; b=VhuiIv1b4UYuxCwcta+KqLwnPSAgA9FLKR7S0Jbm9gKSh0yQpcn2eJxkOcCe16aX4e bqsTuICin+gwVoS2Iyw6ju68fTIf4Mi12NfFfm58WxGLCEelsLNFmsW+sqSN/hyoKKui LJhNRsmeLQlhxD5LDCkx+H9zuHAKZVRy2QVSMNpDW/Zb5/i2UnBr+ASjNKD47oXig7JT Q9TJv62MywY15wjP85S220FgZT4AeG2z1QCu+YKW66bSMzYRG0E0ffTVpn8mW0xR7H0X WWehmFp2uqfFLkKn0lAnziI2taxOS2jg7tyPP1LpNabsAb/NkHyErXTXB8hPcLhb1awr keHQ== X-Gm-Message-State: AOJu0YyQETEnbIHuqnRB3kzKQ7lNcfOUz2UIoabzup/+AJ8k6Gk5oYvg z6wmD6T+ZDWsgT4f/QbjjqxpM2Jodlg/Am9BU26xe8b4V6fALGHrdYeKVbE26mtEpwje87TZ5Uc GWhhf/gRtInwVDb66y24v4VMEEn0OyA+nnd7E X-Gm-Gg: AeBDietIPF9nGPPjHtMaS+gs2Q0IhnrsVsBeOcLtapcJJIINnnY69C94jKonr2C5A+m KMEutjeQ5BE3LAxruL10i+tYz/sRQ2CMsPsTYhwWRC9Kbd01dpr0x5/+0Cr2WYn+SEXgkZ5aWDH MQAb40UtVRHkTsrewnKxBCktZsFKRqp8W+RN0SkzurENiVwjzHsg8YSQPG3BFo8prjzZ/57/XD/ XvbbwMR7YLJVy942LflcI0Dihz/b8y+mXlsvAHL5gVWzdz2G26840/n8fgxW7VjhKeeeHc7xL8A c3iYBUKBwdMQlciefBAtdQst5J/PPHp0lWz8Xvu9Gg1mkKls96TpJaxCWqWHH/nhIiNt4bxfn/i fuMaNYOcYcRtkCnbFupHkyEc7Hyg1xEQzX0qAgzS5MsfEtPMACwSn98B/7LIN8xK1ibbY X-Received: by 2002:a05:690e:1348:b0:657:e42c:ed01 with SMTP id 956f58d0204a3-657e42cefbcmr7205542d50.50.1777273372321; Mon, 27 Apr 2026 00:02:52 -0700 (PDT) MIME-Version: 1.0 From: Pavel Stehule Date: Mon, 27 Apr 2026 09:02:16 +0200 X-Gm-Features: AVHnY4IpW1mFj2bTa6Hth4bne8JetBQZfUH7Vc2whPPM05bIreJD0xhBEBUyOMk Message-ID: Subject: proposal: refactoring vacuum verbose output To: PostgreSQL Hackers Content-Type: multipart/alternative; boundary="00000000000006ad8b06506bb497" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000006ad8b06506bb497 Content-Type: text/plain; charset="UTF-8" Hi I am working on a patch that tries to colourize some lines from VACUUM VERBOSE output. The main problem is inconsistent output from VACUUM, ANALYZE, REINDEX and REPACK. Can we introduce some new error levels, and new error fields that allows to write these reports more readable: Current output from REINDEX VERBOSE (2026-04-24 21:30:41) postgres=# reindex (verbose) table pg_class; INFO: index "pg_class_oid_index" was reindexed DETAIL: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s INFO: index "pg_class_relname_nsp_index" was reindexed DETAIL: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s INFO: index "pg_class_tblspc_relfilenode_index" was reindexed DETAIL: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s REINDEX Current output from VACUUM VERBOSE (2026-04-24 21:30:49) postgres=# vacuum verbose pg_proc; INFO: vacuuming "postgres.pg_catalog.pg_proc" INFO: finished vacuuming "postgres.pg_catalog.pg_proc": index scans: 0 pages: 0 removed, 101 remain, 1 scanned (0.99% of total), 0 eagerly scanned tuples: 0 removed, 3437 remain, 0 are dead but not yet removable removable cutoff: 702, which was 0 XIDs old when operation ended new relfrozenxid: 702, which is 1 XIDs ahead of previous value frozen: 0 pages from table (0.00% of total) had 0 tuples frozen visibility map: 0 pages set all-visible, 0 pages set all-frozen (0 were all-visible) index scan not needed: 0 pages from table (0.00% of total) had 0 dead item identifiers removed avg read rate: 0.000 MB/s, avg write rate: 12.440 MB/s buffer usage: 22 hits, 0 reads, 1 dirtied WAL usage: 1 records, 1 full page images, 5871 bytes, 5752 full page image bytes, 0 buffers full memory usage: dead item storage 0.02 MB accumulated across 0 resets (limit 64.00 MB each) system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s INFO: vacuuming "postgres.pg_toast.pg_toast_1255" INFO: finished vacuuming "postgres.pg_toast.pg_toast_1255": index scans: 0 pages: 0 removed, 2 remain, 2 scanned (100.00% of total), 0 eagerly scanned tuples: 0 removed, 7 remain, 0 are dead but not yet removable removable cutoff: 702, which was 0 XIDs old when operation ended new relfrozenxid: 702, which is 1 XIDs ahead of previous value frozen: 0 pages from table (0.00% of total) had 0 tuples frozen visibility map: 0 pages set all-visible, 0 pages set all-frozen (0 were all-visible) index scan not needed: 0 pages from table (0.00% of total) had 0 dead item identifiers removed avg read rate: 0.000 MB/s, avg write rate: 16.482 MB/s buffer usage: 43 hits, 0 reads, 1 dirtied WAL usage: 1 records, 1 full page images, 4255 bytes, 4136 full page image bytes, 0 buffers full memory usage: dead item storage 0.02 MB accumulated across 0 resets (limit 64.00 MB each) system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s VACUUM My proposal is introduction new three levels of INFO - INFO1, INFO2, and INFO3 INFO1 can be used for starting, finishing processing of primary object like tables INFO2 can be used for starting, finishing processing of depending objects like toast tables or partitions INFO3 can be used for starting, finishing processing of nested objects like indexes We can introduce new error field RESOURCES After change new verbose output can looks like: (2026-04-24 21:30:41) postgres=# reindex (verbose) table pg_class; INFO3: index "pg_class_oid_index" was reindexed RESOURCES: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s INFO3: index "pg_class_relname_nsp_index" was reindexed RESOURCES: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s INFO3: index "pg_class_tblspc_relfilenode_index" was reindexed RESOURCES: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s REINDEX (2026-04-24 21:30:49) postgres=# vacuum verbose pg_proc; *INFO1: vacuuming "postgres.pg_catalog.pg_proc"INFO1: finished vacuuming "postgres.pg_catalog.pg_proc"* DETAIL: index scans: 0, pages: 0 removed, 101 remain, 1 scanned (0.99% of total), 0 eagerly scanned tuples: 0 removed, 3437 remain, 0 are dead but not yet removable removable cutoff: 702, which was 0 XIDs old when operation ended new relfrozenxid: 702, which is 1 XIDs ahead of previous value frozen: 0 pages from table (0.00% of total) had 0 tuples frozen visibility map: 0 pages set all-visible, 0 pages set all-frozen (0 were all-visible) index scan not needed: 0 pages from table (0.00% of total) had 0 dead item identifiers removed RESOURCES: avg read rate: 0.000 MB/s, avg write rate: 12.440 MB/s, buffer usage: 22 hits, 0 reads, 1 dirtied WAL usage: 1 records, 1 full page images, 5871 bytes, 5752 full page image bytes, 0 buffers full memory usage: dead item storage 0.02 MB accumulated across 0 resets (limit 64.00 MB each) system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s *INFO2: vacuuming "postgres.pg_toast.pg_toast_* *1255"INFO2: finished vacuuming "postgres.pg_toast.pg_toast_**1255"* DETAIL: index scans: 0 pages: 0 removed, 2 remain, 2 scanned (100.00% of total), 0 eagerly scanned tuples: 0 removed, 7 remain, 0 are dead but not yet removable removable cutoff: 702, which was 0 XIDs old when operation ended new relfrozenxid: 702, which is 1 XIDs ahead of previous value frozen: 0 pages from table (0.00% of total) had 0 tuples frozen visibility map: 0 pages set all-visible, 0 pages set all-frozen (0 were all-visible) index scan not needed: 0 pages from table (0.00% of total) had 0 dead item identifiers removed RESOURCES: avg read rate: 0.000 MB/s, avg write rate: 16.482 MB/s buffer usage: 43 hits, 0 reads, 1 dirtied WAL usage: 1 records, 1 full page images, 4255 bytes, 4136 full page image bytes, 0 buffers full memory usage: dead item storage 0.02 MB accumulated across 0 resets (limit 64.00 MB each) system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s VACUUM There is a problem about the leveling of INFO, because the perspective of VACUUM and REINDEX is shifted. With proposed design we can highlight lines INFO1..INFO3 or we can hide DETAIL or RESOURCES fields. Maybe we can introduce a new error field DETAIL_CRITICAL. When I use VACUUM VERBOSE - I watch primary field `0 are dead but not yet removable`. Can be nice if this information is separated. Another possible error field can be "hint" with query to progress stat view INFO1: vacuuming "postgres.pg_catalog.pg_proc" PROGRESS_QUERY: SELECT * FROM pg_stat_progress_vacuum WHERE pid = xxx ... or maybe in more parseable form STATEMENTINFO: cmdtag "VACUUM": progress_tab=pg_stat_progress_vacuum": pid=111 Another idea - introduce a new error field dedicated for holding information for client in parseable format. This field should be processed by a client and should not be displayed to the user. And should not be stored in a log. INFO1: vacuuming "postgres..... CLIENTINFO: {"cmdtag":"VACUUM", "pid": 112, "progres_view":"pg_stat_progress_vacuum", ... All new fields and error levels require protocol enhancement. What do you think about this proposal? Regards Pavel --00000000000006ad8b06506bb497 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

I am working on a patch t= hat tries to colourize some lines from VACUUM VERBOSE output.
The main problem is inconsistent output from VACUUM, ANALYZE, R= EINDEX and REPACK.

Can we introduce some new error= levels, and new error fields that allows to write these reports more reada= ble:

Current output from REINDEX VERBOSE

(2026-04-24 21:30:41) postgres=3D# reindex (verbose) table = pg_class;
INFO: =C2=A0index "pg_class_oid_index" was reindexed=
DETAIL: =C2=A0CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
INF= O: =C2=A0index "pg_class_relname_nsp_index" was reindexed
DETA= IL: =C2=A0CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
INFO: =C2= =A0index "pg_class_tblspc_relfilenode_index" was reindexed
DET= AIL: =C2=A0CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
REINDEX=C2= =A0

Current output from VACUUM VERBOSE
<= br>
(2026-04-24 21:30:49) postgres=3D# vacuum verbose pg_proc;INFO: =C2=A0vacuuming "postgres.pg_catalog.pg_proc"
INFO: =C2= =A0finished vacuuming "postgres.pg_catalog.pg_proc": index scans:= 0
pages: 0 removed, 101 remain, 1 scanned (0.99% of total), 0 eagerly s= canned
tuples: 0 removed, 3437 remain, 0 are dead but not yet removable<= br>removable cutoff: 702, which was 0 XIDs old when operation ended
new = relfrozenxid: 702, which is 1 XIDs ahead of previous value
frozen: 0 pag= es from table (0.00% of total) had 0 tuples frozen
visibility map: 0 pag= es set all-visible, 0 pages set all-frozen (0 were all-visible)
index sc= an not needed: 0 pages from table (0.00% of total) had 0 dead item identifi= ers removed
avg read rate: 0.000 MB/s, avg write rate: 12.440 MB/s
bu= ffer usage: 22 hits, 0 reads, 1 dirtied
WAL usage: 1 records, 1 full pag= e images, 5871 bytes, 5752 full page image bytes, 0 buffers full
memory = usage: dead item storage 0.02 MB accumulated across 0 resets (limit 64.00 M= B each)
system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s=
INFO: =C2=A0vacuuming "postgres.pg_toast.pg_toast_1255"
IN= FO: =C2=A0finished vacuuming "postgres.pg_toast.pg_toast_1255": i= ndex scans: 0
pages: 0 removed, 2 remain, 2 scanned (100.00% of total), = 0 eagerly scanned
tuples: 0 removed, 7 remain, 0 are dead but not yet re= movable
removable cutoff: 702, which was 0 XIDs old when operation ended=
new relfrozenxid: 702, which is 1 XIDs ahead of previous value
froze= n: 0 pages from table (0.00% of total) had 0 tuples frozen
visibility ma= p: 0 pages set all-visible, 0 pages set all-frozen (0 were all-visible)
= index scan not needed: 0 pages from table (0.00% of total) had 0 dead item = identifiers removed
avg read rate: 0.000 MB/s, avg write rate: 16.482 MB= /s
buffer usage: 43 hits, 0 reads, 1 dirtied
WAL usage: 1 records, 1 = full page images, 4255 bytes, 4136 full page image bytes, 0 buffers fullmemory usage: dead item storage 0.02 MB accumulated across 0 resets (limit= 64.00 MB each)
system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed= : 0.00 s
VACUUM

My proposal is introduction new= three levels of INFO - INFO1, INFO2, and INFO3

IN= FO1 can be used for starting, finishing=C2=A0processing of primary object l= ike tables
INFO2 can be used for starting, finishing processing o= f depending objects like toast tables or partitions
INFO3 can be = used for starting, finishing processing of nested objects like indexes

We can introduce new error field RESOURCES
<= br>
After change new=C2=A0 verbose output can looks like:

(2026-04-24 21:30:41) postgres=3D# reindex (verbose) tabl= e pg_class;
INFO3: =C2=A0index "pg_class_oid_index" was reinde= xed
RESOURCES: =C2=A0CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s<= br>INFO3: =C2=A0index "pg_class_relname_nsp_index" was reindexed<= br>RESOURCES: =C2=A0CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
I= NFO3: =C2=A0index "pg_class_tblspc_relfilenode_index" was reindex= ed
RESOURCES: =C2=A0CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 sREINDEX=C2=A0

(2026-04-24 21:30:49) pos= tgres=3D# vacuum verbose pg_proc;
INFO1: =C2=A0vacuuming "= ;postgres.pg_catalog.pg_proc"
INFO1: =C2=A0finished vacuuming "= ;postgres.pg_catalog.pg_proc"
DETAIL: index scans: 0,
pages: 0 removed, 101 remain, 1 scanned (0.99% of total), 0 eagerly= scanned
tuples: 0 removed, 3437 remain, 0 are dead but not yet removabl= e
removable cutoff: 702, which was 0 XIDs old when operation ended
ne= w relfrozenxid: 702, which is 1 XIDs ahead of previous value
frozen: 0 p= ages from table (0.00% of total) had 0 tuples frozen
visibility map: 0 p= ages set all-visible, 0 pages set all-frozen (0 were all-visible)
index = scan not needed: 0 pages from table (0.00% of total) had 0 dead item identi= fiers removed
RESOURCES: avg read rate: 0.000 MB/s, avg write rate: 12.4= 40 MB/s,
buffer usage: 22 hits, 0 reads, 1 dirtied
WAL usage: 1 recor= ds, 1 full page images, 5871 bytes, 5752 full page image bytes, 0 buffers f= ull
memory usage: dead item storage 0.02 MB accumulated across 0 resets = (limit 64.00 MB each)
system usage: CPU: user: 0.00 s, system: 0.00 s, e= lapsed: 0.00 s
INFO2: =C2=A0vacuuming "postgres.pg_toast.pg_toas= t_1255"
INFO2: =C2=A0finished vacuuming "postgres.pg_to= ast.pg_toast_
1255"
DETAIL: index scans: 0
page= s: 0 removed, 2 remain, 2 scanned (100.00% of total), 0 eagerly scanned
= tuples: 0 removed, 7 remain, 0 are dead but not yet removable
removable = cutoff: 702, which was 0 XIDs old when operation ended
new relfrozenxid:= 702, which is 1 XIDs ahead of previous value
frozen: 0 pages from table= (0.00% of total) had 0 tuples frozen
visibility map: 0 pages set all-vi= sible, 0 pages set all-frozen (0 were all-visible)
index scan not needed= : 0 pages from table (0.00% of total) had 0 dead item identifiers removedRESOURCES: avg read rate: 0.000 MB/s, avg write rate: 16.482 MB/s
buff= er usage: 43 hits, 0 reads, 1 dirtied
WAL usage: 1 records, 1 full page = images, 4255 bytes, 4136 full page image bytes, 0 buffers full
memory us= age: dead item storage 0.02 MB accumulated across 0 resets (limit 64.00 MB = each)
system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 sVACUUM

There is a problem about the leveling of INFO,= because the perspective of VACUUM and REINDEX is shifted.

With proposed design we can highlight lines INFO1..INFO3 or we can= hide DETAIL or RESOURCES fields.

Maybe we can introduce = a new error field DETAIL_CRITICAL. When I use VACUUM VERBOSE - I watch prim= ary field `0 are dead but not yet removable`. Can be nice if this informati= on is separated.

Another possible error field can = be "hint" with query to progress stat view

INFO1: vacuuming "postgres.pg_catalog.pg_proc"
PROGR= ESS_QUERY: SELECT * FROM pg_stat_progress_vacuum WHERE pid =3D xxx ...

or maybe in more parseable form
STATEMENTINF= O: cmdtag "VACUUM": progress_tab=3Dpg_stat_progress_vacuum":= pid=3D111

Another idea - introduce a new error fi= eld dedicated for holding information for client in parseable format. This = field should be processed by a client and should not be displayed to the us= er. And should not be stored in a log.

INFO1: vacu= uming "postgres.....
CLIENTINFO: {"cmdtag":"V= ACUUM", "pid": 112, "progres_view":"pg_stat_p= rogress_vacuum", ...

All new fields and error= levels require protocol enhancement.

What do you = think about this proposal?

Regards

<= /div>
Pavel

--00000000000006ad8b06506bb497--