Inconsistent LSN format in pg_waldump output

Started by Japin Li6 months ago25 messages
#1Japin Li
japinli@hotmail.com
1 attachment(s)

Hi, all

I've noticed an inconsistency in the LSN format printed by pg_waldump,
specifically concerning the lsn: and prev fields in the output.

$ pg_waldump /tmp/pgdata02/pg_wal/00000001000000000000000A 2>/dev/null |grep 'AB10260'
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/0AB10260, prev 0/0AB10228, desc: CHECKPOINT_SHUTDOWN redo 0/AB10260; ...
^ ^

In the output above, the LSN 0/AB10260 and 0/0AB10260 refer to the same logical
LSN, but are presented with a different number of leading zeros in the lower
32-bit part.

Upon further investigation, I grepped the source code for the format specifier
used:

$ grep '%X\/%08X' -rn src/
src/bin/pg_waldump/pg_waldump.c:558: printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",

This inconsistency, while minor, could be confusing when cross-referencing
LSNs within pg_waldump's own output or when parsing it programmatically.

--
Regards,
Japin Li

Attachments:

v1-0001-Fix-inconsistent-LSN-format-in-pg_waldump.patchtext/x-diffDownload
From b38d020375481ae54aaf745bee58b7c1a074274b Mon Sep 17 00:00:00 2001
From: Li Jianping <jianping.li@ww-it.cn>
Date: Tue, 1 Jul 2025 17:42:48 +0800
Subject: [PATCH v1] Fix inconsistent LSN format in pg_waldump

---
 src/bin/pg_waldump/pg_waldump.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c
index 51fb76efc48..5cf55be896d 100644
--- a/src/bin/pg_waldump/pg_waldump.c
+++ b/src/bin/pg_waldump/pg_waldump.c
@@ -555,7 +555,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record)
 
 	XLogRecGetLen(record, &rec_len, &fpi_len);
 
-	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",
+	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%X, prev %X/%X, ",
 		   desc->rm_name,
 		   rec_len, XLogRecGetTotalLen(record),
 		   XLogRecGetXid(record),
-- 
2.43.0

#2Álvaro Herrera
alvherre@kurilemu.de
In reply to: Japin Li (#1)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-01, Japin Li wrote:

This inconsistency, while minor, could be confusing when cross-referencing
LSNs within pg_waldump's own output or when parsing it programmatically.

I agree that we should fix this, but I'd rather add the missing zeros
than remove these ones (the only ones we have):

XLogRecGetLen(record, &rec_len, &fpi_len);

-	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",
+	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%X, prev %X/%X, ",
desc->rm_name,
rec_len, XLogRecGetTotalLen(record),
XLogRecGetXid(record),

I think pg_waldump did things right in this regard, and all other places
were cargo-culting the older broken practice.

IOW I think we should change all occurrences of %X/%X to %X/%08X
instead. There's a ton of them though. See also
/messages/by-id/CAExHW5ub5NaTELZ3hJUCE6amuvqAtsSxc7O+uK7y4t9Rrk23cw@mail.gmail.com
where LSN_FORMAT_ARGS was invented, but where the width of the second %X
was not discussed.

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/

#3Japin Li
japinli@hotmail.com
In reply to: Álvaro Herrera (#2)
Re: Inconsistent LSN format in pg_waldump output

On Tue, 01 Jul 2025 at 13:39, Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-01, Japin Li wrote:

This inconsistency, while minor, could be confusing when cross-referencing
LSNs within pg_waldump's own output or when parsing it programmatically.

I agree that we should fix this, but I'd rather add the missing zeros
than remove these ones (the only ones we have):

XLogRecGetLen(record, &rec_len, &fpi_len);

-	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",
+	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%X, prev %X/%X, ",
desc->rm_name,
rec_len, XLogRecGetTotalLen(record),
XLogRecGetXid(record),

I think pg_waldump did things right in this regard, and all other places
were cargo-culting the older broken practice.

I initially considered using the %X/%08X format, but observing %X/%X
consistently elsewhere led me to abandon that idea.

IOW I think we should change all occurrences of %X/%X to %X/%08X
instead. There's a ton of them though. See also
/messages/by-id/CAExHW5ub5NaTELZ3hJUCE6amuvqAtsSxc7O+uK7y4t9Rrk23cw@mail.gmail.com
where LSN_FORMAT_ARGS was invented, but where the width of the second %X
was not discussed.

Agreed. I believe %X/%08X is better.
--
Regards,
Japin Li

#4Japin Li
japinli@hotmail.com
In reply to: Japin Li (#3)
1 attachment(s)
Re: Inconsistent LSN format in pg_waldump output

On Tue, 01 Jul 2025 at 22:00, Japin Li <japinli@hotmail.com> wrote:

On Tue, 01 Jul 2025 at 13:39, Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-01, Japin Li wrote:

This inconsistency, while minor, could be confusing when cross-referencing
LSNs within pg_waldump's own output or when parsing it programmatically.

I agree that we should fix this, but I'd rather add the missing zeros
than remove these ones (the only ones we have):

XLogRecGetLen(record, &rec_len, &fpi_len);

-	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",
+	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%X, prev %X/%X, ",
desc->rm_name,
rec_len, XLogRecGetTotalLen(record),
XLogRecGetXid(record),

I think pg_waldump did things right in this regard, and all other places
were cargo-culting the older broken practice.

I initially considered using the %X/%08X format, but observing %X/%X
consistently elsewhere led me to abandon that idea.

IOW I think we should change all occurrences of %X/%X to %X/%08X
instead. There's a ton of them though. See also
/messages/by-id/CAExHW5ub5NaTELZ3hJUCE6amuvqAtsSxc7O+uK7y4t9Rrk23cw@mail.gmail.com
where LSN_FORMAT_ARGS was invented, but where the width of the second %X
was not discussed.

Agreed. I believe %X/%08X is better.

Patch to standardize LSN formatting with zero-padding.

--
Regards,
Japin Li

Attachments:

v2-0001-Standardize-LSN-formatting-by-zero-padding.patchtext/x-diff; charset=utf-8Download
From 7fabb12553bf3f737ef289e4ed70d456e9d81927 Mon Sep 17 00:00:00 2001
From: Li Jianping <jianping.li@ww-it.cn>
Date: Wed, 2 Jul 2025 09:46:14 +0800
Subject: [PATCH v2] Standardize LSN formatting by zero-padding

---
 contrib/amcheck/verify_nbtree.c               |  44 +-
 contrib/pageinspect/expected/gist.out         |  18 +-
 contrib/pageinspect/expected/page.out         |   6 +-
 contrib/pageinspect/rawpage.c                 |   2 +-
 .../pg_walinspect/expected/pg_walinspect.out  |   8 +-
 contrib/pg_walinspect/pg_walinspect.c         |  18 +-
 src/backend/access/rmgrdesc/replorigindesc.c  |   2 +-
 src/backend/access/rmgrdesc/xactdesc.c        |   6 +-
 src/backend/access/rmgrdesc/xlogdesc.c        |   6 +-
 src/backend/access/transam/timeline.c         |   4 +-
 src/backend/access/transam/twophase.c         |   8 +-
 src/backend/access/transam/xlog.c             |  40 +-
 src/backend/access/transam/xlogbackup.c       |   8 +-
 src/backend/access/transam/xlogprefetcher.c   |  16 +-
 src/backend/access/transam/xlogreader.c       |  62 +--
 src/backend/access/transam/xlogrecovery.c     |  72 +--
 src/backend/access/transam/xlogutils.c        |   2 +-
 src/backend/backup/backup_manifest.c          |   2 +-
 src/backend/backup/basebackup_copy.c          |   2 +-
 src/backend/backup/basebackup_incremental.c   |  14 +-
 src/backend/commands/subscriptioncmds.c       |   2 +-
 src/backend/po/de.po                          | 388 +++++++-------
 src/backend/po/es.po                          | 396 +++++++-------
 src/backend/po/fr.po                          | 366 ++++++-------
 src/backend/po/id.po                          |  80 +--
 src/backend/po/it.po                          | 264 +++++-----
 src/backend/po/ja.po                          | 324 ++++++------
 src/backend/po/ka.po                          | 326 ++++++------
 src/backend/po/ko.po                          | 426 +++++++--------
 src/backend/po/pl.po                          | 214 ++++----
 src/backend/po/pt_BR.po                       | 264 +++++-----
 src/backend/po/ru.po                          | 484 +++++++++---------
 src/backend/po/sv.po                          | 396 +++++++-------
 src/backend/po/tr.po                          | 202 ++++----
 src/backend/po/uk.po                          | 404 +++++++--------
 src/backend/po/zh_CN.po                       | 186 +++----
 src/backend/postmaster/walsummarizer.c        |  26 +-
 .../libpqwalreceiver/libpqwalreceiver.c       |   2 +-
 src/backend/replication/logical/logical.c     |  14 +-
 src/backend/replication/logical/origin.c      |   2 +-
 src/backend/replication/logical/slotsync.c    |  10 +-
 src/backend/replication/logical/snapbuild.c   |  14 +-
 src/backend/replication/logical/tablesync.c   |   2 +-
 src/backend/replication/logical/worker.c      |  18 +-
 src/backend/replication/repl_gram.y           |   4 +-
 src/backend/replication/repl_scanner.l        |   2 +-
 src/backend/replication/slot.c                |   4 +-
 src/backend/replication/slotfuncs.c           |   2 +-
 src/backend/replication/syncrep.c             |   4 +-
 src/backend/replication/walreceiver.c         |  12 +-
 src/backend/replication/walsender.c           |  20 +-
 src/backend/storage/ipc/standby.c             |   4 +-
 src/backend/utils/adt/pg_lsn.c                |   2 +-
 src/bin/pg_basebackup/pg_basebackup.c         |   6 +-
 src/bin/pg_basebackup/pg_createsubscriber.c   |   4 +-
 src/bin/pg_basebackup/pg_receivewal.c         |  10 +-
 src/bin/pg_basebackup/pg_recvlogical.c        |  14 +-
 src/bin/pg_basebackup/po/cs.po                |  36 +-
 src/bin/pg_basebackup/po/de.po                |  36 +-
 src/bin/pg_basebackup/po/el.po                |  36 +-
 src/bin/pg_basebackup/po/es.po                |  36 +-
 src/bin/pg_basebackup/po/fr.po                |  36 +-
 src/bin/pg_basebackup/po/he.po                |  24 +-
 src/bin/pg_basebackup/po/it.po                |  36 +-
 src/bin/pg_basebackup/po/ja.po                |  34 +-
 src/bin/pg_basebackup/po/ka.po                |  36 +-
 src/bin/pg_basebackup/po/ko.po                |  40 +-
 src/bin/pg_basebackup/po/pl.po                |  26 +-
 src/bin/pg_basebackup/po/pt_BR.po             |  24 +-
 src/bin/pg_basebackup/po/ru.po                |  40 +-
 src/bin/pg_basebackup/po/sv.po                |  36 +-
 src/bin/pg_basebackup/po/tr.po                |  32 +-
 src/bin/pg_basebackup/po/uk.po                |  36 +-
 src/bin/pg_basebackup/po/vi.po                |  30 +-
 src/bin/pg_basebackup/po/zh_CN.po             |  34 +-
 src/bin/pg_basebackup/receivelog.c            |   6 +-
 src/bin/pg_basebackup/streamutil.c            |   4 +-
 src/bin/pg_combinebackup/backup_label.c       |   2 +-
 src/bin/pg_combinebackup/pg_combinebackup.c   |   2 +-
 src/bin/pg_combinebackup/po/de.po             |   4 +-
 src/bin/pg_combinebackup/po/es.po             |   4 +-
 src/bin/pg_combinebackup/po/fr.po             |   4 +-
 src/bin/pg_combinebackup/po/ja.po             |   4 +-
 src/bin/pg_combinebackup/po/ka.po             |   4 +-
 src/bin/pg_combinebackup/po/ko.po             |   4 +-
 src/bin/pg_combinebackup/po/ru.po             |   4 +-
 src/bin/pg_combinebackup/po/sv.po             |   4 +-
 src/bin/pg_combinebackup/po/uk.po             |   4 +-
 src/bin/pg_combinebackup/write_manifest.c     |   2 +-
 src/bin/pg_controldata/pg_controldata.c       |  12 +-
 src/bin/pg_controldata/po/cs.po               |  24 +-
 src/bin/pg_controldata/po/de.po               |  24 +-
 src/bin/pg_controldata/po/el.po               |  24 +-
 src/bin/pg_controldata/po/es.po               |  24 +-
 src/bin/pg_controldata/po/fr.po               |  24 +-
 src/bin/pg_controldata/po/it.po               |  24 +-
 src/bin/pg_controldata/po/ja.po               |  24 +-
 src/bin/pg_controldata/po/ka.po               |  24 +-
 src/bin/pg_controldata/po/ko.po               |  24 +-
 src/bin/pg_controldata/po/pl.po               |  28 +-
 src/bin/pg_controldata/po/pt_BR.po            |  24 +-
 src/bin/pg_controldata/po/ru.po               |  28 +-
 src/bin/pg_controldata/po/sv.po               |  24 +-
 src/bin/pg_controldata/po/tr.po               |  28 +-
 src/bin/pg_controldata/po/uk.po               |  22 +-
 src/bin/pg_controldata/po/vi.po               |  24 +-
 src/bin/pg_controldata/po/zh_CN.po            |  24 +-
 src/bin/pg_controldata/po/zh_TW.po            |  24 +-
 src/bin/pg_rewind/libpq_source.c              |   2 +-
 src/bin/pg_rewind/parsexlog.c                 |  16 +-
 src/bin/pg_rewind/pg_rewind.c                 |  10 +-
 src/bin/pg_rewind/po/cs.po                    | 116 ++---
 src/bin/pg_rewind/po/de.po                    | 140 ++---
 src/bin/pg_rewind/po/el.po                    | 152 +++---
 src/bin/pg_rewind/po/es.po                    | 140 ++---
 src/bin/pg_rewind/po/fr.po                    | 140 ++---
 src/bin/pg_rewind/po/it.po                    | 140 ++---
 src/bin/pg_rewind/po/ja.po                    | 108 ++--
 src/bin/pg_rewind/po/ka.po                    | 150 +++---
 src/bin/pg_rewind/po/ko.po                    | 146 +++---
 src/bin/pg_rewind/po/pl.po                    | 114 ++---
 src/bin/pg_rewind/po/pt_BR.po                 | 116 ++---
 src/bin/pg_rewind/po/ru.po                    | 150 +++---
 src/bin/pg_rewind/po/sv.po                    | 140 ++---
 src/bin/pg_rewind/po/tr.po                    | 106 ++--
 src/bin/pg_rewind/po/uk.po                    | 140 ++---
 src/bin/pg_rewind/po/zh_CN.po                 |  86 ++--
 src/bin/pg_rewind/po/zh_TW.po                 | 118 ++---
 src/bin/pg_rewind/timeline.c                  |   2 +-
 src/bin/pg_verifybackup/pg_verifybackup.c     |   2 +-
 src/bin/pg_waldump/pg_waldump.c               |  18 +-
 src/bin/pg_waldump/po/cs.po                   |  26 +-
 src/bin/pg_waldump/po/de.po                   | 132 ++---
 src/bin/pg_waldump/po/el.po                   | 144 +++---
 src/bin/pg_waldump/po/es.po                   | 132 ++---
 src/bin/pg_waldump/po/fr.po                   | 132 ++---
 src/bin/pg_waldump/po/it.po                   | 128 ++---
 src/bin/pg_waldump/po/ja.po                   | 104 ++--
 src/bin/pg_waldump/po/ka.po                   | 142 ++---
 src/bin/pg_waldump/po/ko.po                   | 138 ++---
 src/bin/pg_waldump/po/ru.po                   | 142 ++---
 src/bin/pg_waldump/po/sv.po                   | 132 ++---
 src/bin/pg_waldump/po/tr.po                   |  24 +-
 src/bin/pg_waldump/po/uk.po                   | 136 ++---
 src/bin/pg_waldump/po/vi.po                   |  22 +-
 src/bin/pg_waldump/po/zh_CN.po                |  24 +-
 src/bin/pg_waldump/po/zh_TW.po                | 110 ++--
 src/common/parse_manifest.c                   |   2 +-
 src/include/access/xlogdefs.h                 |   2 +-
 src/test/recovery/t/016_min_consistency.pl    |   2 +-
 src/test/regress/expected/numeric.out         |  12 +-
 src/test/regress/expected/pg_lsn.out          | 240 ++++-----
 src/test/regress/expected/subscription.out    | 152 +++---
 153 files changed, 5341 insertions(+), 5341 deletions(-)

diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c
index f11c43a0ed7..25cae8994a1 100644
--- a/contrib/amcheck/verify_nbtree.c
+++ b/contrib/amcheck/verify_nbtree.c
@@ -913,7 +913,7 @@ bt_report_duplicate(BtreeCheckState *state,
 			(errcode(ERRCODE_INDEX_CORRUPTED),
 			 errmsg("index uniqueness is violated for index \"%s\"",
 					RelationGetRelationName(state->rel)),
-			 errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%X.",
+			 errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%08X.",
 					   itid, pposting, nitid, pnposting, htid, nhtid,
 					   LSN_FORMAT_ARGS(state->targetlsn))));
 }
@@ -1058,7 +1058,7 @@ bt_leftmost_ignoring_half_dead(BtreeCheckState *state,
 					(errcode(ERRCODE_NO_DATA),
 					 errmsg_internal("harmless interrupted page deletion detected in index \"%s\"",
 									 RelationGetRelationName(state->rel)),
-					 errdetail_internal("Block=%u right block=%u page lsn=%X/%X.",
+					 errdetail_internal("Block=%u right block=%u page lsn=%X/%08X.",
 										reached, reached_from,
 										LSN_FORMAT_ARGS(pagelsn))));
 
@@ -1283,7 +1283,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("wrong number of high key index tuple attributes in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%X.",
+					 errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%08X.",
 										state->targetblock,
 										BTreeTupleGetNAtts(itup, state->rel),
 										P_ISLEAF(topaque) ? "heap" : "index",
@@ -1332,7 +1332,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("index tuple size does not equal lp_len in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%X.",
+					 errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%08X.",
 										state->targetblock, offset,
 										tupsize, ItemIdGetLength(itemid),
 										LSN_FORMAT_ARGS(state->targetlsn)),
@@ -1356,7 +1356,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("wrong number of index tuple attributes in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%08X.",
 										itid,
 										BTreeTupleGetNAtts(itup, state->rel),
 										P_ISLEAF(topaque) ? "heap" : "index",
@@ -1406,7 +1406,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("could not find tuple using search from root page in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%08X.",
 										itid, htid,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 		}
@@ -1435,7 +1435,7 @@ bt_target_page_check(BtreeCheckState *state)
 							(errcode(ERRCODE_INDEX_CORRUPTED),
 							 errmsg_internal("posting list contains misplaced TID in index \"%s\"",
 											 RelationGetRelationName(state->rel)),
-							 errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%X.",
+							 errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%08X.",
 												itid, i,
 												LSN_FORMAT_ARGS(state->targetlsn))));
 				}
@@ -1488,7 +1488,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("index row size %zu exceeds maximum for index \"%s\"",
 							tupsize, RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1595,7 +1595,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("high key invariant violated for index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1643,7 +1643,7 @@ bt_target_page_check(BtreeCheckState *state)
 							RelationGetRelationName(state->rel)),
 					 errdetail_internal("Lower index tid=%s (points to %s tid=%s) "
 										"higher index tid=%s (points to %s tid=%s) "
-										"page lsn=%X/%X.",
+										"page lsn=%X/%08X.",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1760,7 +1760,7 @@ bt_target_page_check(BtreeCheckState *state)
 						(errcode(ERRCODE_INDEX_CORRUPTED),
 						 errmsg("cross page item order invariant violated for index \"%s\"",
 								RelationGetRelationName(state->rel)),
-						 errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%X.",
+						 errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%08X.",
 											state->targetblock, offset,
 											LSN_FORMAT_ARGS(state->targetlsn))));
 			}
@@ -1813,7 +1813,7 @@ bt_target_page_check(BtreeCheckState *state)
 								(errcode(ERRCODE_INDEX_CORRUPTED),
 								 errmsg("right block of leaf block is non-leaf for index \"%s\"",
 										RelationGetRelationName(state->rel)),
-								 errdetail_internal("Block=%u page lsn=%X/%X.",
+								 errdetail_internal("Block=%u page lsn=%X/%08X.",
 													state->targetblock,
 													LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2237,7 +2237,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("the first child of leftmost target page is not leftmost of its level in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+					 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 										state->targetblock, blkno,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2323,7 +2323,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 								(errcode(ERRCODE_INDEX_CORRUPTED),
 								 errmsg("child high key is greater than rightmost pivot key on target level in index \"%s\"",
 										RelationGetRelationName(state->rel)),
-								 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+								 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 													state->targetblock, blkno,
 													LSN_FORMAT_ARGS(state->targetlsn))));
 					pivotkey_offset = P_HIKEY;
@@ -2353,7 +2353,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 							(errcode(ERRCODE_INDEX_CORRUPTED),
 							 errmsg("can't find left sibling high key in index \"%s\"",
 									RelationGetRelationName(state->rel)),
-							 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+							 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 												state->targetblock, blkno,
 												LSN_FORMAT_ARGS(state->targetlsn))));
 				itup = state->lowkey;
@@ -2365,7 +2365,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 						(errcode(ERRCODE_INDEX_CORRUPTED),
 						 errmsg("mismatch between parent key and child high key in index \"%s\"",
 								RelationGetRelationName(state->rel)),
-						 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+						 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 											state->targetblock, blkno,
 											LSN_FORMAT_ARGS(state->targetlsn))));
 			}
@@ -2505,7 +2505,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg("downlink to deleted page found in index \"%s\"",
 						RelationGetRelationName(state->rel)),
-				 errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%X.",
+				 errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%08X.",
 									state->targetblock, childblock,
 									LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2546,7 +2546,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("down-link lower bound invariant violated for index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%X.",
+					 errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%08X.",
 										state->targetblock, childblock, offset,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 	}
@@ -2616,7 +2616,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_NO_DATA),
 				 errmsg_internal("harmless interrupted page split detected in index \"%s\"",
 								 RelationGetRelationName(state->rel)),
-				 errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.",
+				 errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%08X.",
 									blkno, opaque->btpo_level,
 									opaque->btpo_prev,
 									LSN_FORMAT_ARGS(pagelsn))));
@@ -2638,7 +2638,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg("leaf index block lacks downlink in index \"%s\"",
 						RelationGetRelationName(state->rel)),
-				 errdetail_internal("Block=%u page lsn=%X/%X.",
+				 errdetail_internal("Block=%u page lsn=%X/%08X.",
 									blkno,
 									LSN_FORMAT_ARGS(pagelsn))));
 
@@ -2704,7 +2704,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg_internal("downlink to deleted leaf page found in index \"%s\"",
 								 RelationGetRelationName(state->rel)),
-				 errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%X.",
+				 errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%08X.",
 									blkno, childblk,
 									LSN_FORMAT_ARGS(pagelsn))));
 
@@ -2730,7 +2730,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 			(errcode(ERRCODE_INDEX_CORRUPTED),
 			 errmsg("internal index block lacks downlink in index \"%s\"",
 					RelationGetRelationName(state->rel)),
-			 errdetail_internal("Block=%u level=%u page lsn=%X/%X.",
+			 errdetail_internal("Block=%u level=%u page lsn=%X/%08X.",
 								blkno, opaque->btpo_level,
 								LSN_FORMAT_ARGS(pagelsn))));
 }
diff --git a/contrib/pageinspect/expected/gist.out b/contrib/pageinspect/expected/gist.out
index 2b1d54a6279..8502f9efb41 100644
--- a/contrib/pageinspect/expected/gist.out
+++ b/contrib/pageinspect/expected/gist.out
@@ -5,21 +5,21 @@ CREATE UNLOGGED TABLE test_gist AS SELECT point(i,i) p, i::text t FROM
 CREATE INDEX test_gist_idx ON test_gist USING gist (p);
 -- Page 0 is the root, the rest are leaf pages
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 0));
- lsn | nsn | rightlink  | flags 
------+-----+------------+-------
- 0/1 | 0/0 | 4294967295 | {}
+    lsn     |    nsn     | rightlink  | flags 
+------------+------------+------------+-------
+ 0/00000001 | 0/00000000 | 4294967295 | {}
 (1 row)
 
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 1));
- lsn | nsn | rightlink  | flags  
------+-----+------------+--------
- 0/1 | 0/0 | 4294967295 | {leaf}
+    lsn     |    nsn     | rightlink  | flags  
+------------+------------+------------+--------
+ 0/00000001 | 0/00000000 | 4294967295 | {leaf}
 (1 row)
 
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2));
- lsn | nsn | rightlink | flags  
------+-----+-----------+--------
- 0/1 | 0/0 |         1 | {leaf}
+    lsn     |    nsn     | rightlink | flags  
+------------+------------+-----------+--------
+ 0/00000001 | 0/00000000 |         1 | {leaf}
 (1 row)
 
 SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx');
diff --git a/contrib/pageinspect/expected/page.out b/contrib/pageinspect/expected/page.out
index e42fd9747fd..fcf19c5ca5a 100644
--- a/contrib/pageinspect/expected/page.out
+++ b/contrib/pageinspect/expected/page.out
@@ -265,9 +265,9 @@ SELECT fsm_page_contents(decode(repeat('00', :block_size), 'hex'));
 (1 row)
 
 SELECT page_header(decode(repeat('00', :block_size), 'hex'));
-      page_header      
------------------------
- (0/0,0,0,0,0,0,0,0,0)
+         page_header          
+------------------------------
+ (0/00000000,0,0,0,0,0,0,0,0)
 (1 row)
 
 SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1);
diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c
index 0d57123aa26..aef442b5db3 100644
--- a/contrib/pageinspect/rawpage.c
+++ b/contrib/pageinspect/rawpage.c
@@ -282,7 +282,7 @@ page_header(PG_FUNCTION_ARGS)
 	{
 		char		lsnchar[64];
 
-		snprintf(lsnchar, sizeof(lsnchar), "%X/%X", LSN_FORMAT_ARGS(lsn));
+		snprintf(lsnchar, sizeof(lsnchar), "%X/%08X", LSN_FORMAT_ARGS(lsn));
 		values[0] = CStringGetTextDatum(lsnchar);
 	}
 	else
diff --git a/contrib/pg_walinspect/expected/pg_walinspect.out b/contrib/pg_walinspect/expected/pg_walinspect.out
index c010eed8c5d..f955ff5d3c5 100644
--- a/contrib/pg_walinspect/expected/pg_walinspect.out
+++ b/contrib/pg_walinspect/expected/pg_walinspect.out
@@ -19,14 +19,14 @@ INSERT INTO sample_tbl SELECT * FROM generate_series(3, 4);
 -- ===================================================================
 -- Invalid input LSN.
 SELECT * FROM pg_get_wal_record_info('0/0');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 -- Invalid start LSN.
 SELECT * FROM pg_get_wal_records_info('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 SELECT * FROM pg_get_wal_stats('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 SELECT * FROM pg_get_wal_block_info('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 -- Start LSN > End LSN.
 SELECT * FROM pg_get_wal_records_info(:'wal_lsn2', :'wal_lsn1');
 ERROR:  WAL start LSN must be less than end LSN
diff --git a/contrib/pg_walinspect/pg_walinspect.c b/contrib/pg_walinspect/pg_walinspect.c
index 64745564cc2..ce7d4b551c1 100644
--- a/contrib/pg_walinspect/pg_walinspect.c
+++ b/contrib/pg_walinspect/pg_walinspect.c
@@ -105,7 +105,7 @@ InitXLogReaderState(XLogRecPtr lsn)
 	if (lsn < XLOG_BLCKSZ)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not read WAL at LSN %X/%X",
+				 errmsg("could not read WAL at LSN %X/%08X",
 						LSN_FORMAT_ARGS(lsn))));
 
 	private_data = (ReadLocalXLogPageNoWaitPrivate *)
@@ -128,7 +128,7 @@ InitXLogReaderState(XLogRecPtr lsn)
 
 	if (XLogRecPtrIsInvalid(first_valid_record))
 		ereport(ERROR,
-				(errmsg("could not find a valid record after %X/%X",
+				(errmsg("could not find a valid record after %X/%08X",
 						LSN_FORMAT_ARGS(lsn))));
 
 	return xlogreader;
@@ -168,12 +168,12 @@ ReadNextXLogRecord(XLogReaderState *xlogreader)
 		if (errormsg)
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read WAL at %X/%X: %s",
+					 errmsg("could not read WAL at %X/%08X: %s",
 							LSN_FORMAT_ARGS(xlogreader->EndRecPtr), errormsg)));
 		else
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read WAL at %X/%X",
+					 errmsg("could not read WAL at %X/%08X",
 							LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 	}
 
@@ -479,7 +479,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL input LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(curr_lsn))));
 
 	/* Build a tuple descriptor for our result type. */
@@ -491,7 +491,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS)
 	if (!ReadNextXLogRecord(xlogreader))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not read WAL at %X/%X",
+				 errmsg("could not read WAL at %X/%08X",
 						LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 
 	GetWALRecordInfo(xlogreader, values, nulls, PG_GET_WAL_RECORD_INFO_COLS);
@@ -521,7 +521,7 @@ ValidateInputLSNs(XLogRecPtr start_lsn, XLogRecPtr *end_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(curr_lsn))));
 
 	if (start_lsn > *end_lsn)
@@ -827,7 +827,7 @@ pg_get_wal_records_info_till_end_of_wal(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(end_lsn))));
 
 	GetWALRecordsInfo(fcinfo, start_lsn, end_lsn);
@@ -846,7 +846,7 @@ pg_get_wal_stats_till_end_of_wal(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(end_lsn))));
 
 	GetWalStats(fcinfo, start_lsn, end_lsn, stats_per_record);
diff --git a/src/backend/access/rmgrdesc/replorigindesc.c b/src/backend/access/rmgrdesc/replorigindesc.c
index 5dd74233996..35e3af2903e 100644
--- a/src/backend/access/rmgrdesc/replorigindesc.c
+++ b/src/backend/access/rmgrdesc/replorigindesc.c
@@ -29,7 +29,7 @@ replorigin_desc(StringInfo buf, XLogReaderState *record)
 
 				xlrec = (xl_replorigin_set *) rec;
 
-				appendStringInfo(buf, "set %u; lsn %X/%X; force: %d",
+				appendStringInfo(buf, "set %u; lsn %X/%08X; force: %d",
 								 xlrec->node_id,
 								 LSN_FORMAT_ARGS(xlrec->remote_lsn),
 								 xlrec->force);
diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c
index 305598e2865..f0f696855b9 100644
--- a/src/backend/access/rmgrdesc/xactdesc.c
+++ b/src/backend/access/rmgrdesc/xactdesc.c
@@ -359,7 +359,7 @@ xact_desc_commit(StringInfo buf, uint8 info, xl_xact_commit *xlrec, RepOriginId
 
 	if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN)
 	{
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
@@ -384,7 +384,7 @@ xact_desc_abort(StringInfo buf, uint8 info, xl_xact_abort *xlrec, RepOriginId or
 
 	if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN)
 	{
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
@@ -418,7 +418,7 @@ xact_desc_prepare(StringInfo buf, uint8 info, xl_xact_prepare *xlrec, RepOriginI
 	 * way as PrepareRedoAdd().
 	 */
 	if (origin_id != InvalidRepOriginId)
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c
index 58040f28656..cd6c2a2f650 100644
--- a/src/backend/access/rmgrdesc/xlogdesc.c
+++ b/src/backend/access/rmgrdesc/xlogdesc.c
@@ -65,7 +65,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 	{
 		CheckPoint *checkpoint = (CheckPoint *) rec;
 
-		appendStringInfo(buf, "redo %X/%X; "
+		appendStringInfo(buf, "redo %X/%08X; "
 						 "tli %u; prev tli %u; fpw %s; wal_level %s; xid %u:%u; oid %u; multi %u; offset %u; "
 						 "oldest xid %u in DB %u; oldest multi %u in DB %u; "
 						 "oldest/newest commit timestamp xid: %u/%u; "
@@ -111,7 +111,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 		XLogRecPtr	startpoint;
 
 		memcpy(&startpoint, rec, sizeof(XLogRecPtr));
-		appendStringInfo(buf, "%X/%X", LSN_FORMAT_ARGS(startpoint));
+		appendStringInfo(buf, "%X/%08X", LSN_FORMAT_ARGS(startpoint));
 	}
 	else if (info == XLOG_PARAMETER_CHANGE)
 	{
@@ -156,7 +156,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 		xl_overwrite_contrecord xlrec;
 
 		memcpy(&xlrec, rec, sizeof(xl_overwrite_contrecord));
-		appendStringInfo(buf, "lsn %X/%X; time %s",
+		appendStringInfo(buf, "lsn %X/%08X; time %s",
 						 LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 						 timestamptz_to_str(xlrec.overwrite_time));
 	}
diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c
index a27f27cc037..186eb91f609 100644
--- a/src/backend/access/transam/timeline.c
+++ b/src/backend/access/transam/timeline.c
@@ -154,7 +154,7 @@ readTimeLineHistory(TimeLineID targetTLI)
 		if (*ptr == '\0' || *ptr == '#')
 			continue;
 
-		nfields = sscanf(fline, "%u\t%X/%X", &tli, &switchpoint_hi, &switchpoint_lo);
+		nfields = sscanf(fline, "%u\t%X/%08X", &tli, &switchpoint_hi, &switchpoint_lo);
 
 		if (nfields < 1)
 		{
@@ -399,7 +399,7 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
 	 * parent file failed to end with one.
 	 */
 	snprintf(buffer, sizeof(buffer),
-			 "%s%u\t%X/%X\t%s\n",
+			 "%s%u\t%X/%08X\t%s\n",
 			 (srcfd < 0) ? "" : "\n",
 			 parentTLI,
 			 LSN_FORMAT_ARGS(switchpoint),
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index 73a80559194..f7343c7af3e 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1426,12 +1426,12 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
 		if (errormsg)
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read two-phase state from WAL at %X/%X: %s",
+					 errmsg("could not read two-phase state from WAL at %X/%08X: %s",
 							LSN_FORMAT_ARGS(lsn), errormsg)));
 		else
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read two-phase state from WAL at %X/%X",
+					 errmsg("could not read two-phase state from WAL at %X/%08X",
 							LSN_FORMAT_ARGS(lsn))));
 	}
 
@@ -1439,7 +1439,7 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
 		(XLogRecGetInfo(xlogreader) & XLOG_XACT_OPMASK) != XLOG_XACT_PREPARE)
 		ereport(ERROR,
 				(errcode_for_file_access(),
-				 errmsg("expected two-phase state data is not present in WAL at %X/%X",
+				 errmsg("expected two-phase state data is not present in WAL at %X/%08X",
 						LSN_FORMAT_ARGS(lsn))));
 
 	if (len != NULL)
@@ -2512,7 +2512,7 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn,
 			ereport(reachedConsistency ? ERROR : WARNING,
 					(errmsg("could not recover two-phase state file for transaction %u",
 							hdr->xid),
-					 errdetail("Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk.",
+					 errdetail("Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk.",
 							   LSN_FORMAT_ARGS(start_lsn))));
 			return;
 		}
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 47ffc0a2307..6f6984a9f6b 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -1028,7 +1028,7 @@ XLogInsertRecord(XLogRecData *rdata,
 		oldCxt = MemoryContextSwitchTo(walDebugCxt);
 
 		initStringInfo(&buf);
-		appendStringInfo(&buf, "INSERT @ %X/%X: ", LSN_FORMAT_ARGS(EndPos));
+		appendStringInfo(&buf, "INSERT @ %X/%08X: ", LSN_FORMAT_ARGS(EndPos));
 
 		/*
 		 * We have to piece together the WAL record data from the XLogRecData
@@ -1549,7 +1549,7 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto)
 	if (upto > reservedUpto)
 	{
 		ereport(LOG,
-				(errmsg("request to flush past end of generated WAL; request %X/%X, current position %X/%X",
+				(errmsg("request to flush past end of generated WAL; request %X/%08X, current position %X/%08X",
 						LSN_FORMAT_ARGS(upto), LSN_FORMAT_ARGS(reservedUpto))));
 		upto = reservedUpto;
 	}
@@ -1716,7 +1716,7 @@ GetXLogBuffer(XLogRecPtr ptr, TimeLineID tli)
 		endptr = pg_atomic_read_u64(&XLogCtl->xlblocks[idx]);
 
 		if (expectedEndPtr != endptr)
-			elog(PANIC, "could not find WAL buffer for %X/%X",
+			elog(PANIC, "could not find WAL buffer for %X/%08X",
 				 LSN_FORMAT_ARGS(ptr));
 	}
 	else
@@ -1776,7 +1776,7 @@ WALReadFromBuffers(char *dstbuf, XLogRecPtr startptr, Size count,
 	inserted = pg_atomic_read_u64(&XLogCtl->logInsertResult);
 	if (startptr + count > inserted)
 		ereport(ERROR,
-				errmsg("cannot read past end of generated WAL: requested %X/%X, current position %X/%X",
+				errmsg("cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X",
 					   LSN_FORMAT_ARGS(startptr + count),
 					   LSN_FORMAT_ARGS(inserted)));
 
@@ -2281,7 +2281,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, TimeLineID tli, bool opportunistic)
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG && npages > 0)
 	{
-		elog(DEBUG1, "initialized %d pages, up to %X/%X",
+		elog(DEBUG1, "initialized %d pages, up to %X/%08X",
 			 npages, LSN_FORMAT_ARGS(NewPageEndPtr));
 	}
 #endif
@@ -2492,7 +2492,7 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible)
 		XLogRecPtr	EndPtr = pg_atomic_read_u64(&XLogCtl->xlblocks[curridx]);
 
 		if (LogwrtResult.Write >= EndPtr)
-			elog(PANIC, "xlog write request %X/%X is past end of log %X/%X",
+			elog(PANIC, "xlog write request %X/%08X is past end of log %X/%08X",
 				 LSN_FORMAT_ARGS(LogwrtResult.Write),
 				 LSN_FORMAT_ARGS(EndPtr));
 
@@ -2892,7 +2892,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
 		newMinRecoveryPoint = GetCurrentReplayRecPtr(&newMinRecoveryPointTLI);
 		if (!force && newMinRecoveryPoint < lsn)
 			elog(WARNING,
-				 "xlog min recovery request %X/%X is past current point %X/%X",
+				 "xlog min recovery request %X/%08X is past current point %X/%08X",
 				 LSN_FORMAT_ARGS(lsn), LSN_FORMAT_ARGS(newMinRecoveryPoint));
 
 		/* update control file */
@@ -2905,7 +2905,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
 			LocalMinRecoveryPointTLI = newMinRecoveryPointTLI;
 
 			ereport(DEBUG2,
-					(errmsg_internal("updated min recovery point to %X/%X on timeline %u",
+					(errmsg_internal("updated min recovery point to %X/%08X on timeline %u",
 									 LSN_FORMAT_ARGS(newMinRecoveryPoint),
 									 newMinRecoveryPointTLI)));
 		}
@@ -2945,7 +2945,7 @@ XLogFlush(XLogRecPtr record)
 
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG)
-		elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
+		elog(LOG, "xlog flush request %X/%08X; write %X/%08X; flush %X/%08X",
 			 LSN_FORMAT_ARGS(record),
 			 LSN_FORMAT_ARGS(LogwrtResult.Write),
 			 LSN_FORMAT_ARGS(LogwrtResult.Flush));
@@ -3078,7 +3078,7 @@ XLogFlush(XLogRecPtr record)
 	 */
 	if (LogwrtResult.Flush < record)
 		elog(ERROR,
-			 "xlog flush request %X/%X is not satisfied --- flushed only to %X/%X",
+			 "xlog flush request %X/%08X is not satisfied --- flushed only to %X/%08X",
 			 LSN_FORMAT_ARGS(record),
 			 LSN_FORMAT_ARGS(LogwrtResult.Flush));
 }
@@ -3205,7 +3205,7 @@ XLogBackgroundFlush(void)
 
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG)
-		elog(LOG, "xlog bg flush request write %X/%X; flush: %X/%X, current is write %X/%X; flush %X/%X",
+		elog(LOG, "xlog bg flush request write %X/%08X; flush: %X/%08X, current is write %X/%08X; flush %X/%08X",
 			 LSN_FORMAT_ARGS(WriteRqst.Write),
 			 LSN_FORMAT_ARGS(WriteRqst.Flush),
 			 LSN_FORMAT_ARGS(LogwrtResult.Write),
@@ -6921,7 +6921,7 @@ LogCheckpointEnd(bool restartpoint)
 						"%d removed, %d recycled; write=%ld.%03d s, "
 						"sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, "
 						"longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-						"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X",
+						"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X",
 						CheckpointStats.ckpt_bufs_written,
 						(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
 						CheckpointStats.ckpt_slru_written,
@@ -6945,7 +6945,7 @@ LogCheckpointEnd(bool restartpoint)
 						"%d removed, %d recycled; write=%ld.%03d s, "
 						"sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, "
 						"longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-						"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X",
+						"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X",
 						CheckpointStats.ckpt_bufs_written,
 						(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
 						CheckpointStats.ckpt_slru_written,
@@ -7641,7 +7641,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 	if (!RecoveryInProgress())
 		elog(ERROR, "can only be used at end of recovery");
 	if (pagePtr % XLOG_BLCKSZ != 0)
-		elog(ERROR, "invalid position for missing continuation record %X/%X",
+		elog(ERROR, "invalid position for missing continuation record %X/%08X",
 			 LSN_FORMAT_ARGS(pagePtr));
 
 	/* The current WAL insert position should be right after the page header */
@@ -7652,7 +7652,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 		startPos += SizeOfXLogShortPHD;
 	recptr = GetXLogInsertRecPtr();
 	if (recptr != startPos)
-		elog(ERROR, "invalid WAL insert position %X/%X for OVERWRITE_CONTRECORD",
+		elog(ERROR, "invalid WAL insert position %X/%08X for OVERWRITE_CONTRECORD",
 			 LSN_FORMAT_ARGS(recptr));
 
 	START_CRIT_SECTION();
@@ -7682,7 +7682,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 
 	/* check that the record was inserted to the right place */
 	if (ProcLastRecPtr != startPos)
-		elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position %X/%X",
+		elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position %X/%08X",
 			 LSN_FORMAT_ARGS(ProcLastRecPtr));
 
 	XLogFlush(recptr);
@@ -7751,7 +7751,7 @@ RecoveryRestartPoint(const CheckPoint *checkPoint, XLogReaderState *record)
 	if (XLogHaveInvalidPages())
 	{
 		elog(DEBUG2,
-			 "could not record restart point at %X/%X because there "
+			 "could not record restart point at %X/%08X because there "
 			 "are unresolved references to invalid pages",
 			 LSN_FORMAT_ARGS(checkPoint->redo));
 		return;
@@ -7832,7 +7832,7 @@ CreateRestartPoint(int flags)
 		lastCheckPoint.redo <= ControlFile->checkPointCopy.redo)
 	{
 		ereport(DEBUG2,
-				(errmsg_internal("skipping restartpoint, already performed at %X/%X",
+				(errmsg_internal("skipping restartpoint, already performed at %X/%08X",
 								 LSN_FORMAT_ARGS(lastCheckPoint.redo))));
 
 		UpdateMinRecoveryPoint(InvalidXLogRecPtr, true);
@@ -8017,7 +8017,7 @@ CreateRestartPoint(int flags)
 
 	xtime = GetLatestXTime();
 	ereport((log_checkpoints ? LOG : DEBUG2),
-			(errmsg("recovery restart point at %X/%X",
+			(errmsg("recovery restart point at %X/%08X",
 					LSN_FORMAT_ARGS(lastCheckPoint.redo)),
 			 xtime ? errdetail("Last completed transaction was at log time %s.",
 							   timestamptz_to_str(xtime)) : 0));
@@ -8281,7 +8281,7 @@ XLogRestorePoint(const char *rpName)
 	RecPtr = XLogInsert(RM_XLOG_ID, XLOG_RESTORE_POINT);
 
 	ereport(LOG,
-			(errmsg("restore point \"%s\" created at %X/%X",
+			(errmsg("restore point \"%s\" created at %X/%08X",
 					rpName, LSN_FORMAT_ARGS(RecPtr))));
 
 	return RecPtr;
diff --git a/src/backend/access/transam/xlogbackup.c b/src/backend/access/transam/xlogbackup.c
index 342590e0a46..cda4b38b7d6 100644
--- a/src/backend/access/transam/xlogbackup.c
+++ b/src/backend/access/transam/xlogbackup.c
@@ -42,7 +42,7 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 
 	XLByteToSeg(state->startpoint, startsegno, wal_segment_size);
 	XLogFileName(startxlogfile, state->starttli, startsegno, wal_segment_size);
-	appendStringInfo(result, "START WAL LOCATION: %X/%X (file %s)\n",
+	appendStringInfo(result, "START WAL LOCATION: %X/%08X (file %s)\n",
 					 LSN_FORMAT_ARGS(state->startpoint), startxlogfile);
 
 	if (ishistoryfile)
@@ -52,11 +52,11 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 
 		XLByteToSeg(state->stoppoint, stopsegno, wal_segment_size);
 		XLogFileName(stopxlogfile, state->stoptli, stopsegno, wal_segment_size);
-		appendStringInfo(result, "STOP WAL LOCATION: %X/%X (file %s)\n",
+		appendStringInfo(result, "STOP WAL LOCATION: %X/%08X (file %s)\n",
 						 LSN_FORMAT_ARGS(state->stoppoint), stopxlogfile);
 	}
 
-	appendStringInfo(result, "CHECKPOINT LOCATION: %X/%X\n",
+	appendStringInfo(result, "CHECKPOINT LOCATION: %X/%08X\n",
 					 LSN_FORMAT_ARGS(state->checkpointloc));
 	appendStringInfoString(result, "BACKUP METHOD: streamed\n");
 	appendStringInfo(result, "BACKUP FROM: %s\n",
@@ -81,7 +81,7 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 	Assert(XLogRecPtrIsInvalid(state->istartpoint) == (state->istarttli == 0));
 	if (!XLogRecPtrIsInvalid(state->istartpoint))
 	{
-		appendStringInfo(result, "INCREMENTAL FROM LSN: %X/%X\n",
+		appendStringInfo(result, "INCREMENTAL FROM LSN: %X/%08X\n",
 						 LSN_FORMAT_ARGS(state->istartpoint));
 		appendStringInfo(result, "INCREMENTAL FROM TLI: %u\n",
 						 state->istarttli);
diff --git a/src/backend/access/transam/xlogprefetcher.c b/src/backend/access/transam/xlogprefetcher.c
index 7735562db01..ed3aacabc98 100644
--- a/src/backend/access/transam/xlogprefetcher.c
+++ b/src/backend/access/transam/xlogprefetcher.c
@@ -546,7 +546,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing all readahead until %X/%X is replayed due to possible TLI change",
+						 "suppressing all readahead until %X/%08X is replayed due to possible TLI change",
 						 LSN_FORMAT_ARGS(record->lsn));
 #endif
 
@@ -579,7 +579,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing prefetch in database %u until %X/%X is replayed due to raw file copy",
+						 "suppressing prefetch in database %u until %X/%08X is replayed due to raw file copy",
 						 rlocator.dbOid,
 						 LSN_FORMAT_ARGS(record->lsn));
 #endif
@@ -607,7 +607,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 						elog(XLOGPREFETCHER_DEBUG_LEVEL,
-							 "suppressing prefetch in relation %u/%u/%u until %X/%X is replayed, which creates the relation",
+							 "suppressing prefetch in relation %u/%u/%u until %X/%08X is replayed, which creates the relation",
 							 xlrec->rlocator.spcOid,
 							 xlrec->rlocator.dbOid,
 							 xlrec->rlocator.relNumber,
@@ -630,7 +630,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, which truncates the relation",
+						 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%08X is replayed, which truncates the relation",
 						 xlrec->rlocator.spcOid,
 						 xlrec->rlocator.dbOid,
 						 xlrec->rlocator.relNumber,
@@ -729,7 +729,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 			{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 				elog(XLOGPREFETCHER_DEBUG_LEVEL,
-					 "suppressing all prefetch in relation %u/%u/%u until %X/%X is replayed, because the relation does not exist on disk",
+					 "suppressing all prefetch in relation %u/%u/%u until %X/%08X is replayed, because the relation does not exist on disk",
 					 reln->smgr_rlocator.locator.spcOid,
 					 reln->smgr_rlocator.locator.dbOid,
 					 reln->smgr_rlocator.locator.relNumber,
@@ -750,7 +750,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 			{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 				elog(XLOGPREFETCHER_DEBUG_LEVEL,
-					 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, because the relation is too small",
+					 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%08X is replayed, because the relation is too small",
 					 reln->smgr_rlocator.locator.spcOid,
 					 reln->smgr_rlocator.locator.dbOid,
 					 reln->smgr_rlocator.locator.relNumber,
@@ -928,7 +928,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator,
 		{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 			elog(XLOGPREFETCHER_DEBUG_LEVEL,
-				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (blocks >= %u filtered)",
+				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%08X is replayed (blocks >= %u filtered)",
 				 rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno,
 				 LSN_FORMAT_ARGS(filter->filter_until_replayed),
 				 filter->filter_from_block);
@@ -944,7 +944,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator,
 		{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 			elog(XLOGPREFETCHER_DEBUG_LEVEL,
-				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (whole database)",
+				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%08X is replayed (whole database)",
 				 rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno,
 				 LSN_FORMAT_ARGS(filter->filter_until_replayed));
 #endif
diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index 2790ade1f91..ac1f801b1eb 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -617,7 +617,7 @@ restart:
 	}
 	else if (targetRecOff < pageHeaderSize)
 	{
-		report_invalid_record(state, "invalid record offset at %X/%X: expected at least %u, got %u",
+		report_invalid_record(state, "invalid record offset at %X/%08X: expected at least %u, got %u",
 							  LSN_FORMAT_ARGS(RecPtr),
 							  pageHeaderSize, targetRecOff);
 		goto err;
@@ -626,7 +626,7 @@ restart:
 	if ((((XLogPageHeader) state->readBuf)->xlp_info & XLP_FIRST_IS_CONTRECORD) &&
 		targetRecOff == pageHeaderSize)
 	{
-		report_invalid_record(state, "contrecord is requested by %X/%X",
+		report_invalid_record(state, "contrecord is requested by %X/%08X",
 							  LSN_FORMAT_ARGS(RecPtr));
 		goto err;
 	}
@@ -667,7 +667,7 @@ restart:
 		if (total_len < SizeOfXLogRecord)
 		{
 			report_invalid_record(state,
-								  "invalid record length at %X/%X: expected at least %u, got %u",
+								  "invalid record length at %X/%08X: expected at least %u, got %u",
 								  LSN_FORMAT_ARGS(RecPtr),
 								  (uint32) SizeOfXLogRecord, total_len);
 			goto err;
@@ -756,7 +756,7 @@ restart:
 			if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD))
 			{
 				report_invalid_record(state,
-									  "there is no contrecord flag at %X/%X",
+									  "there is no contrecord flag at %X/%08X",
 									  LSN_FORMAT_ARGS(RecPtr));
 				goto err;
 			}
@@ -769,7 +769,7 @@ restart:
 				total_len != (pageHeader->xlp_rem_len + gotlen))
 			{
 				report_invalid_record(state,
-									  "invalid contrecord length %u (expected %lld) at %X/%X",
+									  "invalid contrecord length %u (expected %lld) at %X/%08X",
 									  pageHeader->xlp_rem_len,
 									  ((long long) total_len) - gotlen,
 									  LSN_FORMAT_ARGS(RecPtr));
@@ -1132,7 +1132,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 	if (record->xl_tot_len < SizeOfXLogRecord)
 	{
 		report_invalid_record(state,
-							  "invalid record length at %X/%X: expected at least %u, got %u",
+							  "invalid record length at %X/%08X: expected at least %u, got %u",
 							  LSN_FORMAT_ARGS(RecPtr),
 							  (uint32) SizeOfXLogRecord, record->xl_tot_len);
 		return false;
@@ -1140,7 +1140,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 	if (!RmgrIdIsValid(record->xl_rmid))
 	{
 		report_invalid_record(state,
-							  "invalid resource manager ID %u at %X/%X",
+							  "invalid resource manager ID %u at %X/%08X",
 							  record->xl_rmid, LSN_FORMAT_ARGS(RecPtr));
 		return false;
 	}
@@ -1153,7 +1153,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 		if (!(record->xl_prev < RecPtr))
 		{
 			report_invalid_record(state,
-								  "record with incorrect prev-link %X/%X at %X/%X",
+								  "record with incorrect prev-link %X/%08X at %X/%08X",
 								  LSN_FORMAT_ARGS(record->xl_prev),
 								  LSN_FORMAT_ARGS(RecPtr));
 			return false;
@@ -1169,7 +1169,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 		if (record->xl_prev != PrevRecPtr)
 		{
 			report_invalid_record(state,
-								  "record with incorrect prev-link %X/%X at %X/%X",
+								  "record with incorrect prev-link %X/%08X at %X/%08X",
 								  LSN_FORMAT_ARGS(record->xl_prev),
 								  LSN_FORMAT_ARGS(RecPtr));
 			return false;
@@ -1207,7 +1207,7 @@ ValidXLogRecord(XLogReaderState *state, XLogRecord *record, XLogRecPtr recptr)
 	if (!EQ_CRC32C(record->xl_crc, crc))
 	{
 		report_invalid_record(state,
-							  "incorrect resource manager data checksum in record at %X/%X",
+							  "incorrect resource manager data checksum in record at %X/%08X",
 							  LSN_FORMAT_ARGS(recptr));
 		return false;
 	}
@@ -1241,7 +1241,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u",
 							  hdr->xlp_magic,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1256,7 +1256,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u",
 							  hdr->xlp_info,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1298,7 +1298,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 
 		/* hmm, first page of file doesn't have a long header? */
 		report_invalid_record(state,
-							  "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u",
 							  hdr->xlp_info,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1318,7 +1318,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u",
+							  "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u",
 							  LSN_FORMAT_ARGS(hdr->xlp_pageaddr),
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1344,7 +1344,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 			XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 			report_invalid_record(state,
-								  "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u",
+								  "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u",
 								  hdr->xlp_tli,
 								  state->latestPageTLI,
 								  fname,
@@ -1756,7 +1756,7 @@ DecodeXLogRecord(XLogReaderState *state,
 			if (block_id <= decoded->max_block_id)
 			{
 				report_invalid_record(state,
-									  "out-of-order block_id %u at %X/%X",
+									  "out-of-order block_id %u at %X/%08X",
 									  block_id,
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
@@ -1780,14 +1780,14 @@ DecodeXLogRecord(XLogReaderState *state,
 			if (blk->has_data && blk->data_len == 0)
 			{
 				report_invalid_record(state,
-									  "BKPBLOCK_HAS_DATA set, but no data included at %X/%X",
+									  "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X",
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
 			}
 			if (!blk->has_data && blk->data_len != 0)
 			{
 				report_invalid_record(state,
-									  "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X",
+									  "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X",
 									  (unsigned int) blk->data_len,
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
@@ -1823,7 +1823,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					 blk->bimg_len == BLCKSZ))
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X",
+										  "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X",
 										  (unsigned int) blk->hole_offset,
 										  (unsigned int) blk->hole_length,
 										  (unsigned int) blk->bimg_len,
@@ -1839,7 +1839,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					(blk->hole_offset != 0 || blk->hole_length != 0))
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X",
+										  "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X",
 										  (unsigned int) blk->hole_offset,
 										  (unsigned int) blk->hole_length,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
@@ -1853,7 +1853,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					blk->bimg_len == BLCKSZ)
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X",
+										  "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X",
 										  (unsigned int) blk->bimg_len,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
@@ -1868,7 +1868,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					blk->bimg_len != BLCKSZ)
 				{
 					report_invalid_record(state,
-										  "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X",
+										  "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X",
 										  (unsigned int) blk->data_len,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
@@ -1884,7 +1884,7 @@ DecodeXLogRecord(XLogReaderState *state,
 				if (rlocator == NULL)
 				{
 					report_invalid_record(state,
-										  "BKPBLOCK_SAME_REL set but no previous rel at %X/%X",
+										  "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X",
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
 				}
@@ -1896,7 +1896,7 @@ DecodeXLogRecord(XLogReaderState *state,
 		else
 		{
 			report_invalid_record(state,
-								  "invalid block_id %u at %X/%X",
+								  "invalid block_id %u at %X/%08X",
 								  block_id, LSN_FORMAT_ARGS(state->ReadRecPtr));
 			goto err;
 		}
@@ -1963,7 +1963,7 @@ DecodeXLogRecord(XLogReaderState *state,
 
 shortdata_err:
 	report_invalid_record(state,
-						  "record with invalid length at %X/%X",
+						  "record with invalid length at %X/%08X",
 						  LSN_FORMAT_ARGS(state->ReadRecPtr));
 err:
 	*errormsg = state->errormsg_buf;
@@ -2073,14 +2073,14 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		!record->record->blocks[block_id].in_use)
 	{
 		report_invalid_record(record,
-							  "could not restore image at %X/%X with invalid block %d specified",
+							  "could not restore image at %X/%08X with invalid block %d specified",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
 							  block_id);
 		return false;
 	}
 	if (!record->record->blocks[block_id].has_image)
 	{
-		report_invalid_record(record, "could not restore image at %X/%X with invalid state, block %d",
+		report_invalid_record(record, "could not restore image at %X/%08X with invalid state, block %d",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
 							  block_id);
 		return false;
@@ -2107,7 +2107,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 									bkpb->bimg_len, BLCKSZ - bkpb->hole_length) <= 0)
 				decomp_success = false;
 #else
-			report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d",
+			report_invalid_record(record, "could not restore image at %X/%08X compressed with %s not supported by build, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  "LZ4",
 								  block_id);
@@ -2124,7 +2124,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 			if (ZSTD_isError(decomp_result))
 				decomp_success = false;
 #else
-			report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d",
+			report_invalid_record(record, "could not restore image at %X/%08X compressed with %s not supported by build, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  "zstd",
 								  block_id);
@@ -2133,7 +2133,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		}
 		else
 		{
-			report_invalid_record(record, "could not restore image at %X/%X compressed with unknown method, block %d",
+			report_invalid_record(record, "could not restore image at %X/%08X compressed with unknown method, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  block_id);
 			return false;
@@ -2141,7 +2141,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 
 		if (!decomp_success)
 		{
-			report_invalid_record(record, "could not decompress image at %X/%X, block %d",
+			report_invalid_record(record, "could not decompress image at %X/%08X, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  block_id);
 			return false;
diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c
index 6ce979f2d8b..812995a5a39 100644
--- a/src/backend/access/transam/xlogrecovery.c
+++ b/src/backend/access/transam/xlogrecovery.c
@@ -620,7 +620,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		 * than ControlFile->checkPoint is used.
 		 */
 		ereport(LOG,
-				(errmsg("starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u",
+				(errmsg("starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u",
 						LSN_FORMAT_ARGS(RedoStartLSN),
 						LSN_FORMAT_ARGS(CheckPointLoc),
 						CheckPointTLI)));
@@ -636,7 +636,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 			memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint));
 			wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN);
 			ereport(DEBUG1,
-					(errmsg_internal("checkpoint record is at %X/%X",
+					(errmsg_internal("checkpoint record is at %X/%08X",
 									 LSN_FORMAT_ARGS(CheckPointLoc))));
 			InRecovery = true;	/* force recovery even if SHUTDOWNED */
 
@@ -652,7 +652,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 				if (!ReadRecord(xlogprefetcher, LOG, false,
 								checkPoint.ThisTimeLineID))
 					ereport(FATAL,
-							(errmsg("could not find redo location %X/%X referenced by checkpoint record at %X/%X",
+							(errmsg("could not find redo location %X/%08X referenced by checkpoint record at %X/%08X",
 									LSN_FORMAT_ARGS(checkPoint.redo), LSN_FORMAT_ARGS(CheckPointLoc)),
 							 errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n"
 									 "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n"
@@ -663,7 +663,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		else
 		{
 			ereport(FATAL,
-					(errmsg("could not locate required checkpoint record at %X/%X",
+					(errmsg("could not locate required checkpoint record at %X/%08X",
 							LSN_FORMAT_ARGS(CheckPointLoc)),
 					 errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n"
 							 "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n"
@@ -773,7 +773,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		 */
 		if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
 			ereport(LOG,
-					(errmsg("restarting backup recovery with redo LSN %X/%X",
+					(errmsg("restarting backup recovery with redo LSN %X/%08X",
 							LSN_FORMAT_ARGS(ControlFile->backupStartPoint))));
 
 		/* Get the last valid checkpoint record. */
@@ -786,7 +786,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		if (record != NULL)
 		{
 			ereport(DEBUG1,
-					(errmsg_internal("checkpoint record is at %X/%X",
+					(errmsg_internal("checkpoint record is at %X/%08X",
 									 LSN_FORMAT_ARGS(CheckPointLoc))));
 		}
 		else
@@ -798,7 +798,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 			 * simplify processing around checkpoints.
 			 */
 			ereport(PANIC,
-					(errmsg("could not locate a valid checkpoint record at %X/%X",
+					(errmsg("could not locate a valid checkpoint record at %X/%08X",
 							LSN_FORMAT_ARGS(CheckPointLoc))));
 		}
 		memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint));
@@ -824,7 +824,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 							recoveryTargetName)));
 		else if (recoveryTarget == RECOVERY_TARGET_LSN)
 			ereport(LOG,
-					(errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%X\"",
+					(errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%08X\"",
 							LSN_FORMAT_ARGS(recoveryTargetLSN))));
 		else if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE)
 			ereport(LOG,
@@ -855,7 +855,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 				(errmsg("requested timeline %u is not a child of this server's history",
 						recoveryTargetTLI),
 		/* translator: %s is a backup_label file or a pg_control file */
-				 errdetail("Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X.",
+				 errdetail("Latest checkpoint in file \"%s\" is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X.",
 						   haveBackupLabel ? "backup_label" : "pg_control",
 						   LSN_FORMAT_ARGS(CheckPointLoc),
 						   CheckPointTLI,
@@ -870,13 +870,13 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) !=
 		ControlFile->minRecoveryPointTLI)
 		ereport(FATAL,
-				(errmsg("requested timeline %u does not contain minimum recovery point %X/%X on timeline %u",
+				(errmsg("requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u",
 						recoveryTargetTLI,
 						LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint),
 						ControlFile->minRecoveryPointTLI)));
 
 	ereport(DEBUG1,
-			(errmsg_internal("redo record is at %X/%X; shutdown %s",
+			(errmsg_internal("redo record is at %X/%08X; shutdown %s",
 							 LSN_FORMAT_ARGS(checkPoint.redo),
 							 wasShutdown ? "true" : "false")));
 	ereport(DEBUG1,
@@ -1253,14 +1253,14 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI,
 	 * is pretty crude, but we are not expecting any variability in the file
 	 * format).
 	 */
-	if (fscanf(lfp, "START WAL LOCATION: %X/%X (file %08X%16s)%c",
+	if (fscanf(lfp, "START WAL LOCATION: %X/%08X (file %08X%16s)%c",
 			   &hi, &lo, &tli_from_walseg, startxlogfilename, &ch) != 5 || ch != '\n')
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				 errmsg("invalid data in file \"%s\"", BACKUP_LABEL_FILE)));
 	RedoStartLSN = ((uint64) hi) << 32 | lo;
 	RedoStartTLI = tli_from_walseg;
-	if (fscanf(lfp, "CHECKPOINT LOCATION: %X/%X%c",
+	if (fscanf(lfp, "CHECKPOINT LOCATION: %X/%08X%c",
 			   &hi, &lo, &ch) != 3 || ch != '\n')
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
@@ -1332,7 +1332,7 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI,
 								 tli_from_file, BACKUP_LABEL_FILE)));
 	}
 
-	if (fscanf(lfp, "INCREMENTAL FROM LSN: %X/%X\n", &hi, &lo) > 0)
+	if (fscanf(lfp, "INCREMENTAL FROM LSN: %X/%08X\n", &hi, &lo) > 0)
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				 errmsg("this is an incremental backup, not a data directory"),
@@ -1722,7 +1722,7 @@ PerformWalRecovery(void)
 		if (record->xl_rmid != RM_XLOG_ID ||
 			(record->xl_info & ~XLR_INFO_MASK) != XLOG_CHECKPOINT_REDO)
 			ereport(FATAL,
-					(errmsg("unexpected record type found at redo point %X/%X",
+					(errmsg("unexpected record type found at redo point %X/%08X",
 							LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))));
 	}
 	else
@@ -1745,7 +1745,7 @@ PerformWalRecovery(void)
 		RmgrStartup();
 
 		ereport(LOG,
-				(errmsg("redo starts at %X/%X",
+				(errmsg("redo starts at %X/%08X",
 						LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))));
 
 		/* Prepare to report progress of the redo phase. */
@@ -1758,7 +1758,7 @@ PerformWalRecovery(void)
 		do
 		{
 			if (!StandbyMode)
-				ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X",
+				ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X",
 										 LSN_FORMAT_ARGS(xlogreader->ReadRecPtr));
 
 #ifdef WAL_DEBUG
@@ -1767,7 +1767,7 @@ PerformWalRecovery(void)
 				StringInfoData buf;
 
 				initStringInfo(&buf);
-				appendStringInfo(&buf, "REDO @ %X/%X; LSN %X/%X: ",
+				appendStringInfo(&buf, "REDO @ %X/%08X; LSN %X/%08X: ",
 								 LSN_FORMAT_ARGS(xlogreader->ReadRecPtr),
 								 LSN_FORMAT_ARGS(xlogreader->EndRecPtr));
 				xlog_outrec(&buf, xlogreader);
@@ -1880,7 +1880,7 @@ PerformWalRecovery(void)
 		RmgrCleanup();
 
 		ereport(LOG,
-				(errmsg("redo done at %X/%X system usage: %s",
+				(errmsg("redo done at %X/%08X system usage: %s",
 						LSN_FORMAT_ARGS(xlogreader->ReadRecPtr),
 						pg_rusage_show(&ru0))));
 		xtime = GetLatestXTime();
@@ -2092,7 +2092,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 
 		memcpy(&xlrec, XLogRecGetData(record), sizeof(xl_overwrite_contrecord));
 		if (xlrec.overwritten_lsn != record->overwrittenRecPtr)
-			elog(FATAL, "mismatching overwritten LSN %X/%X -> %X/%X",
+			elog(FATAL, "mismatching overwritten LSN %X/%08X -> %X/%08X",
 				 LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 				 LSN_FORMAT_ARGS(record->overwrittenRecPtr));
 
@@ -2101,7 +2101,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 		missingContrecPtr = InvalidXLogRecPtr;
 
 		ereport(LOG,
-				(errmsg("successfully skipped missing contrecord at %X/%X, overwritten at %s",
+				(errmsg("successfully skipped missing contrecord at %X/%08X, overwritten at %s",
 						LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 						timestamptz_to_str(xlrec.overwrite_time))));
 
@@ -2129,7 +2129,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 			backupEndPoint = lsn;
 		}
 		else
-			elog(DEBUG1, "saw end-of-backup record for backup starting at %X/%X, waiting for %X/%X",
+			elog(DEBUG1, "saw end-of-backup record for backup starting at %X/%08X, waiting for %X/%08X",
 				 LSN_FORMAT_ARGS(startpoint), LSN_FORMAT_ARGS(backupStartPoint));
 	}
 }
@@ -2224,7 +2224,7 @@ CheckRecoveryConsistency(void)
 		backupEndRequired = false;
 
 		ereport(LOG,
-				(errmsg("completed backup recovery with redo LSN %X/%X and end LSN %X/%X",
+				(errmsg("completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X",
 						LSN_FORMAT_ARGS(saveBackupStartPoint),
 						LSN_FORMAT_ARGS(saveBackupEndPoint))));
 	}
@@ -2255,7 +2255,7 @@ CheckRecoveryConsistency(void)
 		reachedConsistency = true;
 		SendPostmasterSignal(PMSIGNAL_RECOVERY_CONSISTENT);
 		ereport(LOG,
-				(errmsg("consistent recovery state reached at %X/%X",
+				(errmsg("consistent recovery state reached at %X/%08X",
 						LSN_FORMAT_ARGS(lastReplayedEndRecPtr))));
 	}
 
@@ -2293,7 +2293,7 @@ rm_redo_error_callback(void *arg)
 	xlog_block_info(&buf, record);
 
 	/* translator: %s is a WAL record description */
-	errcontext("WAL redo at %X/%X for %s",
+	errcontext("WAL redo at %X/%08X for %s",
 			   LSN_FORMAT_ARGS(record->ReadRecPtr),
 			   buf.data);
 
@@ -2328,7 +2328,7 @@ xlog_outdesc(StringInfo buf, XLogReaderState *record)
 static void
 xlog_outrec(StringInfo buf, XLogReaderState *record)
 {
-	appendStringInfo(buf, "prev %X/%X; xid %u",
+	appendStringInfo(buf, "prev %X/%08X; xid %u",
 					 LSN_FORMAT_ARGS(XLogRecGetPrev(record)),
 					 XLogRecGetXid(record));
 
@@ -2416,7 +2416,7 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI, TimeLineID prevTLI,
 		lsn < minRecoveryPoint &&
 		newTLI > minRecoveryPointTLI)
 		ereport(PANIC,
-				(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u",
+				(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u",
 						newTLI,
 						LSN_FORMAT_ARGS(minRecoveryPoint),
 						minRecoveryPointTLI)));
@@ -2621,7 +2621,7 @@ recoveryStopsBefore(XLogReaderState *record)
 		recoveryStopTime = 0;
 		recoveryStopName[0] = '\0';
 		ereport(LOG,
-				(errmsg("recovery stopping before WAL location (LSN) \"%X/%X\"",
+				(errmsg("recovery stopping before WAL location (LSN) \"%X/%08X\"",
 						LSN_FORMAT_ARGS(recoveryStopLSN))));
 		return true;
 	}
@@ -2789,7 +2789,7 @@ recoveryStopsAfter(XLogReaderState *record)
 		recoveryStopTime = 0;
 		recoveryStopName[0] = '\0';
 		ereport(LOG,
-				(errmsg("recovery stopping after WAL location (LSN) \"%X/%X\"",
+				(errmsg("recovery stopping after WAL location (LSN) \"%X/%08X\"",
 						LSN_FORMAT_ARGS(recoveryStopLSN))));
 		return true;
 	}
@@ -2910,7 +2910,7 @@ getRecoveryStopReason(void)
 				 timestamptz_to_str(recoveryStopTime));
 	else if (recoveryTarget == RECOVERY_TARGET_LSN)
 		snprintf(reason, sizeof(reason),
-				 "%s LSN %X/%X\n",
+				 "%s LSN %X/%08X\n",
 				 recoveryStopAfter ? "after" : "before",
 				 LSN_FORMAT_ARGS(recoveryStopLSN));
 	else if (recoveryTarget == RECOVERY_TARGET_NAME)
@@ -3213,7 +3213,7 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode,
 			XLogFileName(fname, xlogreader->seg.ws_tli, segno,
 						 wal_segment_size);
 			ereport(emode_for_corrupt_record(emode, xlogreader->EndRecPtr),
-					(errmsg("unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u",
+					(errmsg("unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u",
 							xlogreader->latestPageTLI,
 							fname,
 							LSN_FORMAT_ARGS(xlogreader->latestPagePtr),
@@ -3429,14 +3429,14 @@ retry:
 			errno = save_errno;
 			ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
 					(errcode_for_file_access(),
-					 errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: %m",
+					 errmsg("could not read from WAL segment %s, LSN %X/%08X, offset %u: %m",
 							fname, LSN_FORMAT_ARGS(targetPagePtr),
 							readOff)));
 		}
 		else
 			ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
 					(errcode(ERRCODE_DATA_CORRUPTED),
-					 errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu",
+					 errmsg("could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu",
 							fname, LSN_FORMAT_ARGS(targetPagePtr),
 							readOff, r, (Size) XLOG_BLCKSZ)));
 		goto next_record_is_invalid;
@@ -3718,7 +3718,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
 						wait_time = wal_retrieve_retry_interval -
 							TimestampDifferenceMilliseconds(last_fail_time, now);
 
-						elog(LOG, "waiting for WAL to become available at %X/%X",
+						elog(LOG, "waiting for WAL to become available at %X/%08X",
 							 LSN_FORMAT_ARGS(RecPtr));
 
 						/* Do background tasks that might benefit us later. */
@@ -3864,7 +3864,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
 							tli = tliOfPointInHistory(tliRecPtr, expectedTLEs);
 
 							if (curFileTLI > 0 && tli < curFileTLI)
-								elog(ERROR, "according to history file, WAL location %X/%X belongs to timeline %u, but previous recovered WAL file came from timeline %u",
+								elog(ERROR, "according to history file, WAL location %X/%08X belongs to timeline %u, but previous recovered WAL file came from timeline %u",
 									 LSN_FORMAT_ARGS(tliRecPtr),
 									 tli, curFileTLI);
 						}
@@ -4177,7 +4177,7 @@ rescanLatestTimeLine(TimeLineID replayTLI, XLogRecPtr replayLSN)
 	if (currentTle->end < replayLSN)
 	{
 		ereport(LOG,
-				(errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%X",
+				(errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%08X",
 						newtarget,
 						replayTLI,
 						LSN_FORMAT_ARGS(replayLSN))));
diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index c389b27f77d..27ea52fdfee 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -795,7 +795,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage,
 
 		list_free_deep(timelineHistory);
 
-		elog(DEBUG3, "switched to timeline %u valid until %X/%X",
+		elog(DEBUG3, "switched to timeline %u valid until %X/%08X",
 			 state->currTLI,
 			 LSN_FORMAT_ARGS(state->currTLIValidUntil));
 	}
diff --git a/src/backend/backup/backup_manifest.c b/src/backend/backup/backup_manifest.c
index 22e2be37c95..d05252f383c 100644
--- a/src/backend/backup/backup_manifest.c
+++ b/src/backend/backup/backup_manifest.c
@@ -281,7 +281,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr,
 		}
 
 		AppendToManifest(manifest,
-						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
+						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%08X\", \"End-LSN\": \"%X/%08X\" }",
 						 first_wal_range ? "" : ",\n",
 						 entry->tli,
 						 LSN_FORMAT_ARGS(tl_beginptr),
diff --git a/src/backend/backup/basebackup_copy.c b/src/backend/backup/basebackup_copy.c
index a284ce318ff..18b0b5a52d3 100644
--- a/src/backend/backup/basebackup_copy.c
+++ b/src/backend/backup/basebackup_copy.c
@@ -361,7 +361,7 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli)
 	tstate = begin_tup_output_tupdesc(dest, tupdesc, &TTSOpsVirtual);
 
 	/* Data row */
-	values[0] = CStringGetTextDatum(psprintf("%X/%X", LSN_FORMAT_ARGS(ptr)));
+	values[0] = CStringGetTextDatum(psprintf("%X/%08X", LSN_FORMAT_ARGS(ptr)));
 	values[1] = Int64GetDatum(tli);
 	do_tup_output(tstate, values, nulls);
 
diff --git a/src/backend/backup/basebackup_incremental.c b/src/backend/backup/basebackup_incremental.c
index 28491b1e0ab..a0d48ff0fef 100644
--- a/src/backend/backup/basebackup_incremental.c
+++ b/src/backend/backup/basebackup_incremental.c
@@ -409,7 +409,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->start_lsn < tlep[i]->begin)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X",
+						 errmsg("manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->start_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->begin))));
@@ -419,7 +419,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->start_lsn != tlep[i]->begin)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X",
+						 errmsg("manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->start_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->begin))));
@@ -430,7 +430,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->end_lsn > backup_state->startpoint)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X",
+						 errmsg("manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->end_lsn),
 								LSN_FORMAT_ARGS(backup_state->startpoint)),
@@ -441,7 +441,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->end_lsn != tlep[i]->end)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X",
+						 errmsg("manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->end_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->end))));
@@ -522,18 +522,18 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (XLogRecPtrIsInvalid(tli_missing_lsn))
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist",
+						 errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist",
 								tle->tli,
 								LSN_FORMAT_ARGS(tli_start_lsn),
 								LSN_FORMAT_ARGS(tli_end_lsn))));
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete",
+						 errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete",
 								tle->tli,
 								LSN_FORMAT_ARGS(tli_start_lsn),
 								LSN_FORMAT_ARGS(tli_end_lsn)),
-						 errdetail("The first unsummarized LSN in this range is %X/%X.",
+						 errdetail("The first unsummarized LSN in this range is %X/%08X.",
 								   LSN_FORMAT_ARGS(tli_missing_lsn))));
 		}
 
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 4ff246cd943..e23b0de7242 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -1539,7 +1539,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
 					if (!XLogRecPtrIsInvalid(remote_lsn) && opts.lsn < remote_lsn)
 						ereport(ERROR,
 								(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-								 errmsg("skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X",
+								 errmsg("skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X",
 										LSN_FORMAT_ARGS(opts.lsn),
 										LSN_FORMAT_ARGS(remote_lsn))));
 				}
diff --git a/src/backend/po/de.po b/src/backend/po/de.po
index 19f1a2abea0..61ba89cdcd9 100644
--- a/src/backend/po/de.po
+++ b/src/backend/po/de.po
@@ -2210,18 +2210,18 @@ msgstr "Fehlgeschlagen beim Anlegen eines WAL-Leseprozessors."
 
 #: access/transam/twophase.c:1445
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%X lesen: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%08X lesen: %s"
 
 #: access/transam/twophase.c:1450
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%X lesen"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "konnte Zweiphasen-Status nicht aus dem WAL bei %X/%08X lesen"
 
 #: access/transam/twophase.c:1458
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "erwartete Zweiphasen-Status-Daten sind nicht im WAL bei %X/%X vorhanden"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "erwartete Zweiphasen-Status-Daten sind nicht im WAL bei %X/%08X vorhanden"
 
 #: access/transam/twophase.c:1754
 #, c-format
@@ -2277,8 +2277,8 @@ msgstr "konnte Zweiphasen-Statusdatei für Transaktion %u nicht wiederherstellen
 
 #: access/transam/twophase.c:2526
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
-msgstr "Zweiphasen-Statusdatei wurde in WAL-Eintrag %X/%X gefunden, aber diese Transaktion wurde schon von der Festplatte wiederhergestellt."
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
+msgstr "Zweiphasen-Statusdatei wurde in WAL-Eintrag %X/%08X gefunden, aber diese Transaktion wurde schon von der Festplatte wiederhergestellt."
 
 #: access/transam/twophase.c:2534 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209
 #, c-format
@@ -2437,13 +2437,13 @@ msgstr "kann nicht mehr als 2^32-1 Subtransaktionen in einer Transaktion haben"
 
 #: access/transam/xlog.c:1536
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "Flush hinter das Ende des erzeugten WAL angefordert; Anforderung %X/%X, aktuelle Position %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "Flush hinter das Ende des erzeugten WAL angefordert; Anforderung %X/%08X, aktuelle Position %X/%08X"
 
 #: access/transam/xlog.c:1763
 #, c-format
-msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X"
-msgstr "kann nicht hinter das Ende des erzeugten WAL lesen: Anforderung %X/%X, aktuelle Position %X/%X"
+msgid "cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X"
+msgstr "kann nicht hinter das Ende des erzeugten WAL lesen: Anforderung %X/%08X, aktuelle Position %X/%08X"
 
 #: access/transam/xlog.c:2204 access/transam/xlog.c:4495
 #, c-format
@@ -2754,13 +2754,13 @@ msgstr "Checkpoint beginnt:%s%s%s%s%s%s%s%s"
 
 #: access/transam/xlog.c:6668
 #, c-format
-msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "Restart-Punkt komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB; LSN=%X/%X, Redo-LSN=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "Restart-Punkt komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB; LSN=%X/%08X, Redo-LSN=%X/%08X"
 
 #: access/transam/xlog.c:6691
 #, c-format
-msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "Checkpoint komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB; LSN=%X/%X, Redo-LSN=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "Checkpoint komplett: %d Puffer geschrieben (%.1f%%); %d WAL-Datei(en) hinzugefügt, %d entfernt, %d wiederverwendet; Schreiben=%ld,%03d s, Sync=%ld,%03d s, gesamt=%ld,%03d s; sync. Dateien=%d, längste=%ld,%03d s, Durchschnitt=%ld.%03d s; Entfernung=%d kB, Schätzung=%d kB; LSN=%X/%08X, Redo-LSN=%X/%08X"
 
 #: access/transam/xlog.c:7165
 #, c-format
@@ -2769,8 +2769,8 @@ msgstr "gleichzeitige Write-Ahead-Log-Aktivität während das Datenbanksystem he
 
 #: access/transam/xlog.c:7749
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "Recovery-Restart-Punkt bei %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "Recovery-Restart-Punkt bei %X/%08X"
 
 #: access/transam/xlog.c:7751
 #, c-format
@@ -2779,8 +2779,8 @@ msgstr "Die letzte vollständige Transaktion war bei Logzeit %s."
 
 #: access/transam/xlog.c:8013
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "Restore-Punkt »%s« erzeugt bei %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "Restore-Punkt »%s« erzeugt bei %X/%08X"
 
 #: access/transam/xlog.c:8220
 #, c-format
@@ -3041,53 +3041,53 @@ msgstr "»recovery_prefetch« wird auf Plattformen ohne posix_fadvise() nicht un
 
 #: access/transam/xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ungültiger Datensatz-Offset bei %X/%X: mindestens %u erwartet, %u erhalten"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ungültiger Datensatz-Offset bei %X/%08X: mindestens %u erwartet, %u erhalten"
 
 #: access/transam/xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "Contrecord angefordert von %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "Contrecord angefordert von %X/%08X"
 
 #: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ungültige Datensatzlänge bei %X/%X: mindestens %u erwartet, %u erhalten"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ungültige Datensatzlänge bei %X/%08X: mindestens %u erwartet, %u erhalten"
 
 #: access/transam/xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "keine Contrecord-Flag bei %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "keine Contrecord-Flag bei %X/%08X"
 
 #: access/transam/xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%08X"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ungültige Resource-Manager-ID %u bei %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ungültige Resource-Manager-ID %u bei %X/%08X"
 
 #: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "Datensatz mit falschem Prev-Link %X/%08X bei %X/%08X"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%08X"
 
 #: access/transam/xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ungültige magische Zahl %04X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ungültige magische Zahl %04X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ungültige Info-Bits %04X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ungültige Info-Bits %04X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: access/transam/xlogreader.c:1274
 #, c-format
@@ -3106,63 +3106,63 @@ msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im
 
 #: access/transam/xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "unerwartete Pageaddr %X/%X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "unerwartete Pageaddr %X/%08X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: access/transam/xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: access/transam/xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u außer der Reihe bei %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u außer der Reihe bei %X/%08X"
 
 #: access/transam/xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%08X"
 
 #: access/transam/xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%08X"
 
 #: access/transam/xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%08X"
 
 #: access/transam/xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%08X"
 
 #: access/transam/xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%08X"
 
 #: access/transam/xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%08X"
 
 #: access/transam/xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%08X"
 
 #: access/transam/xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "ungültige block_id %u bei %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "ungültige block_id %u bei %X/%08X"
 
 #: access/transam/xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "Datensatz mit ungültiger Länge bei %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "Datensatz mit ungültiger Länge bei %X/%08X"
 
 #: access/transam/xlogreader.c:1982
 #, c-format
@@ -3171,38 +3171,38 @@ msgstr "konnte Backup-Block mit ID %d nicht im WAL-Eintrag finden"
 
 #: access/transam/xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "konnte Abbild bei %X/%X mit ungültigem angegebenen Block %d nicht wiederherstellen"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "konnte Abbild bei %X/%08X mit ungültigem angegebenen Block %d nicht wiederherstellen"
 
 #: access/transam/xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "konnte Abbild mit ungültigem Zustand bei %X/%X nicht wiederherstellen, Block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "konnte Abbild mit ungültigem Zustand bei %X/%08X nicht wiederherstellen, Block %d"
 
 #: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "konnte Abbild bei %X/%X nicht wiederherstellen, komprimiert mit %s, nicht unterstützt von dieser Installation, Block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht wiederherstellen, komprimiert mit %s, nicht unterstützt von dieser Installation, Block %d"
 
 #: access/transam/xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "konnte Abbild bei %X/%X nicht wiederherstellen, komprimiert mit unbekannter Methode, Block %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht wiederherstellen, komprimiert mit unbekannter Methode, Block %d"
 
 #: access/transam/xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "konnte Abbild bei %X/%X nicht dekomprimieren, Block %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht dekomprimieren, Block %d"
 
 #: access/transam/xlogrecovery.c:617
 #, c-format
-msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u"
-msgstr "starte Wiederherstellung aus Backup mit Redo-LSN %X/%X, Checkpoint-LSN %X/%X, auf Zeitleisten-ID %u"
+msgid "starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u"
+msgstr "starte Wiederherstellung aus Backup mit Redo-LSN %X/%08X, Checkpoint-LSN %X/%08X, auf Zeitleisten-ID %u"
 
 #: access/transam/xlogrecovery.c:649
 #, fuzzy, c-format
 #| msgid "could not find redo location referenced by checkpoint record"
-msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X"
+msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
 msgstr "konnte die vom Checkpoint-Datensatz referenzierte Redo-Position nicht finden"
 
 #: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662
@@ -3218,8 +3218,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:660
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "konnte den nötigen Checkpoint-Datensatz bei %X/%X nicht finden"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "konnte den nötigen Checkpoint-Datensatz bei %X/%08X nicht finden"
 
 #: access/transam/xlogrecovery.c:690 commands/tablespace.c:664
 #, c-format
@@ -3243,13 +3243,13 @@ msgstr "Konnte Datei »%s« nicht in »%s« umbenennen: %m."
 
 #: access/transam/xlogrecovery.c:770
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "starte Wiederherstellung aus Backup neu mit Redo-LSN %X/%X"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "starte Wiederherstellung aus Backup neu mit Redo-LSN %X/%08X"
 
 #: access/transam/xlogrecovery.c:795
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "konnte keinen gültigen Checkpoint-Datensatz bei %X/%X finden"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "konnte keinen gültigen Checkpoint-Datensatz bei %X/%08X finden"
 
 #: access/transam/xlogrecovery.c:806
 #, c-format
@@ -3273,8 +3273,8 @@ msgstr "starte Point-in-Time-Recovery bis »%s«"
 
 #: access/transam/xlogrecovery.c:821
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "starte Point-in-Time-Recovery bis WAL-Position (LSN) »%X/%X«"
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "starte Point-in-Time-Recovery bis WAL-Position (LSN) »%X/%08X«"
 
 #: access/transam/xlogrecovery.c:825
 #, c-format
@@ -3293,13 +3293,13 @@ msgstr "angeforderte Zeitleiste %u ist kein Kind der History dieses Servers"
 
 #: access/transam/xlogrecovery.c:851
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "Neuester Checkpoint ist bei %X/%X auf Zeitleiste %u, aber in der History der angeforderten Zeitleiste zweigte der Server von dieser Zeitleiste bei %X/%X ab."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "Neuester Checkpoint ist bei %X/%08X auf Zeitleiste %u, aber in der History der angeforderten Zeitleiste zweigte der Server von dieser Zeitleiste bei %X/%08X ab."
 
 #: access/transam/xlogrecovery.c:865
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "angeforderte Zeitleiste %u enthält nicht den minimalen Wiederherstellungspunkt %X/%X auf Zeitleiste %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "angeforderte Zeitleiste %u enthält nicht den minimalen Wiederherstellungspunkt %X/%08X auf Zeitleiste %u"
 
 #: access/transam/xlogrecovery.c:893
 #, c-format
@@ -3390,18 +3390,18 @@ msgstr "Verwenden Sie pg_combinebackup, um ein gültiges Datenverzeichnis zu rek
 
 #: access/transam/xlogrecovery.c:1717
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "unerwarteter Datensatztyp bei Redo-Position %X/%X gefunden"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "unerwarteter Datensatztyp bei Redo-Position %X/%08X gefunden"
 
 #: access/transam/xlogrecovery.c:1740
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "Redo beginnt bei %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "Redo beginnt bei %X/%08X"
 
 #: access/transam/xlogrecovery.c:1753
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "Redo im Gang, abgelaufene Zeit: %ld.%02d s, aktuelle LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "Redo im Gang, abgelaufene Zeit: %ld.%02d s, aktuelle LSN: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1843
 #, c-format
@@ -3410,8 +3410,8 @@ msgstr "angeforderter Recovery-Endpunkt ist vor konsistentem Recovery-Punkt"
 
 #: access/transam/xlogrecovery.c:1875
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "Redo fertig bei %X/%X Systembenutzung: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "Redo fertig bei %X/%08X Systembenutzung: %s"
 
 #: access/transam/xlogrecovery.c:1881
 #, c-format
@@ -3430,8 +3430,8 @@ msgstr "Wiederherstellung endete bevor das konfigurierte Wiederherstellungsziel
 
 #: access/transam/xlogrecovery.c:2095
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "fehlender Contrecord bei %X/%X erfolgreich übersprungen, überschrieben am %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "fehlender Contrecord bei %X/%08X erfolgreich übersprungen, überschrieben am %s"
 
 #: access/transam/xlogrecovery.c:2162
 #, c-format
@@ -3450,19 +3450,19 @@ msgstr "Entfernen Sie diese Verzeichnisse oder setzen Sie »allow_in_place_table
 
 #: access/transam/xlogrecovery.c:2217
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
-msgstr "Wiederherstellung aus Backup abgeschlossen mit Redo-LSN %X/%X und End-LSN %X/%X"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
+msgstr "Wiederherstellung aus Backup abgeschlossen mit Redo-LSN %X/%08X und End-LSN %X/%08X"
 
 #: access/transam/xlogrecovery.c:2247
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "konsistenter Wiederherstellungszustand erreicht bei %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2285
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "WAL-Redo bei %X/%X für %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "WAL-Redo bei %X/%08X für %s"
 
 #: access/transam/xlogrecovery.c:2383
 #, c-format
@@ -3476,8 +3476,8 @@ msgstr "unerwartete Zeitleisten-ID %u (nach %u) im Checkpoint-Datensatz"
 
 #: access/transam/xlogrecovery.c:2408
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "unerwartete Zeitleisten-ID %u in Checkpoint-Datensatz, bevor der minimale Wiederherstellungspunkt %X/%X auf Zeitleiste %u erreicht wurde"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "unerwartete Zeitleisten-ID %u in Checkpoint-Datensatz, bevor der minimale Wiederherstellungspunkt %X/%08X auf Zeitleiste %u erreicht wurde"
 
 #: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868
 #, c-format
@@ -3486,8 +3486,8 @@ msgstr "Wiederherstellung beendet nachdem Konsistenz erreicht wurde"
 
 #: access/transam/xlogrecovery.c:2613
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "Wiederherstellung beendet vor WAL-Position (LSN) »%X/%X«"
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "Wiederherstellung beendet vor WAL-Position (LSN) »%X/%08X«"
 
 #: access/transam/xlogrecovery.c:2703
 #, c-format
@@ -3506,8 +3506,8 @@ msgstr "Wiederherstellung beendet bei Restore-Punkt »%s«, Zeit %s"
 
 #: access/transam/xlogrecovery.c:2781
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "Wiederherstellung beendet nach WAL-Position (LSN) »%X/%X«"
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "Wiederherstellung beendet nach WAL-Position (LSN) »%X/%08X«"
 
 #: access/transam/xlogrecovery.c:2848
 #, c-format
@@ -3541,18 +3541,18 @@ msgstr "Führen Sie pg_wal_replay_resume() aus um fortzusetzen."
 
 #: access/transam/xlogrecovery.c:3205
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "unerwartete Zeitleisten-ID %u in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "unerwartete Zeitleisten-ID %u in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: access/transam/xlogrecovery.c:3413
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "konnte nicht aus WAL-Segment %s, LSN %X/%X, Position %u lesen: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "konnte nicht aus WAL-Segment %s, LSN %X/%08X, Position %u lesen: %m"
 
 #: access/transam/xlogrecovery.c:3420
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
-msgstr "konnte nicht aus WAL-Segment %s, LSN %X/%X, Position %u lesen: %d von %zu gelesen"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
+msgstr "konnte nicht aus WAL-Segment %s, LSN %X/%08X, Position %u lesen: %d von %zu gelesen"
 
 #: access/transam/xlogrecovery.c:4060
 #, c-format
@@ -3586,8 +3586,8 @@ msgstr "neue Zeitleiste %u ist kein Kind der Datenbanksystemzeitleiste %u"
 
 #: access/transam/xlogrecovery.c:4158
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "neue Zeitleiste %u zweigte von der aktuellen Datenbanksystemzeitleiste %u vor dem aktuellen Wiederherstellungspunkt %X/%X ab"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "neue Zeitleiste %u zweigte von der aktuellen Datenbanksystemzeitleiste %u vor dem aktuellen Wiederherstellungspunkt %X/%08X ab"
 
 #: access/transam/xlogrecovery.c:4177
 #, c-format
@@ -3897,26 +3897,26 @@ msgstr "Zeitleiste %u wurde im Manifest gefunden, aber nicht in der History dies
 
 #: backup/basebackup_incremental.c:420
 #, fuzzy, c-format
-#| msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%X, aber gab an, dass nächste Zeitleiste %u bei %X/%X beginnt"
+#| msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgid "manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%08X, aber gab an, dass nächste Zeitleiste %u bei %X/%08X beginnt"
 
 #: backup/basebackup_incremental.c:430
 #, fuzzy, c-format
-#| msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%X, aber gab an, dass nächste Zeitleiste %u bei %X/%X beginnt"
+#| msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgid "manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%08X, aber gab an, dass nächste Zeitleiste %u bei %X/%08X beginnt"
 
 #: backup/basebackup_incremental.c:441
 #, c-format
-msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X"
+msgid "manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X"
 msgstr ""
 
 #: backup/basebackup_incremental.c:451
 #, fuzzy, c-format
-#| msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X"
-msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%X, aber gab an, dass nächste Zeitleiste %u bei %X/%X beginnt"
+#| msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgid "manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X"
+msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%08X, aber gab an, dass nächste Zeitleiste %u bei %X/%08X beginnt"
 
 #: backup/basebackup_incremental.c:518
 #, c-format
@@ -3925,33 +3925,33 @@ msgstr ""
 
 #: backup/basebackup_incremental.c:519
 #, c-format
-msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory."
+msgid "Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory."
 msgstr ""
 
 #: backup/basebackup_incremental.c:532
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld seconds"
+msgid "still waiting for WAL summarization through %X/%08X after %ld seconds"
 msgstr ""
 
 #: backup/basebackup_incremental.c:535
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
 msgstr ""
 
 #: backup/basebackup_incremental.c:604
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist"
 msgstr ""
 
 #: backup/basebackup_incremental.c:611
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete"
 msgstr ""
 
 #: backup/basebackup_incremental.c:615
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
-msgstr "Die erste nicht zusammengefasste LSN in diesem Bereich ist %X/%X."
+msgid "The first unsummarized LSN in this range is %X/%08X."
+msgstr "Die erste nicht zusammengefasste LSN in diesem Bereich ist %X/%08X."
 
 #: backup/basebackup_incremental.c:1015
 #, c-format
@@ -10389,8 +10389,8 @@ msgstr "Verwenden Sie ALTER SUBSCRIPTION ... REFRESH mit copy_data = false, oder
 
 #: commands/subscriptioncmds.c:1473
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
-msgstr "zu überspringende WAL-Position (LSN %X/%X) muss größer als Origin-LSN %X/%X sein"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
+msgstr "zu überspringende WAL-Position (LSN %X/%08X) muss größer als Origin-LSN %X/%08X sein"
 
 #: commands/subscriptioncmds.c:1594
 #, c-format
@@ -20608,32 +20608,32 @@ msgstr "automatische Rotation abgeschaltet (SIGHUP zum Wiederanschalten verwende
 
 #: postmaster/walsummarizer.c:384
 #, c-format
-msgid "switch point from TLI %u to TLI %u is at %X/%X"
+msgid "switch point from TLI %u to TLI %u is at %X/%08X"
 msgstr ""
 
 #: postmaster/walsummarizer.c:885
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "konnte keinen gültigen Datensatz nach %X/%X finden"
+msgid "could not find a valid record after %X/%08X"
+msgstr "konnte keinen gültigen Datensatz nach %X/%08X finden"
 
 #: postmaster/walsummarizer.c:930
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "konnte WAL aus Zeitleiste %u bei %X/%X nicht lesen: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "konnte WAL aus Zeitleiste %u bei %X/%08X nicht lesen: %s"
 
 #: postmaster/walsummarizer.c:936
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "konnte WAL aus Zeitleiste %u bei %X/%X nicht lesen"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "konnte WAL aus Zeitleiste %u bei %X/%08X nicht lesen"
 
 #: postmaster/walsummarizer.c:1077
 #, c-format
-msgid "summarized WAL on TLI %u from %X/%X to %X/%X"
+msgid "summarized WAL on TLI %u from %X/%08X to %X/%08X"
 msgstr ""
 
 #: postmaster/walsummarizer.c:1385
 #, c-format
-msgid "timeline %u became historic, can read up to %X/%X"
+msgid "timeline %u became historic, can read up to %X/%08X"
 msgstr ""
 
 #: regex/regc_pg_locale.c:244
@@ -20933,13 +20933,13 @@ msgstr "starte logisches Dekodieren für Slot »%s«"
 
 #: replication/logical/logical.c:629
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Streaming beginnt bei Transaktionen, die nach %X/%X committen; lese WAL ab %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Streaming beginnt bei Transaktionen, die nach %X/%08X committen; lese WAL ab %X/%08X."
 
 #: replication/logical/logical.c:777
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s, zugehörige LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "Slot »%s«, Ausgabe-Plugin »%s«, im Callback %s, zugehörige LSN %X/%08X"
 
 #: replication/logical/logical.c:783
 #, c-format
@@ -21037,8 +21037,8 @@ msgstr "konnte keinen freien Replication-State finden, erhöhen Sie »max_replic
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "Replikationszustand von Knoten %d auf %X/%X wiederhergestellt"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "Replikationszustand von Knoten %d auf %X/%08X wiederhergestellt"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -21143,7 +21143,7 @@ msgstr ""
 
 #: replication/logical/slotsync.c:217
 #, c-format
-msgid "Remote slot has LSN %X/%X and catalog xmin %u, but local slot has LSN %X/%X and catalog xmin %u."
+msgid "Remote slot has LSN %X/%08X and catalog xmin %u, but local slot has LSN %X/%08X and catalog xmin %u."
 msgstr ""
 
 #: replication/logical/slotsync.c:459
@@ -21160,9 +21160,9 @@ msgstr "konnte Datei »%s« nicht fsyncen: %m"
 
 #: replication/logical/slotsync.c:580
 #, fuzzy, c-format
-#| msgid "logical decoding found consistent point at %X/%X"
-msgid "Logical decoding cannot find consistent point from local slot's LSN %X/%X."
-msgstr "logisches Dekodieren fand konsistenten Punkt bei %X/%X"
+#| msgid "logical decoding found consistent point at %X/%08X"
+msgid "Logical decoding cannot find consistent point from local slot's LSN %X/%08X."
+msgstr "logisches Dekodieren fand konsistenten Punkt bei %X/%08X"
 
 #: replication/logical/slotsync.c:589
 #, c-format
@@ -21171,7 +21171,7 @@ msgstr ""
 
 #: replication/logical/slotsync.c:628
 #, c-format
-msgid "skipping slot synchronization as the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X"
+msgid "skipping slot synchronization as the received slot sync LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X"
 msgstr ""
 
 #: replication/logical/slotsync.c:650
@@ -21293,8 +21293,8 @@ msgstr[1] "logischer Dekodierungs-Snapshot exportiert: »%s« mit %u Transaktion
 #: replication/logical/snapbuild.c:1392 replication/logical/snapbuild.c:1484
 #: replication/logical/snapbuild.c:2000
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "logisches Dekodieren fand konsistenten Punkt bei %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "logisches Dekodieren fand konsistenten Punkt bei %X/%08X"
 
 #: replication/logical/snapbuild.c:1394
 #, c-format
@@ -21303,8 +21303,8 @@ msgstr "Keine laufenden Transaktionen."
 
 #: replication/logical/snapbuild.c:1436
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "logisches Dekodieren fand initialen Startpunkt bei %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "logisches Dekodieren fand initialen Startpunkt bei %X/%08X"
 
 #: replication/logical/snapbuild.c:1438 replication/logical/snapbuild.c:1462
 #, c-format
@@ -21313,8 +21313,8 @@ msgstr "Warten auf Abschluss der Transaktionen (ungefähr %d), die älter als %u
 
 #: replication/logical/snapbuild.c:1460
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "logisches Dekodieren fand initialen konsistenten Punkt bei %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "logisches Dekodieren fand initialen konsistenten Punkt bei %X/%08X"
 
 #: replication/logical/snapbuild.c:1486
 #, c-format
@@ -21505,13 +21505,13 @@ msgstr "Subskription »%s« wurde wegen eines Fehlers deaktiviert"
 
 #: replication/logical/worker.c:4782
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "logische Replikation beginnt Überspringen von Transaktion bei %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "logische Replikation beginnt Überspringen von Transaktion bei %X/%08X"
 
 #: replication/logical/worker.c:4796
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "logische Replikation beendet Überspringen von Transaktion bei %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "logische Replikation beendet Überspringen von Transaktion bei %X/%08X"
 
 #: replication/logical/worker.c:4878
 #, c-format
@@ -21520,8 +21520,8 @@ msgstr "Skip-LSN von Subskription »%s« gelöscht"
 
 #: replication/logical/worker.c:4879
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
-msgstr "Die WAL-Endposition (LSN) %X/%X der Remote-Transaktion stimmte nicht mit der Skip-LSN %X/%X überein."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
+msgstr "Die WAL-Endposition (LSN) %X/%08X der Remote-Transaktion stimmte nicht mit der Skip-LSN %X/%08X überein."
 
 #: replication/logical/worker.c:4905
 #, c-format
@@ -21535,8 +21535,8 @@ msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachric
 
 #: replication/logical/worker.c:4914
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
-msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachrichtentyp »%s« in Transaktion %u, beendet bei %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachrichtentyp »%s« in Transaktion %u, beendet bei %X/%08X"
 
 #: replication/logical/worker.c:4925
 #, c-format
@@ -21545,8 +21545,8 @@ msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachric
 
 #: replication/logical/worker.c:4932
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
-msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachrichtentyp »%s« für Replikationszielrelation »%s.%s« in Transaktion %u, beendet bei %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
+msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachrichtentyp »%s« für Replikationszielrelation »%s.%s« in Transaktion %u, beendet bei %X/%08X"
 
 #: replication/logical/worker.c:4943
 #, c-format
@@ -21555,8 +21555,8 @@ msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachric
 
 #: replication/logical/worker.c:4951
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
-msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachrichtentyp »%s« für Replikationszielrelation »%s.%s« Spalte »%s« in Transaktion %u, beendet bei %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "Verarbeiten empfangener Daten für Replication-Origin »%s« bei Nachrichtentyp »%s« für Replikationszielrelation »%s.%s« Spalte »%s« in Transaktion %u, beendet bei %X/%08X"
 
 #: replication/pgoutput/pgoutput.c:315
 #, c-format
@@ -21757,10 +21757,10 @@ msgstr "Nur Rollen mit dem %s-Attribut können Replikations-Slots verwenden."
 
 #: replication/slot.c:1498
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
-msgstr[0] "Die restart_lsn des Slots %X/%X überschreitet das Maximum um %llu Byte."
-msgstr[1] "Die restart_lsn des Slots %X/%X überschreitet das Maximum um %llu Bytes."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
+msgstr[0] "Die restart_lsn des Slots %X/%08X überschreitet das Maximum um %llu Byte."
+msgstr[1] "Die restart_lsn des Slots %X/%08X überschreitet das Maximum um %llu Bytes."
 
 #: replication/slot.c:1506
 #, c-format
@@ -21905,8 +21905,8 @@ msgstr "Diese Slot hat nie zuvor WAL reserviert oder er wurde ungültig gemacht.
 
 #: replication/slotfuncs.c:566
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "Replikations-Slot kann nicht auf %X/%X vorwärtsgesetzt werden, Minimum ist %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "Replikations-Slot kann nicht auf %X/%08X vorwärtsgesetzt werden, Minimum ist %X/%08X"
 
 #: replication/slotfuncs.c:673
 #, c-format
@@ -22006,13 +22006,13 @@ msgstr "höchste Zeitleiste %u des primären Servers liegt hinter Wiederherstell
 
 #: replication/walreceiver.c:419
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "WAL-Streaming vom Primärserver gestartet bei %X/%X auf Zeitleiste %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "WAL-Streaming vom Primärserver gestartet bei %X/%08X auf Zeitleiste %u"
 
 #: replication/walreceiver.c:423
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "WAL-Streaming neu gestartet bei %X/%X auf Zeitleiste %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "WAL-Streaming neu gestartet bei %X/%08X auf Zeitleiste %u"
 
 #: replication/walreceiver.c:458
 #, c-format
@@ -22026,8 +22026,8 @@ msgstr "Replikation wurde durch Primärserver beendet"
 
 #: replication/walreceiver.c:503
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "WAL-Ende erreicht auf Zeitleiste %u bei %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "WAL-Ende erreicht auf Zeitleiste %u bei %X/%08X."
 
 #: replication/walreceiver.c:593
 #, c-format
@@ -22076,18 +22076,18 @@ msgstr "logischer Replikations-Slot kann nicht für physische Replikation verwen
 
 #: replication/walsender.c:919
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "angeforderter Startpunkt %X/%X auf Zeitleiste %u ist nicht in der History dieses Servers"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "angeforderter Startpunkt %X/%08X auf Zeitleiste %u ist nicht in der History dieses Servers"
 
 #: replication/walsender.c:922
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "Die History dieses Servers zweigte von Zeitleiste %u bei %X/%X ab."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "Die History dieses Servers zweigte von Zeitleiste %u bei %X/%08X ab."
 
 #: replication/walsender.c:966
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "angeforderter Startpunkt %X/%X ist vor der WAL-Flush-Position dieses Servers %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "angeforderter Startpunkt %X/%08X ist vor der WAL-Flush-Position dieses Servers %X/%08X"
 
 #: replication/walsender.c:1160
 #, c-format
diff --git a/src/backend/po/es.po b/src/backend/po/es.po
index e2593b52271..3492c4b81cb 100644
--- a/src/backend/po/es.po
+++ b/src/backend/po/es.po
@@ -2270,18 +2270,18 @@ msgstr "Falló mientras se emplazaba un procesador de lectura de WAL."
 
 #: access/transam/twophase.c:1429
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "no se pudo leer el archivo de estado de dos fases desde WAL en %X/%X: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "no se pudo leer el archivo de estado de dos fases desde WAL en %X/%08X: %s"
 
 #: access/transam/twophase.c:1434
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "no se pudo leer el archivo de estado de dos fases desde WAL en %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "no se pudo leer el archivo de estado de dos fases desde WAL en %X/%08X"
 
 #: access/transam/twophase.c:1442
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "los datos de estado de dos fases esperados no están presentes en WAL en %X/%X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "los datos de estado de dos fases esperados no están presentes en WAL en %X/%08X"
 
 #: access/transam/twophase.c:1745
 #, c-format
@@ -2337,8 +2337,8 @@ msgstr "no se pudo recuperar el archivo de estado de dos fases para la transacci
 
 #: access/transam/twophase.c:2516
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
-msgstr "El archivo de estado en dos fases ha sido encontrado en el registro de WAL %X/%X, pero esta transacción ya ha sido restaurada desde disco."
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
+msgstr "El archivo de estado en dos fases ha sido encontrado en el registro de WAL %X/%08X, pero esta transacción ya ha sido restaurada desde disco."
 
 #: access/transam/twophase.c:2524 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209
 #, c-format
@@ -2506,13 +2506,13 @@ msgstr "no se pueden tener más de 2^32-1 subtransacciones en una transacción"
 
 #: access/transam/xlog.c:1542
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "petición para sincronizar (flush) más allá del final del WAL generado; petición %X/%X, posición actual %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "petición para sincronizar (flush) más allá del final del WAL generado; petición %X/%08X, posición actual %X/%08X"
 
 #: access/transam/xlog.c:1769
 #, c-format
-msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X"
-msgstr "no se puede ler más allá del final del WAL generado; petición %X/%X, posición actual %X/%X"
+msgid "cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X"
+msgstr "no se puede ler más allá del final del WAL generado; petición %X/%08X, posición actual %X/%08X"
 
 #: access/transam/xlog.c:2210 access/transam/xlog.c:4501
 #, c-format
@@ -2823,13 +2823,13 @@ msgstr "empezando checkpoint:%s%s%s%s%s%s%s%s"
 
 #: access/transam/xlog.c:6728
 #, c-format
-msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "restartpoint completo: escritos %d búfers (%.1f%%); %d archivos WAL añadidos, %d eliminados, %d reciclados; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimación=%d kB; lsn=%X/%X, lsn de redo=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "restartpoint completo: escritos %d búfers (%.1f%%); %d archivos WAL añadidos, %d eliminados, %d reciclados; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimación=%d kB; lsn=%X/%08X, lsn de redo=%X/%08X"
 
 #: access/transam/xlog.c:6751
 #, c-format
-msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "checkpoint completo: escritos %d búfers (%.1f%%); %d archivos WAL añadidos, %d eliminados, %d reciclados; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimación=%d kB; lsn=%X/%X, lsn de redo=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "checkpoint completo: escritos %d búfers (%.1f%%); %d archivos WAL añadidos, %d eliminados, %d reciclados; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; archivos sincronizados=%d, más largo=%ld.%03d s, promedio=%ld.%03d s; distancia=%d kB, estimación=%d kB; lsn=%X/%08X, lsn de redo=%X/%08X"
 
 #: access/transam/xlog.c:7233
 #, c-format
@@ -2838,8 +2838,8 @@ msgstr "hay actividad de WAL mientras el sistema se está apagando"
 
 #: access/transam/xlog.c:7818
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "restartpoint de recuperación en %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "restartpoint de recuperación en %X/%08X"
 
 #: access/transam/xlog.c:7820
 #, c-format
@@ -2848,8 +2848,8 @@ msgstr "Última transacción completada al tiempo de registro %s."
 
 #: access/transam/xlog.c:8082
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "punto de recuperación «%s» creado en %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "punto de recuperación «%s» creado en %X/%08X"
 
 #: access/transam/xlog.c:8289
 #, c-format
@@ -3110,53 +3110,53 @@ msgstr "«recovery_prefetch» no está soportado en plataformas que no tienen po
 
 #: access/transam/xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "desplazamiento de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "desplazamiento de registro no válido en %X/%08X: se esperaba al menos %u, se obtuvo %u"
 
 #: access/transam/xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord solicitado por %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord solicitado por %X/%08X"
 
 #: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "largo de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "largo de registro no válido en %X/%08X: se esperaba al menos %u, se obtuvo %u"
 
 #: access/transam/xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "no hay bandera de contrecord en %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "no hay bandera de contrecord en %X/%08X"
 
 #: access/transam/xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%08X"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ID de gestor de recursos %u no válido en %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ID de gestor de recursos %u no válido en %X/%08X"
 
 #: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "registro con prev-link %X/%X incorrecto en %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "registro con prev-link %X/%08X incorrecto en %X/%08X"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%08X"
 
 #: access/transam/xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "número mágico %04X no válido en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "número mágico %04X no válido en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "info bits %04X no válidos en segment WAL %s, LSN %X/%X, posición %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "info bits %04X no válidos en segment WAL %s, LSN %X/%08X, posición %u"
 
 #: access/transam/xlogreader.c:1274
 #, c-format
@@ -3175,63 +3175,63 @@ msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ inc
 
 #: access/transam/xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "pageaddr %X/%X inesperado en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "pageaddr %X/%08X inesperado en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: access/transam/xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ID de timeline %u fuera de secuencia (después de %u) en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ID de timeline %u fuera de secuencia (después de %u) en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: access/transam/xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u fuera de orden en %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u fuera de orden en %X/%08X"
 
 #: access/transam/xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%08X"
 
 #: access/transam/xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%08X"
 
 #: access/transam/xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%08X"
 
 #: access/transam/xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%08X"
 
 #: access/transam/xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%08X"
 
 #: access/transam/xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED están definidos, pero el largo de imagen de bloque es %u en %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED están definidos, pero el largo de imagen de bloque es %u en %X/%08X"
 
 #: access/transam/xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X "
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%08X "
 
 #: access/transam/xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u no válido en %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u no válido en %X/%08X"
 
 #: access/transam/xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "registro con largo no válido en %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "registro con largo no válido en %X/%08X"
 
 #: access/transam/xlogreader.c:1982
 #, c-format
@@ -3240,38 +3240,38 @@ msgstr "no se pudo localizar un bloque de respaldo con ID %d en el registro WAL"
 
 #: access/transam/xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "no se pudo restaurar la imagen en %X/%X con bloque especifica %d no válido"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "no se pudo restaurar la imagen en %X/%08X con bloque especifica %d no válido"
 
 #: access/transam/xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X con estado no válido, bloque %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X con estado no válido, bloque %d"
 
 #: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X comprimida con %s que no está soportado por esta instalación, bloque %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X comprimida con %s que no está soportado por esta instalación, bloque %d"
 
 #: access/transam/xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X comprimida con un método desconocido, bloque %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X comprimida con un método desconocido, bloque %d"
 
 #: access/transam/xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "no se pudo descomprimir la imagen en %X/%X, bloque %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "no se pudo descomprimir la imagen en %X/%08X, bloque %d"
 
 #: access/transam/xlogrecovery.c:617
 #, c-format
-msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u"
-msgstr "iniciando recuperación de backup con LSN de redo %X/%X, LSN de checkpoint %X/%X, en timeline %u"
+msgid "starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u"
+msgstr "iniciando recuperación de backup con LSN de redo %X/%08X, LSN de checkpoint %X/%08X, en timeline %u"
 
 #: access/transam/xlogrecovery.c:649
 #, c-format
-msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X"
-msgstr "no se pudo encontrar la ubicación de redo %X/%X referida por el registro de checkpoint en %X/%X"
+msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
+msgstr "no se pudo encontrar la ubicación de redo %X/%08X referida por el registro de checkpoint en %X/%08X"
 
 # Purposefully deviate from quoting convention here, since argument is a shell command.
 #: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662
@@ -3287,8 +3287,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:660
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "no se pudo localizar el registro de checkpoint requerido en %X/%X"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "no se pudo localizar el registro de checkpoint requerido en %X/%08X"
 
 #: access/transam/xlogrecovery.c:690 commands/tablespace.c:664
 #, c-format
@@ -3312,13 +3312,13 @@ msgstr "No se pudo renombrar el archivo de «%s» a «%s»: %m."
 
 #: access/transam/xlogrecovery.c:770
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "reiniciando recuperación del backup con LSN de redo «%X/%X»"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "reiniciando recuperación del backup con LSN de redo «%X/%08X»"
 
 #: access/transam/xlogrecovery.c:795
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "no se pudo localizar un registro de válido en %X/%X"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "no se pudo localizar un registro de válido en %X/%08X"
 
 #: access/transam/xlogrecovery.c:806
 #, c-format
@@ -3342,8 +3342,8 @@ msgstr "comenzando el proceso de recuperación hasta «%s»"
 
 #: access/transam/xlogrecovery.c:821
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "comenzando el proceso de recuperación punto-en-el-tiempo a la ubicación (LSN) de WAL «%X/%X»"
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "comenzando el proceso de recuperación punto-en-el-tiempo a la ubicación (LSN) de WAL «%X/%08X»"
 
 #: access/transam/xlogrecovery.c:825
 #, c-format
@@ -3362,13 +3362,13 @@ msgstr "el timeline solicitado %u no es un hijo de la historia de este servidor"
 
 #: access/transam/xlogrecovery.c:851
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "El checkpoint más reciente está en %X/%X en el timeline %u, pero en la historia del timeline solicitado, el servidor se desvió desde ese timeline en %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "El checkpoint más reciente está en %X/%08X en el timeline %u, pero en la historia del timeline solicitado, el servidor se desvió desde ese timeline en %X/%08X."
 
 #: access/transam/xlogrecovery.c:865
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "el timeline solicitado %u no contiene el punto mínimo de recuperación %X/%X en el timeline %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "el timeline solicitado %u no contiene el punto mínimo de recuperación %X/%08X en el timeline %u"
 
 #: access/transam/xlogrecovery.c:893
 #, c-format
@@ -3459,18 +3459,18 @@ msgstr "Use pg_combinebackup para reconstruir un directorio de datos válido."
 
 #: access/transam/xlogrecovery.c:1717
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "se encontró registro de tipo inesperada en el punto de redo %X/%X"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "se encontró registro de tipo inesperada en el punto de redo %X/%08X"
 
 #: access/transam/xlogrecovery.c:1740
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "redo comienza en %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "redo comienza en %X/%08X"
 
 #: access/transam/xlogrecovery.c:1753
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "redo en progreso, tiempo transcurrido: %ld.%02d s, LSN actual: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "redo en progreso, tiempo transcurrido: %ld.%02d s, LSN actual: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1843
 #, c-format
@@ -3479,8 +3479,8 @@ msgstr "el punto de detención de recuperación pedido es antes del punto de rec
 
 #: access/transam/xlogrecovery.c:1875
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "redo listo en %X/%X utilización del sistema: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "redo listo en %X/%08X utilización del sistema: %s"
 
 #: access/transam/xlogrecovery.c:1881
 #, c-format
@@ -3499,8 +3499,8 @@ msgstr "la recuperación terminó antes de alcanzar el punto configurado como de
 
 #: access/transam/xlogrecovery.c:2095
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "se omitió con éxito contrecord no encontrado en %X/%X, sobrescrito en %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "se omitió con éxito contrecord no encontrado en %X/%08X, sobrescrito en %s"
 
 #: access/transam/xlogrecovery.c:2162
 #, c-format
@@ -3519,19 +3519,19 @@ msgstr "Elimine esos directorios, o defina «allow_in_place_tablespaces» a ON t
 
 #: access/transam/xlogrecovery.c:2217
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
-msgstr "se completó la recuperación de backup con LSN de redo %X/%X y LSN de término %X/%X"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
+msgstr "se completó la recuperación de backup con LSN de redo %X/%08X y LSN de término %X/%08X"
 
 #: access/transam/xlogrecovery.c:2247
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "el estado de recuperación consistente fue alcanzado en %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "el estado de recuperación consistente fue alcanzado en %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2285
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "redo WAL en %X/%X para %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "redo WAL en %X/%08X para %s"
 
 #: access/transam/xlogrecovery.c:2383
 #, c-format
@@ -3545,8 +3545,8 @@ msgstr "ID de timeline %u inesperado (después de %u) en el registro de checkpoi
 
 #: access/transam/xlogrecovery.c:2408
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "timeline ID %u inesperado en registro de checkpoint, antes de alcanzar el punto mínimo de recuperación %X/%X en el timeline %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "timeline ID %u inesperado en registro de checkpoint, antes de alcanzar el punto mínimo de recuperación %X/%08X en el timeline %u"
 
 #: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868
 #, c-format
@@ -3555,8 +3555,8 @@ msgstr "deteniendo recuperación al alcanzar un estado consistente"
 
 #: access/transam/xlogrecovery.c:2613
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "deteniendo recuperación antes de la ubicación (LSN) de WAL «%X/%X»"
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "deteniendo recuperación antes de la ubicación (LSN) de WAL «%X/%08X»"
 
 #: access/transam/xlogrecovery.c:2703
 #, c-format
@@ -3575,8 +3575,8 @@ msgstr "deteniendo recuperación en el punto de recuperación «%s», hora %s"
 
 #: access/transam/xlogrecovery.c:2781
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "deteniendo recuperación después de la ubicación (LSN) de WAL «%X/%X»"
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "deteniendo recuperación después de la ubicación (LSN) de WAL «%X/%08X»"
 
 #: access/transam/xlogrecovery.c:2848
 #, c-format
@@ -3610,18 +3610,18 @@ msgstr "Ejecute pg_wal_replay_resume() para continuar."
 
 #: access/transam/xlogrecovery.c:3205
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ID de timeline %u inesperado en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ID de timeline %u inesperado en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: access/transam/xlogrecovery.c:3413
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "no se pudo leer desde el segmento de WAL %s, LSN %X/%X, posición %u: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "no se pudo leer desde el segmento de WAL %s, LSN %X/%08X, posición %u: %m"
 
 #: access/transam/xlogrecovery.c:3420
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
-msgstr "no se pudo leer del segmento de WAL %s, LSN %X/%X, posición %u: leídos %d de %zu"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
+msgstr "no se pudo leer del segmento de WAL %s, LSN %X/%08X, posición %u: leídos %d de %zu"
 
 #: access/transam/xlogrecovery.c:4061
 #, c-format
@@ -3655,8 +3655,8 @@ msgstr "el nuevo timeline %u especificado no es hijo del timeline de sistema %u"
 
 #: access/transam/xlogrecovery.c:4159
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "el nuevo timeline %u bifurcó del timeline del sistema actual %u antes del punto re recuperación actual %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "el nuevo timeline %u bifurcó del timeline del sistema actual %u antes del punto re recuperación actual %X/%08X"
 
 #: access/transam/xlogrecovery.c:4178
 #, c-format
@@ -3966,18 +3966,18 @@ msgstr "el timeline %u fue encontrado en el manifiesto, pero no en la historia d
 
 #: backup/basebackup_incremental.c:414
 #, c-format
-msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "el manifiesto requiere WAL en el timeline inicial %u desde %X/%X, pero ese timeline inicia en %X/%X"
+msgid "manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "el manifiesto requiere WAL en el timeline inicial %u desde %X/%08X, pero ese timeline inicia en %X/%08X"
 
 #: backup/basebackup_incremental.c:424
 #, c-format
-msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "el manifiesto requiere WAL del timeline de continuación %u desde %X/%X, pero ese timeline empieza en %X/%X"
+msgid "manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "el manifiesto requiere WAL del timeline de continuación %u desde %X/%08X, pero ese timeline empieza en %X/%08X"
 
 #: backup/basebackup_incremental.c:435
 #, c-format
-msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X"
-msgstr "el manifiesto requiere WAL del timeline final %u terminado en %X/%X, pero este backup empieza en %X/%X"
+msgid "manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X"
+msgstr "el manifiesto requiere WAL del timeline final %u terminado en %X/%08X, pero este backup empieza en %X/%08X"
 
 #: backup/basebackup_incremental.c:439
 #, c-format
@@ -3986,23 +3986,23 @@ msgstr "Esto puede pasar para backups incrementales en un standby si hubo insufi
 
 #: backup/basebackup_incremental.c:446
 #, c-format
-msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X"
-msgstr "el manifiesto requiere WAL del timeline no-final %u terminando en %X/%X, pero este servidor cambió de timelines en %X/%X"
+msgid "manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X"
+msgstr "el manifiesto requiere WAL del timeline no-final %u terminando en %X/%08X, pero este servidor cambió de timelines en %X/%08X"
 
 #: backup/basebackup_incremental.c:527
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist"
-msgstr "se requieren sumarizaciones de WAL en el timeline %u desde %X/%X hasta %X/%X, pero no existen sumarizaciones para ese timeline y rango de LSN"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist"
+msgstr "se requieren sumarizaciones de WAL en el timeline %u desde %X/%08X hasta %X/%08X, pero no existen sumarizaciones para ese timeline y rango de LSN"
 
 #: backup/basebackup_incremental.c:534
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete"
-msgstr "se requieren sumarizaciones de WAL en el timeline %u desde %X/%X hasta %X/%X, pero las sumarizaciones en ese timeline y rango de LSN están incompletos"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete"
+msgstr "se requieren sumarizaciones de WAL en el timeline %u desde %X/%08X hasta %X/%08X, pero las sumarizaciones en ese timeline y rango de LSN están incompletos"
 
 #: backup/basebackup_incremental.c:538
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
-msgstr "El primer LSN sin sumarización en este rango es %X/%X."
+msgid "The first unsummarized LSN in this range is %X/%08X."
+msgstr "El primer LSN sin sumarización en este rango es %X/%08X."
 
 #: backup/basebackup_incremental.c:938
 #, c-format
@@ -10371,8 +10371,8 @@ msgstr "Use ALTER SUBSCRIPTION ... REFRESH con copy_data = false, o use DROP/CRE
 
 #: commands/subscriptioncmds.c:1473
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
-msgstr "la ubicación de WAL a saltar (LSN %X/%X) debe ser mayor que el LSN de origen %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
+msgstr "la ubicación de WAL a saltar (LSN %X/%08X) debe ser mayor que el LSN de origen %X/%08X"
 
 #: commands/subscriptioncmds.c:1594
 #, c-format
@@ -20022,35 +20022,35 @@ msgstr "la sumarización de WAL no está progresando"
 
 #: postmaster/walsummarizer.c:741
 #, c-format
-msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory."
-msgstr "La sumarización de WAL se necesita hasta %X/%X, pero está detenido en %X/%X en disco y %X/%X en memoria."
+msgid "Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory."
+msgstr "La sumarización de WAL se necesita hasta %X/%08X, pero está detenido en %X/%08X en disco y %X/%08X en memoria."
 
 #: postmaster/walsummarizer.c:755
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld second"
-msgid_plural "still waiting for WAL summarization through %X/%X after %ld seconds"
-msgstr[0] "todavía esperando al resumen de WAL hasta %X/%X después de %ld segundo"
-msgstr[1] "todavía esperando al resumen de WAL hasta %X/%X después de %ld segundos"
+msgid "still waiting for WAL summarization through %X/%08X after %ld second"
+msgid_plural "still waiting for WAL summarization through %X/%08X after %ld seconds"
+msgstr[0] "todavía esperando al resumen de WAL hasta %X/%08X después de %ld segundo"
+msgstr[1] "todavía esperando al resumen de WAL hasta %X/%08X después de %ld segundos"
 
 #: postmaster/walsummarizer.c:760
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
-msgstr "El resumen ha alcanzado %X/%X en disco y %X/%X en memoria."
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
+msgstr "El resumen ha alcanzado %X/%08X en disco y %X/%08X en memoria."
 
 #: postmaster/walsummarizer.c:1000
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "no se pudo encontrar un registro válido después de %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "no se pudo encontrar un registro válido después de %X/%08X"
 
 #: postmaster/walsummarizer.c:1045
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "no se pudo leer WAL del timeline %u en %X/%X: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "no se pudo leer WAL del timeline %u en %X/%08X: %s"
 
 #: postmaster/walsummarizer.c:1051
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "no se pudo leer WAL del timeline %u en %X/%X"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "no se pudo leer WAL del timeline %u en %X/%08X"
 
 #: regex/regc_pg_locale.c:244
 #, c-format
@@ -20343,13 +20343,13 @@ msgstr "iniciando la decodificación lógica para el slot «%s»"
 
 #: replication/logical/logical.c:630
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Transacciones en flujo comprometiendo después de %X/%X, leyendo WAL desde %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Transacciones en flujo comprometiendo después de %X/%08X, leyendo WAL desde %X/%08X."
 
 #: replication/logical/logical.c:778
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "slot «%s», plugin de salida «%s», en el callback %s, LSN asociado %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "slot «%s», plugin de salida «%s», en el callback %s, LSN asociado %X/%08X"
 
 # FIXME must quote callback name?  Need a translator: comment?
 #: replication/logical/logical.c:784
@@ -20448,8 +20448,8 @@ msgstr "no se pudo encontrar una estructura de replicación libre, incremente «
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "recuperado el estado de replicación del nodo %d a %X/%X"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "recuperado el estado de replicación del nodo %d a %X/%08X"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -20555,8 +20555,8 @@ msgstr "no se puede sincronizar el slot de replicación «%s» porque el slot re
 
 #: replication/logical/slotsync.c:217
 #, c-format
-msgid "The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u."
-msgstr "El slot remoto tiene LSN %X/%X y xmin de catálogo %u, pero el slot local tiene LSN %X/%X y xmin de catálogo %u."
+msgid "The remote slot has LSN %X/%08X and catalog xmin %u, but the local slot has LSN %X/%08X and catalog xmin %u."
+msgstr "El slot remoto tiene LSN %X/%08X y xmin de catálogo %u, pero el slot local tiene LSN %X/%08X y xmin de catálogo %u."
 
 #: replication/logical/slotsync.c:459
 #, c-format
@@ -20570,8 +20570,8 @@ msgstr "no se pudo sincronizar el slot de replicación «%s»"
 
 #: replication/logical/slotsync.c:580
 #, c-format
-msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X."
-msgstr "La decodificación lógica no pudo encontrar un punto consistente desde el LSN del slot local %X/%X."
+msgid "Logical decoding could not find consistent point from local slot's LSN %X/%08X."
+msgstr "La decodificación lógica no pudo encontrar un punto consistente desde el LSN del slot local %X/%08X."
 
 #: replication/logical/slotsync.c:589
 #, c-format
@@ -20580,8 +20580,8 @@ msgstr "el slot de replicación «%s» recién creado está listo para la sincro
 
 #: replication/logical/slotsync.c:628
 #, c-format
-msgid "skipping slot synchronization because the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X"
-msgstr "omitiendo sincronización de slot porque el LSN %X/%X de sincronización recibido para el slot «%s» está adelantado respecto a la posición del standby %X/%X"
+msgid "skipping slot synchronization because the received slot sync LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X"
+msgstr "omitiendo sincronización de slot porque el LSN %X/%08X de sincronización recibido para el slot «%s» está adelantado respecto a la posición del standby %X/%08X"
 
 #: replication/logical/slotsync.c:650
 #, c-format
@@ -20693,8 +20693,8 @@ msgstr[1] "se exportó un snapshot de decodificación lógica: «%s» con %u IDs
 #: replication/logical/snapbuild.c:1404 replication/logical/snapbuild.c:1501
 #: replication/logical/snapbuild.c:2017
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "la decodificación lógica encontró un punto consistente en %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "la decodificación lógica encontró un punto consistente en %X/%08X"
 
 #: replication/logical/snapbuild.c:1406
 #, c-format
@@ -20703,8 +20703,8 @@ msgstr "No hay transacciones en ejecución."
 
 #: replication/logical/snapbuild.c:1453
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "decodificación lógica encontró punto de inicio en %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "decodificación lógica encontró punto de inicio en %X/%08X"
 
 #: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479
 #, c-format
@@ -20713,8 +20713,8 @@ msgstr "Esperando que las (aproximadamente %d) transacciones más antiguas que %
 
 #: replication/logical/snapbuild.c:1477
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "la decodificación lógica encontró un punto consistente inicial en %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "la decodificación lógica encontró un punto consistente inicial en %X/%08X"
 
 #: replication/logical/snapbuild.c:1503
 #, c-format
@@ -20904,13 +20904,13 @@ msgstr "la suscripción «%s» ha sido inhabilitada debido a un error"
 
 #: replication/logical/worker.c:4806
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "iniciando el ignorado en la replicación lógica de la transacción en el LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "iniciando el ignorado en la replicación lógica de la transacción en el LSN %X/%08X"
 
 #: replication/logical/worker.c:4820
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "finalizó el ignorado en la replicación lógica de la transacción en el LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "finalizó el ignorado en la replicación lógica de la transacción en el LSN %X/%08X"
 
 #: replication/logical/worker.c:4902
 #, c-format
@@ -20919,8 +20919,8 @@ msgstr "el «skip-LSN» de la suscripción «%s» ha sido borrado"
 
 #: replication/logical/worker.c:4903
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
-msgstr "La ubicación de WAL (LSN) de término %X/%X de la transacción remota no coincidió con el skip-LSN %X/%X."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
+msgstr "La ubicación de WAL (LSN) de término %X/%08X de la transacción remota no coincidió con el skip-LSN %X/%08X."
 
 #: replication/logical/worker.c:4940
 #, c-format
@@ -20934,8 +20934,8 @@ msgstr "procesando datos remotos de origen de replicación «%s» durante el men
 
 #: replication/logical/worker.c:4949
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
-msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» en la transacción %u, concluida en %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» en la transacción %u, concluida en %X/%08X"
 
 #: replication/logical/worker.c:4960
 #, c-format
@@ -20944,8 +20944,8 @@ msgstr "procesando datos remotos de origen de replicación «%s» durante el men
 
 #: replication/logical/worker.c:4967
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
-msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación de destino «%s.%s» en la transacción %u, concluida en %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
+msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación de destino «%s.%s» en la transacción %u, concluida en %X/%08X"
 
 #: replication/logical/worker.c:4978
 #, c-format
@@ -20954,8 +20954,8 @@ msgstr "procesando datos remotos de origen de replicación «%s» durante el men
 
 #: replication/logical/worker.c:4986
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
-msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación de destino «%s.%s» columna «%s» en la transacción %u, concluida en %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "procesando datos remotos de origen de replicación «%s» durante el mensaje de tipo «%s» para la relación de destino «%s.%s» columna «%s» en la transacción %u, concluida en %X/%08X"
 
 #: replication/pgoutput/pgoutput.c:322
 #, c-format
@@ -21136,10 +21136,10 @@ msgstr "Sólo roles con el atributo %s pueden usar slots de replicación."
 
 #: replication/slot.c:1498
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
-msgstr[0] "El restart_lsn %X/%X del slot excede el límite por %llu byte."
-msgstr[1] "El restart_lsn %X/%X del slot excede el límite por %llu bytes."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
+msgstr[0] "El restart_lsn %X/%08X del slot excede el límite por %llu byte."
+msgstr[1] "El restart_lsn %X/%08X del slot excede el límite por %llu bytes."
 
 #: replication/slot.c:1506
 #, c-format
@@ -21281,8 +21281,8 @@ msgstr "Este slot nunca ha reservado WAL previamente, o ha sido invalidado."
 
 #: replication/slotfuncs.c:566
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "no puede avanzar un slot de replicación a %X/%X, el mínimo es %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "no puede avanzar un slot de replicación a %X/%08X, el mínimo es %X/%08X"
 
 #: replication/slotfuncs.c:673
 #, c-format
@@ -21382,13 +21382,13 @@ msgstr "el timeline más alto del primario, %u, está más atrás que el timelin
 
 #: replication/walreceiver.c:419
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "iniciando el flujo de WAL desde el primario en %X/%X en el timeline %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "iniciando el flujo de WAL desde el primario en %X/%08X en el timeline %u"
 
 #: replication/walreceiver.c:423
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "reiniciando el flujo de WAL en %X/%X en el timeline %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "reiniciando el flujo de WAL en %X/%08X en el timeline %u"
 
 #: replication/walreceiver.c:458
 #, c-format
@@ -21402,8 +21402,8 @@ msgstr "replicación terminada por el servidor primario"
 
 #: replication/walreceiver.c:503
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "Se alcanzó el fin de WAL en el timeline %u en la posición %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "Se alcanzó el fin de WAL en el timeline %u en la posición %X/%08X."
 
 #: replication/walreceiver.c:593
 #, c-format
@@ -21452,18 +21452,18 @@ msgstr "no se puede usar un slot de replicación lógica para replicación físi
 
 #: replication/walsender.c:919
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "el punto de inicio solicitado %X/%X del timeline %u no está en la historia de este servidor"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "el punto de inicio solicitado %X/%08X del timeline %u no está en la historia de este servidor"
 
 #: replication/walsender.c:922
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "La historia de este servidor bifurcó desde el timeline %u en %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "La historia de este servidor bifurcó desde el timeline %u en %X/%08X."
 
 #: replication/walsender.c:966
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "el punto de inicio solicitado %X/%X está más adelante que la posición de sincronización (flush) de WAL de este servidor %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "el punto de inicio solicitado %X/%08X está más adelante que la posición de sincronización (flush) de WAL de este servidor %X/%08X"
 
 #: replication/walsender.c:1160
 #, c-format
diff --git a/src/backend/po/fr.po b/src/backend/po/fr.po
index eca2a961f98..92ba5408ee8 100644
--- a/src/backend/po/fr.po
+++ b/src/backend/po/fr.po
@@ -1816,9 +1816,9 @@ msgstr "l'identifiant du gestionnaire personnalisé de ressources %d est hors de
 
 #: access/transam/rmgr.c:106
 #, fuzzy, c-format
-#| msgid "invalid resource manager ID %u at %X/%X"
+#| msgid "invalid resource manager ID %u at %X/%08X"
 msgid "Provide a custom resource manager ID between %d and %d."
-msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X"
+msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%08X"
 
 #: access/transam/rmgr.c:111 access/transam/rmgr.c:116
 #: access/transam/rmgr.c:128
@@ -2058,20 +2058,20 @@ msgstr "Échec lors de l'allocation d'un processeur de lecture de journaux de tr
 
 #: access/transam/twophase.c:1423
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "n'a pas pu lire le fichier d'état de la validation en deux phases depuis les journaux de transactions à %X/%X : %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "n'a pas pu lire le fichier d'état de la validation en deux phases depuis les journaux de transactions à %X/%08X : %s"
 
 #: access/transam/twophase.c:1428
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "n'a pas pu lire le fichier d'état de la validation en deux phases depuis les journaux de transactions à %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "n'a pas pu lire le fichier d'état de la validation en deux phases depuis les journaux de transactions à %X/%08X"
 
 #: access/transam/twophase.c:1436
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
 msgstr ""
 "le fichier d'état de la validation en deux phases attendu n'est pas présent\n"
-"dans les journaux de transaction à %X/%X"
+"dans les journaux de transaction à %X/%08X"
 
 #: access/transam/twophase.c:1732
 #, c-format
@@ -2128,7 +2128,7 @@ msgstr "fichier d'état de la validation en deux phases pour la transaction %u c
 
 #: access/transam/twophase.c:2502
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
 msgstr ""
 
 #: access/transam/twophase.c:2510 jit/jit.c:205 utils/fmgr/dfmgr.c:209
@@ -2298,8 +2298,8 @@ msgstr "ne peut pas avoir plus de 2^32-1 sous-transactions dans une transaction"
 
 #: access/transam/xlog.c:1466
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "demande pour vider après la fin du WAL généré ; demande %X/%X, position actuelle %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "demande pour vider après la fin du WAL généré ; demande %X/%08X, position actuelle %X/%08X"
 
 #: access/transam/xlog.c:2228
 #, c-format
@@ -2638,13 +2638,13 @@ msgstr "début du checkpoint :%s%s%s%s%s%s%s%s"
 #: access/transam/xlog.c:6305
 #, fuzzy, c-format
 #| msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB"
-msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr "restartpoint terminé : a écrit %d tampons (%.1f%%); %d fichiers WAL ajoutés, %d supprimés, %d recyclés ; écriture=%ld.%03d s, synchronisation=%ld.%03d s, total=%ld.%03d s; fichiers synchronisés=%d, plus long=%ld.%03d s, moyenne=%ld.%03d s; distance=%d kB, estimation=%d kB"
 
 #: access/transam/xlog.c:6328
 #, fuzzy, c-format
 #| msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB"
-msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr "checkpoint terminé : a écrit %d tampons (%.1f%%); %d fichiers WAL ajoutés, %d supprimés, %d recyclés ; écriture=%ld.%03d s, synchronisation=%ld.%03d s, total=%ld.%03d s; fichiers synchronisés=%d, plus long=%ld.%03d s, moyenne=%ld.%03d s; distance=%d kB, estimation=%d kB"
 
 #: access/transam/xlog.c:6766
@@ -2656,8 +2656,8 @@ msgstr ""
 
 #: access/transam/xlog.c:7327
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "la ré-exécution en restauration commence à %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "la ré-exécution en restauration commence à %X/%08X"
 
 #: access/transam/xlog.c:7329
 #, c-format
@@ -2666,8 +2666,8 @@ msgstr "La dernière transaction a eu lieu à %s (moment de la journalisation)."
 
 #: access/transam/xlog.c:7577
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "point de restauration « %s » créé à %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "point de restauration « %s » créé à %X/%08X"
 
 #: access/transam/xlog.c:7784
 #, c-format
@@ -2938,55 +2938,55 @@ msgstr "effective_io_concurrency doit être positionné à 0 sur les plateformes
 
 #: access/transam/xlogreader.c:593
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "décalage invalide de l'enregistrement à %X/%X : attendait au moins %u, a eu %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "décalage invalide de l'enregistrement à %X/%08X : attendait au moins %u, a eu %u"
 
 #: access/transam/xlogreader.c:602
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "« contrecord » est requis par %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "« contrecord » est requis par %X/%08X"
 
 #: access/transam/xlogreader.c:643 access/transam/xlogreader.c:1108
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "longueur invalide de l'enregistrement à %X/%X : attendait au moins %u, a eu %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "longueur invalide de l'enregistrement à %X/%08X : attendait au moins %u, a eu %u"
 
 #: access/transam/xlogreader.c:732
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "il n'existe pas de drapeau contrecord à %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "il n'existe pas de drapeau contrecord à %X/%08X"
 
 #: access/transam/xlogreader.c:745
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%08X"
 
 #: access/transam/xlogreader.c:1116
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%08X"
 
 #: access/transam/xlogreader.c:1129 access/transam/xlogreader.c:1145
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "enregistrement avec prev-link %X/%08X incorrect à %X/%08X"
 
 #: access/transam/xlogreader.c:1183
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
 msgstr ""
 "somme de contrôle des données du gestionnaire de ressources incorrecte à\n"
-"l'enregistrement %X/%X"
+"l'enregistrement %X/%08X"
 
 #: access/transam/xlogreader.c:1217
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "numéro magique invalide %04X dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "numéro magique invalide %04X dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: access/transam/xlogreader.c:1232 access/transam/xlogreader.c:1274
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "bits d'information %04X invalides dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "bits d'information %04X invalides dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: access/transam/xlogreader.c:1248
 #, c-format
@@ -3005,63 +3005,63 @@ msgstr "Le fichier WAL provient d'une instance différente : XLOG_BLCKSZ incorre
 
 #: access/transam/xlogreader.c:1294
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, LSN %X/%X, segment %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "pageaddr %X/%08X inattendue dans le journal de transactions %s, LSN %X/%08X, segment %u"
 
 #: access/transam/xlogreader.c:1320
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: access/transam/xlogreader.c:1726
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u désordonné à %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u désordonné à %X/%08X"
 
 #: access/transam/xlogreader.c:1750
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%08X"
 
 #: access/transam/xlogreader.c:1757
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%08X"
 
 #: access/transam/xlogreader.c:1793
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%08X"
 
 #: access/transam/xlogreader.c:1809
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%08X"
 
 #: access/transam/xlogreader.c:1823
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #: access/transam/xlogreader.c:1838
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #: access/transam/xlogreader.c:1854
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%08X"
 
 #: access/transam/xlogreader.c:1866
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u invalide à %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u invalide à %X/%08X"
 
 #: access/transam/xlogreader.c:1933
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "enregistrement de longueur invalide à %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "enregistrement de longueur invalide à %X/%08X"
 
 #: access/transam/xlogreader.c:1959
 #, c-format
@@ -3070,28 +3070,28 @@ msgstr "n'a pas pu localiser le bloc de sauvegarde d'ID %d dans l'enregistrement
 
 #: access/transam/xlogreader.c:2043
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "n'a pas pu restaurer l'image à %X/%X avec le bloc invalide %d indiqué"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "n'a pas pu restaurer l'image à %X/%08X avec le bloc invalide %d indiqué"
 
 #: access/transam/xlogreader.c:2050
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X avec un état invalide, bloc %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X avec un état invalide, bloc %d"
 
 #: access/transam/xlogreader.c:2077 access/transam/xlogreader.c:2094
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X compressé avec %s, qui est non supporté par le serveur, bloc %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X compressé avec %s, qui est non supporté par le serveur, bloc %d"
 
 #: access/transam/xlogreader.c:2103
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X compressé avec une méthode inconnue, bloc %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X compressé avec une méthode inconnue, bloc %d"
 
 #: access/transam/xlogreader.c:2111
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "n'a pas pu décompresser l'image à %X/%X, bloc %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "n'a pas pu décompresser l'image à %X/%08X, bloc %d"
 
 #: access/transam/xlogrecovery.c:547
 #, c-format
@@ -3115,8 +3115,8 @@ msgstr "début de la restauration PITR à « %s »"
 
 #: access/transam/xlogrecovery.c:562
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "début de la restauration PITR à l'emplacement WAL (LSN) « %X/%X »"
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "début de la restauration PITR à l'emplacement WAL (LSN) « %X/%08X »"
 
 #: access/transam/xlogrecovery.c:566
 #, c-format
@@ -3181,13 +3181,13 @@ msgstr "la timeline requise %u n'est pas un fils de l'historique de ce serveur"
 
 #: access/transam/xlogrecovery.c:812
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "Le dernier checkpoint est à %X/%X sur la timeline %u, mais dans l'historique de la timeline demandée, le serveur est sorti de cette timeline à %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "Le dernier checkpoint est à %X/%08X sur la timeline %u, mais dans l'historique de la timeline demandée, le serveur est sorti de cette timeline à %X/%08X."
 
 #: access/transam/xlogrecovery.c:826
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "la timeline requise, %u, ne contient pas le point de restauration minimum (%X/%X) sur la timeline %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "la timeline requise, %u, ne contient pas le point de restauration minimum (%X/%08X) sur la timeline %u"
 
 #: access/transam/xlogrecovery.c:854
 #, c-format
@@ -3277,12 +3277,12 @@ msgstr "L'identifiant de timeline parsé est %u, mais %u était attendu."
 
 #: access/transam/xlogrecovery.c:1662
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "la ré-exécution commence à %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "la ré-exécution commence à %X/%08X"
 
 #: access/transam/xlogrecovery.c:1675
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:1767
@@ -3294,8 +3294,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:1799
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "rejeu exécuté à %X/%X utilisation système : %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "rejeu exécuté à %X/%08X utilisation système : %s"
 
 #: access/transam/xlogrecovery.c:1805
 #, c-format
@@ -3314,8 +3314,8 @@ msgstr "la restauration s'est terminée avant d'avoir atteint la cible configur
 
 #: access/transam/xlogrecovery.c:2019
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "ignore avec succès le contrecord manquant à %X/%X, surchargé à %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "ignore avec succès le contrecord manquant à %X/%08X, surchargé à %s"
 
 #: access/transam/xlogrecovery.c:2086
 #, fuzzy, c-format
@@ -3335,14 +3335,14 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2163
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "état de restauration cohérent atteint à %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "état de restauration cohérent atteint à %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2201
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "rejeu des WAL à %X/%X pour %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "rejeu des WAL à %X/%08X pour %s"
 
 #: access/transam/xlogrecovery.c:2299
 #, c-format
@@ -3358,8 +3358,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2324
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "identifiant timeline %u inattendu dans l'enregistrement du checkpoint, avant d'atteindre le point de restauration minimum %X/%X sur la timeline %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "identifiant timeline %u inattendu dans l'enregistrement du checkpoint, avant d'atteindre le point de restauration minimum %X/%08X sur la timeline %u"
 
 #: access/transam/xlogrecovery.c:2508 access/transam/xlogrecovery.c:2784
 #, c-format
@@ -3368,8 +3368,8 @@ msgstr "arrêt de la restauration après avoir atteint le point de cohérence"
 
 #: access/transam/xlogrecovery.c:2529
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "arrêt de la restauration avant l'emplacement WAL (LSN) « %X/%X »"
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "arrêt de la restauration avant l'emplacement WAL (LSN) « %X/%08X »"
 
 #: access/transam/xlogrecovery.c:2619
 #, c-format
@@ -3388,8 +3388,8 @@ msgstr "restauration en arrêt au point de restauration « %s », heure %s"
 
 #: access/transam/xlogrecovery.c:2697
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "arrêt de la restauration après l'emplacement WAL (LSN) « %X/%X »"
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "arrêt de la restauration après l'emplacement WAL (LSN) « %X/%08X »"
 
 #: access/transam/xlogrecovery.c:2764
 #, c-format
@@ -3424,19 +3424,19 @@ msgstr "Exécuter pg_wal_replay_resume() pour continuer."
 #: access/transam/xlogrecovery.c:3121
 #, fuzzy, c-format
 #| msgid "unexpected timeline ID %u in log segment %s, offset %u"
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "identifiant timeline %u inattendu dans le journal de transactions %s, décalage %u"
 
 #: access/transam/xlogrecovery.c:3329
 #, fuzzy, c-format
 #| msgid "could not read from log segment %s, offset %u: %m"
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
 msgstr "n'a pas pu lire le journal de transactions %s, décalage %u : %m"
 
 #: access/transam/xlogrecovery.c:3336
 #, fuzzy, c-format
 #| msgid "could not read from log segment %s, offset %u: read %d of %zu"
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
 msgstr "n'a pas pu lire à partir du segment %s du journal de transactions, décalage %u: lu %d sur %zu"
 
 #: access/transam/xlogrecovery.c:3976
@@ -3472,10 +3472,10 @@ msgstr "la nouvelle timeline %u n'est pas une enfant de la timeline %u du systè
 
 #: access/transam/xlogrecovery.c:4074
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
 msgstr ""
 "la nouvelle timeline %u a été créée à partir de la timeline de la base de données système %u\n"
-"avant le point de restauration courant %X/%X"
+"avant le point de restauration courant %X/%08X"
 
 #: access/transam/xlogrecovery.c:4093
 #, c-format
@@ -10292,7 +10292,7 @@ msgstr "Utilisez ALTER SUBSCRIPTION ... REFRESH with copy_data = false, ou utili
 
 #: commands/subscriptioncmds.c:1428
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
 msgstr ""
 
 #: commands/subscriptioncmds.c:1513
@@ -21051,13 +21051,13 @@ msgstr "début du décodage logique pour le slot « %s »"
 
 #: replication/logical/logical.c:610
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Envoi des transactions validées après %X/%X, lecture des journaux à partir de %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Envoi des transactions validées après %X/%08X, lecture des journaux à partir de %X/%08X."
 
 #: replication/logical/logical.c:758
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "slot « %s », plugin de sortie « %s », dans la fonction d'appel %s, associé au LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "slot « %s », plugin de sortie « %s », dans la fonction d'appel %s, associé au LSN %X/%08X"
 
 #: replication/logical/logical.c:764
 #, c-format
@@ -21158,9 +21158,9 @@ msgstr "n'a pas pu trouver d'état de réplication libre, augmentez max_replicat
 
 #: replication/logical/origin.c:806
 #, fuzzy, c-format
-#| msgid "recovered replication state of node %u to %X/%X"
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "restauration de l'état de réplication du nœud %u à %X/%X"
+#| msgid "recovered replication state of node %u to %X/%08X"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "restauration de l'état de réplication du nœud %u à %X/%08X"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -21278,8 +21278,8 @@ msgstr[1] "snapshot exporté pour le décodage logique : « %s » avec %u identi
 #: replication/logical/snapbuild.c:1388 replication/logical/snapbuild.c:1480
 #: replication/logical/snapbuild.c:1996
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "le décodage logique a trouvé le point de cohérence à %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "le décodage logique a trouvé le point de cohérence à %X/%08X"
 
 #: replication/logical/snapbuild.c:1390
 #, c-format
@@ -21288,8 +21288,8 @@ msgstr "Il n'existe pas de transactions en cours."
 
 #: replication/logical/snapbuild.c:1432
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "le décodage logique a trouvé le point de démarrage à %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "le décodage logique a trouvé le point de démarrage à %X/%08X"
 
 #: replication/logical/snapbuild.c:1434 replication/logical/snapbuild.c:1458
 #, c-format
@@ -21298,8 +21298,8 @@ msgstr "En attente de transactions (approximativement %d) plus anciennes que %u
 
 #: replication/logical/snapbuild.c:1456
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "le décodage logique a trouvé le point de cohérence initial à %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "le décodage logique a trouvé le point de cohérence initial à %X/%08X"
 
 #: replication/logical/snapbuild.c:1482
 #, c-format
@@ -21493,12 +21493,12 @@ msgstr "le curseur « %s » est déclaré mais non ouvert"
 #: replication/logical/worker.c:4805
 #, fuzzy, c-format
 #| msgid "cannot create logical replication slot in transaction that has performed writes"
-msgid "logical replication starts skipping transaction at LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
 msgstr "ne peut pas créer un slot de réplication logique dans une transaction qui a fait des écritures"
 
 #: replication/logical/worker.c:4819
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
 msgstr ""
 
 #: replication/logical/worker.c:4901
@@ -21509,7 +21509,7 @@ msgstr "la souscription « %s » existe déjà"
 
 #: replication/logical/worker.c:4902
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
 msgstr ""
 
 #: replication/logical/worker.c:4928
@@ -21527,7 +21527,7 @@ msgstr "traitement des données distantes pour la relation cible « %s.%s » de
 #: replication/logical/worker.c:4937
 #, fuzzy, c-format
 #| msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\""
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
 msgstr "traitement des données distantes pour la relation cible « %s.%s » de réplication logique, colonne « %s »"
 
 #: replication/logical/worker.c:4948
@@ -21539,7 +21539,7 @@ msgstr "traitement des données distantes pour la relation cible « %s.%s » de
 #: replication/logical/worker.c:4955
 #, fuzzy, c-format
 #| msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\""
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
 msgstr "traitement des données distantes pour la relation cible « %s.%s » de réplication logique, colonne « %s »"
 
 #: replication/logical/worker.c:4966
@@ -21551,7 +21551,7 @@ msgstr "traitement des données distantes pour la relation cible « %s.%s » de
 #: replication/logical/worker.c:4974
 #, fuzzy, c-format
 #| msgid "processing remote data for replication target relation \"%s.%s\" column \"%s\""
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
 msgstr "traitement des données distantes pour la relation cible « %s.%s » de réplication logique, colonne « %s »"
 
 #: replication/pgoutput/pgoutput.c:317
@@ -21688,8 +21688,8 @@ msgstr ""
 
 #: replication/slot.c:1271
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
 msgstr[0] ""
 msgstr[1] ""
 
@@ -21778,8 +21778,8 @@ msgstr "Ce slot n'a jamais réservé de WAL précédemment, ou a été invalidé
 
 #: replication/slotfuncs.c:641
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "impossible d'avancer le slot de réplication vers %X/%X, le minimum est %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "impossible d'avancer le slot de réplication vers %X/%08X, le minimum est %X/%08X"
 
 #: replication/slotfuncs.c:748
 #, c-format
@@ -21886,13 +21886,13 @@ msgstr "la plus grande timeline %u du serveur principal est derrière la timelin
 
 #: replication/walreceiver.c:417
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "démarré le flux des journaux depuis le principal à %X/%X sur la timeline %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "démarré le flux des journaux depuis le principal à %X/%08X sur la timeline %u"
 
 #: replication/walreceiver.c:421
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "recommence le flux WAL à %X/%X sur la timeline %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "recommence le flux WAL à %X/%08X sur la timeline %u"
 
 #: replication/walreceiver.c:457
 #, c-format
@@ -21906,8 +21906,8 @@ msgstr "réplication terminée par le serveur primaire"
 
 #: replication/walreceiver.c:502
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "Fin du WAL atteint sur la timeline %u à %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "Fin du WAL atteint sur la timeline %u à %X/%08X."
 
 #: replication/walreceiver.c:592
 #, c-format
@@ -21959,18 +21959,18 @@ msgstr "ne peut pas utiliser un slot de réplication logique pour une réplicati
 
 #: replication/walsender.c:770
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "le point de reprise %X/%X de la timeline %u n'est pas dans l'historique du serveur"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "le point de reprise %X/%08X de la timeline %u n'est pas dans l'historique du serveur"
 
 #: replication/walsender.c:773
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "L'historique du serveur a changé à partir de la timeline %u à %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "L'historique du serveur a changé à partir de la timeline %u à %X/%08X."
 
 #: replication/walsender.c:817
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "le point de reprise requis %X/%X est devant la position de vidage des WAL de ce serveur %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "le point de reprise requis %X/%08X est devant la position de vidage des WAL de ce serveur %X/%08X"
 
 #: replication/walsender.c:1010
 #, fuzzy, c-format
@@ -31488,8 +31488,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ "FROM."
 
 #, c-format
-#~ msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
-#~ msgstr "BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+#~ msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
+#~ msgstr "BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #~ msgid "COPY BINARY is not supported to stdout or from stdin"
 #~ msgstr "COPY BINARY n'est pas supporté vers stdout ou à partir de stdin"
@@ -33140,8 +33140,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "changing return type of function %s from %s to %s"
 #~ msgstr "changement du type de retour de la fonction %s de %s vers %s"
 
-#~ msgid "checkpoint record is at %X/%X"
-#~ msgstr "l'enregistrement du point de vérification est à %X/%X"
+#~ msgid "checkpoint record is at %X/%08X"
+#~ msgstr "l'enregistrement du point de vérification est à %X/%08X"
 
 #~ msgid "checkpoint skipped because system is idle"
 #~ msgstr "checkpoint ignoré car le système est inactif"
@@ -34047,8 +34047,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "inconsistent use of year %04d and \"BC\""
 #~ msgstr "utilisation non cohérente de l'année %04d et de « BC »"
 
-#~ msgid "incorrect hole size in record at %X/%X"
-#~ msgstr "taille du trou incorrect à l'enregistrement %X/%X"
+#~ msgid "incorrect hole size in record at %X/%08X"
+#~ msgstr "taille du trou incorrect à l'enregistrement %X/%08X"
 
 #, c-format
 #~ msgid "incorrect test message transmission on socket for statistics collector"
@@ -34056,8 +34056,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ "transmission incorrecte du message de tests sur la socket du récupérateur de\n"
 #~ "statistiques"
 
-#~ msgid "incorrect total length in record at %X/%X"
-#~ msgstr "longueur totale incorrecte à l'enregistrement %X/%X"
+#~ msgid "incorrect total length in record at %X/%08X"
+#~ msgstr "longueur totale incorrecte à l'enregistrement %X/%08X"
 
 #~ msgid "index \"%s\" is not a b-tree"
 #~ msgstr "l'index « %s » n'est pas un btree"
@@ -34129,22 +34129,22 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "invalid WAL message received from primary"
 #~ msgstr "format du message invalide"
 
-#~ msgid "invalid backup block size in record at %X/%X"
-#~ msgstr "taille du bloc de sauvegarde invalide dans l'enregistrement à %X/%X"
+#~ msgid "invalid backup block size in record at %X/%08X"
+#~ msgstr "taille du bloc de sauvegarde invalide dans l'enregistrement à %X/%08X"
 
 #, c-format
 #~ msgid "invalid checkpoint link in backup_label file"
 #~ msgstr "lien du point de vérification invalide dans le fichier backup_label"
 
 #, c-format
-#~ msgid "invalid compressed image at %X/%X, block %d"
-#~ msgstr "image compressée invalide à %X/%X, bloc %d"
+#~ msgid "invalid compressed image at %X/%08X, block %d"
+#~ msgstr "image compressée invalide à %X/%08X, bloc %d"
 
 #~ msgid "invalid concatenation of jsonb objects"
 #~ msgstr "concaténation invalide d'objets jsonb"
 
-#~ msgid "invalid contrecord length %u at %X/%X reading %X/%X, expected %u"
-#~ msgstr "longueur %u invalide du contrecord à %X/%X en lisant %X/%X, attendait %u"
+#~ msgid "invalid contrecord length %u at %X/%08X reading %X/%08X, expected %u"
+#~ msgstr "longueur %u invalide du contrecord à %X/%08X en lisant %X/%08X, attendait %u"
 
 #~ msgid "invalid contrecord length %u in log file %u, segment %u, offset %u"
 #~ msgstr ""
@@ -34289,16 +34289,16 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "invalid publish list"
 #~ msgstr "liste de publication invalide"
 
-#~ msgid "invalid record length at %X/%X"
-#~ msgstr "longueur invalide de l'enregistrement à %X/%X"
+#~ msgid "invalid record length at %X/%08X"
+#~ msgstr "longueur invalide de l'enregistrement à %X/%08X"
 
 #, c-format
-#~ msgid "invalid record length at %X/%X: wanted %u, got %u"
-#~ msgstr "longueur invalide de l'enregistrement à %X/%X : voulait %u, a eu %u"
+#~ msgid "invalid record length at %X/%08X: wanted %u, got %u"
+#~ msgstr "longueur invalide de l'enregistrement à %X/%08X : voulait %u, a eu %u"
 
 #, c-format
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "décalage invalide de l'enregistrement %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "décalage invalide de l'enregistrement %X/%08X"
 
 #~ msgid "invalid regexp option: \"%c\""
 #~ msgstr "option invalide de l'expression rationnelle : « %c »"
@@ -34359,8 +34359,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "invalid xl_info in secondary checkpoint record"
 #~ msgstr "xl_info invalide  dans l'enregistrement du point de vérification secondaire"
 
-#~ msgid "invalid xlog switch record at %X/%X"
-#~ msgstr "enregistrement de basculement du journal de transaction invalide à %X/%X"
+#~ msgid "invalid xlog switch record at %X/%08X"
+#~ msgstr "enregistrement de basculement du journal de transaction invalide à %X/%08X"
 
 #~ msgid "invalid zero-length item array in MVDependencies"
 #~ msgstr "tableau d'éléments de longueur zéro invalide dans MVDependencies"
@@ -34369,8 +34369,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgstr "tableau d'élément de longueur zéro invalide dans MVNDistinct"
 
 #, c-format
-#~ msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size"
-#~ msgstr "invalidation du slot « %s » parce que son restart_lsn %X/%X dépasse max_slot_wal_keep_size"
+#~ msgid "invalidating slot \"%s\" because its restart_lsn %X/%08X exceeds max_slot_wal_keep_size"
+#~ msgstr "invalidation du slot « %s » parce que son restart_lsn %X/%08X dépasse max_slot_wal_keep_size"
 
 #~ msgid "krb5 authentication is not supported on local sockets"
 #~ msgstr ""
@@ -34468,8 +34468,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgstr "opérateur d'affectation manquant"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "contrecord manquant à %X/%X"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "contrecord manquant à %X/%08X"
 
 #~ msgid "missing data for OID column"
 #~ msgstr "données manquantes pour la colonne OID"
@@ -34673,8 +34673,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgstr "doit avoir l'attribut CREATEROLE"
 
 #, c-format
-#~ msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
-#~ msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+#~ msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
+#~ msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_IS_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #~ msgid "neither input type is an array"
 #~ msgstr "aucun type de données n'est un tableau"
@@ -34918,18 +34918,18 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgstr "paquet du mot de passe reçu"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "longueur trop importante de l'enregistrement %u à %X/%X"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "longueur trop importante de l'enregistrement %u à %X/%08X"
 
-#~ msgid "record with zero length at %X/%X"
-#~ msgstr "enregistrement de longueur nulle à %X/%X"
+#~ msgid "record with zero length at %X/%08X"
+#~ msgstr "enregistrement de longueur nulle à %X/%08X"
 
 #~ msgid "recovery is still in progress, can't accept WAL streaming connections"
 #~ msgstr "la restauration est en cours, ne peut pas accepter les connexions de flux WAL"
 
-#~ msgid "recovery restart point at %X/%X with latest known log time %s"
+#~ msgid "recovery restart point at %X/%08X with latest known log time %s"
 #~ msgstr ""
-#~ "point de relancement de la restauration sur %X/%X avec %s comme dernière\n"
+#~ "point de relancement de la restauration sur %X/%08X avec %s comme dernière\n"
 #~ "date connue du journal"
 
 #~ msgid "recovery_target_time is not a valid timestamp: \"%s\""
@@ -34941,11 +34941,11 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "recycled write-ahead log file \"%s\""
 #~ msgstr "recyclage du journal de transactions « %s »"
 
-#~ msgid "redo record is at %X/%X; shutdown %s"
-#~ msgstr "l'enregistrement à ré-exécuter se trouve à %X/%X ; arrêt %s"
+#~ msgid "redo record is at %X/%08X; shutdown %s"
+#~ msgstr "l'enregistrement à ré-exécuter se trouve à %X/%08X ; arrêt %s"
 
-#~ msgid "redo starts at %X/%X, consistency will be reached at %X/%X"
-#~ msgstr "la restauration comme à %X/%X, la cohérence sera atteinte à %X/%X"
+#~ msgid "redo starts at %X/%08X, consistency will be reached at %X/%08X"
+#~ msgstr "la restauration comme à %X/%08X, la cohérence sera atteinte à %X/%08X"
 
 #, c-format
 #~ msgid "reference to parent directory (\"..\") not allowed"
@@ -35128,8 +35128,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "skipping redundant vacuum to prevent wraparound of table \"%s.%s.%s\""
 #~ msgstr "ignore un VACUUM redondant pour éviter le rebouclage des identifiants dans la table \"%s.%s.%s\""
 
-#~ msgid "skipping restartpoint, already performed at %X/%X"
-#~ msgstr "ignore le point de redémarrage, déjà réalisé à %X/%X"
+#~ msgid "skipping restartpoint, already performed at %X/%08X"
+#~ msgstr "ignore le point de redémarrage, déjà réalisé à %X/%08X"
 
 #~ msgid "skipping restartpoint, recovery has already ended"
 #~ msgstr "restartpoint ignoré, la récupération est déjà terminée"
@@ -35328,8 +35328,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "there are objects dependent on %s"
 #~ msgstr "des objets dépendent de %s"
 
-#~ msgid "there is no contrecord flag at %X/%X reading %X/%X"
-#~ msgstr "il n'existe pas de drapeau contrecord à %X/%X en lisant %X/%X"
+#~ msgid "there is no contrecord flag at %X/%08X reading %X/%08X"
+#~ msgstr "il n'existe pas de drapeau contrecord à %X/%08X en lisant %X/%08X"
 
 #~ msgid "there is no contrecord flag in log file %u, segment %u, offset %u"
 #~ msgstr ""
@@ -35449,8 +35449,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgstr "fin de ligne ou de lexeme inattendu sur la ligne %d du thesaurus « %s »"
 
 #, c-format
-#~ msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-#~ msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, segment %u"
+#~ msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+#~ msgstr "pageaddr %X/%08X inattendue dans le journal de transactions %s, segment %u"
 
 #~ msgid "unexpected standby message type \"%c\", after receiving CopyDone"
 #~ msgstr "type de message standby « %c » inattendu, après avoir reçu CopyDone"
@@ -35495,8 +35495,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ msgid "unsupported language \"%s\""
 #~ msgstr "langage non supporté « %s »"
 
-#~ msgid "updated min recovery point to %X/%X on timeline %u"
-#~ msgstr "mise à jour du point minimum de restauration sur %X/%X pour la timeline %u"
+#~ msgid "updated min recovery point to %X/%08X on timeline %u"
+#~ msgstr "mise à jour du point minimum de restauration sur %X/%08X pour la timeline %u"
 
 #~ msgid "updated partition constraint for default partition \"%s\" is implied by existing constraints"
 #~ msgstr "la contrainte de partitionnement pour la partition par défaut « %s » est implicite du fait de contraintes existantes"
@@ -35512,8 +35512,8 @@ msgstr "ne peut pas importer un snapshot à partir d'une base de données diffé
 #~ "utilisation des informations de pg_pltemplate au lieu des paramètres de\n"
 #~ "CREATE LANGUAGE"
 
-#~ msgid "using previous checkpoint record at %X/%X"
-#~ msgstr "utilisation du précédent enregistrement d'un point de vérification à %X/%X"
+#~ msgid "using previous checkpoint record at %X/%08X"
+#~ msgstr "utilisation du précédent enregistrement d'un point de vérification à %X/%08X"
 
 #, c-format
 #~ msgid "using stale statistics instead of current ones because stats collector is not responding"
diff --git a/src/backend/po/id.po b/src/backend/po/id.po
index d5d484132b7..f9b0b0b9d8a 100644
--- a/src/backend/po/id.po
+++ b/src/backend/po/id.po
@@ -911,8 +911,8 @@ msgstr "tidak dapat menulis ke file log %s pada offset %u, panjang %lu : %m"
 
 #: access/transam/xlog.c:1877
 #, c-format
-msgid "updated min recovery point to %X/%X on timeline %u"
-msgstr "point pemulihan diperbaharui %X/%X pada lini waktu %u"
+msgid "updated min recovery point to %X/%08X on timeline %u"
+msgstr "point pemulihan diperbaharui %X/%08X pada lini waktu %u"
 
 #: access/transam/xlog.c:2452
 #, c-format
@@ -1001,10 +1001,10 @@ msgstr "lini waktu baru %u bukan anak dari lini waktu sistem database %u"
 
 #: access/transam/xlog.c:3438
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
 msgstr ""
 "la nouvelle timeline %u a été créée à partir de la timeline de la base de données système %u\n"
-"avant le point de restauration courant %X/%X"
+"avant le point de restauration courant %X/%08X"
 
 #: access/transam/xlog.c:3457
 #, c-format
@@ -1372,8 +1372,8 @@ msgstr "Gagal ketika prosesor membaca pengalokasian XLog "
 
 #: access/transam/xlog.c:5029 access/transam/xlog.c:5096
 #, c-format
-msgid "checkpoint record is at %X/%X"
-msgstr "'chechpoint record' pada %X/%X"
+msgid "checkpoint record is at %X/%08X"
+msgstr "'chechpoint record' pada %X/%08X"
 
 #: access/transam/xlog.c:5043
 #, c-format
@@ -1397,8 +1397,8 @@ msgstr "tidak dapat menemukan 'checkpoint record' yang valid"
 
 #: access/transam/xlog.c:5115
 #, c-format
-msgid "using previous checkpoint record at %X/%X"
-msgstr "mengunakan 'checkpoint record' sebelumnya pada %X/%X"
+msgid "using previous checkpoint record at %X/%08X"
+msgstr "mengunakan 'checkpoint record' sebelumnya pada %X/%08X"
 
 #: access/transam/xlog.c:5145
 #, c-format
@@ -1407,18 +1407,18 @@ msgstr "lini waktu yang diperlukan %u bukan anak dari histori server ini"
 
 #: access/transam/xlog.c:5147
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "'checkpoint' terakhir pada %X/%X dalam lini waktu %u, tapi dalam histori dari lini waktu yang diperlukan,'forked' server mati dari lini waktu ini pada %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "'checkpoint' terakhir pada %X/%08X dalam lini waktu %u, tapi dalam histori dari lini waktu yang diperlukan,'forked' server mati dari lini waktu ini pada %X/%08X."
 
 #: access/transam/xlog.c:5163
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "lini waktu yang diperlukan, %u, tidak termasuk titik pemulihan minimal (%X/%X) dalam lini waktu%u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "lini waktu yang diperlukan, %u, tidak termasuk titik pemulihan minimal (%X/%08X) dalam lini waktu%u"
 
 #: access/transam/xlog.c:5172
 #, c-format
-msgid "redo record is at %X/%X; shutdown %s"
-msgstr "'redo record' pada %X/%X ; mati %s"
+msgid "redo record is at %X/%08X; shutdown %s"
+msgstr "'redo record' pada %X/%08X ; mati %s"
 
 #: access/transam/xlog.c:5176
 #, c-format
@@ -1484,13 +1484,13 @@ msgstr "initisasi untuk « Hot Standby »"
 
 #: access/transam/xlog.c:5530
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "memulai kembali %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "memulai kembali %X/%08X"
 
 #: access/transam/xlog.c:5722
 #, c-format
-msgid "redo done at %X/%X"
-msgstr "'redo' selesai pada %X/%X"
+msgid "redo done at %X/%08X"
+msgstr "'redo' selesai pada %X/%08X"
 
 #: access/transam/xlog.c:5727 access/transam/xlog.c:7582
 #, c-format
@@ -1534,8 +1534,8 @@ msgstr "ID lini waktu baru yang dipilih : %u"
 
 #: access/transam/xlog.c:6203
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "status pemulihan yang sesuai dijangkau pada %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "status pemulihan yang sesuai dijangkau pada %X/%08X"
 
 #: access/transam/xlog.c:6386
 #, c-format
@@ -1634,18 +1634,18 @@ msgstr "melewatkan 'restartpoint', pemulihan telah selesai"
 
 #: access/transam/xlog.c:7419
 #, c-format
-msgid "skipping restartpoint, already performed at %X/%X"
-msgstr "melewatkan 'restartpoint', sudah dilakukan pada %X/%X"
+msgid "skipping restartpoint, already performed at %X/%08X"
+msgstr "melewatkan 'restartpoint', sudah dilakukan pada %X/%08X"
 
 #: access/transam/xlog.c:7580
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "pemulihan 'restart point' pada %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "pemulihan 'restart point' pada %X/%08X"
 
 #: access/transam/xlog.c:7706
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "pemulihan 'point' « %s » dibuat pada %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "pemulihan 'point' « %s » dibuat pada %X/%08X"
 
 #: access/transam/xlog.c:7921
 #, c-format
@@ -1659,8 +1659,8 @@ msgstr "ID lini waktu tidak terduga %u (setelah %u) pada 'checkpoint record'"
 
 #: access/transam/xlog.c:7946
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "ID lini waktu tidak terduga %u pada 'chechpoint record', sebelum mencapai titik pemulihan minimal %X/%X pada lini waktu %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "ID lini waktu tidak terduga %u pada 'chechpoint record', sebelum mencapai titik pemulihan minimal %X/%08X pada lini waktu %u"
 
 #: access/transam/xlog.c:8013
 #, c-format
@@ -12862,13 +12862,13 @@ msgstr "lini waktu paling tinggi %u dari yang utama ada di belakang lini waktu p
 
 #: replication/walreceiver.c:364
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "memulai streaming WAL dari yang utama di %X/%X pada lini waktu %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "memulai streaming WAL dari yang utama di %X/%08X pada lini waktu %u"
 
 #: replication/walreceiver.c:369
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "memulai ulang perubahan WAL pada %X/%X dari liniwaktu %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "memulai ulang perubahan WAL pada %X/%08X dari liniwaktu %u"
 
 #: replication/walreceiver.c:403
 #, c-format
@@ -12882,8 +12882,8 @@ msgstr "replikasi diputus oleh server utama"
 
 #: replication/walreceiver.c:441
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "Akhir WAL sudah tercapai pada lini waktu %u sampai %X/%X"
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "Akhir WAL sudah tercapai pada lini waktu %u sampai %X/%08X"
 
 #: replication/walreceiver.c:488
 #, c-format
@@ -12922,18 +12922,18 @@ msgstr "tak dapat mencapai awal file « %s » : %m"
 
 #: replication/walsender.c:484
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "titik mulai yang diminta %X/%X dari lini waktu %u tidak ada dalam histori server ini"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "titik mulai yang diminta %X/%08X dari lini waktu %u tidak ada dalam histori server ini"
 
 #: replication/walsender.c:488
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "Histori server ini berasal dari lini waktu %u di %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "Histori server ini berasal dari lini waktu %u di %X/%08X."
 
 #: replication/walsender.c:533
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "titik mulai yg diminta %X/%X lebih awal dari posisi pengosongan WAL server ini %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "titik mulai yg diminta %X/%08X lebih awal dari posisi pengosongan WAL server ini %X/%08X"
 
 #: replication/walsender.c:707 replication/walsender.c:757 replication/walsender.c:806
 #, c-format
diff --git a/src/backend/po/it.po b/src/backend/po/it.po
index 51b69431edd..b08b7a816ef 100644
--- a/src/backend/po/it.po
+++ b/src/backend/po/it.po
@@ -1785,18 +1785,18 @@ msgstr "Errore nell'allocazione di un processore di lettura del WAL."
 
 #: access/transam/twophase.c:1424
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "impossibile leggere lo stato a due fasi del WAL a %X/%X: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "impossibile leggere lo stato a due fasi del WAL a %X/%08X: %s"
 
 #: access/transam/twophase.c:1429
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "lettura dello stato a due fasi dal WAL a %X/%X fallita"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "lettura dello stato a due fasi dal WAL a %X/%08X fallita"
 
 #: access/transam/twophase.c:1437
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "i dati attesi sullo stato a due fasi non sono presenti nel WAL a %X/%X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "i dati attesi sullo stato a due fasi non sono presenti nel WAL a %X/%08X"
 
 #: access/transam/twophase.c:1733
 #, c-format
@@ -1982,8 +1982,8 @@ msgstr "non è possibile avere più di 2^32-1 comandi in una sottotransazione"
 
 #: access/transam/xlog.c:1463
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "richiesta di svuotare oltre la fine del WAL generato; richiesta %X/%X, posizione attuale %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "richiesta di svuotare oltre la fine del WAL generato; richiesta %X/%08X, posizione attuale %X/%08X"
 
 #: access/transam/xlog.c:2224
 #, c-format
@@ -2271,8 +2271,8 @@ msgstr "attività concorrente del log write-ahead mentre il database è in fase
 
 #: access/transam/xlog.c:7163
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "punto di avvio del ripristino in %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "punto di avvio del ripristino in %X/%08X"
 
 #: access/transam/xlog.c:7165
 #, c-format
@@ -2281,8 +2281,8 @@ msgstr "L'ultima transazione completata è stata registrata all'ora %s."
 
 #: access/transam/xlog.c:7412
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "punto di ripristino \"%s\" creato in %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "punto di ripristino \"%s\" creato in %X/%08X"
 
 #: access/transam/xlog.c:7619
 #, c-format
@@ -2516,18 +2516,18 @@ msgstr "recovery_prefetch non è supportato su piattaforme prive di posix_fadvis
 
 #: access/transam/xlogreader.c:625
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "offset del record non valido a %X/%X"
+msgid "invalid record offset at %X/%08X"
+msgstr "offset del record non valido a %X/%08X"
 
 #: access/transam/xlogreader.c:633
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord richiesto da %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord richiesto da %X/%08X"
 
 #: access/transam/xlogreader.c:674 access/transam/xlogreader.c:1121
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "lunghezza del record a %X/%X non valida: atteso %u, ricevuto %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "lunghezza del record a %X/%08X non valida: atteso %u, ricevuto %u"
 
 #: access/transam/xlogreader.c:703
 #, c-format
@@ -2536,38 +2536,38 @@ msgstr "memoria insufficiente durante il tentativo di decodificare un record di
 
 #: access/transam/xlogreader.c:725
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "lunghezza del record %u a %X/%X eccessiva"
+msgid "record length %u at %X/%08X too long"
+msgstr "lunghezza del record %u a %X/%08X eccessiva"
 
 #: access/transam/xlogreader.c:774
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "non c'è un flag di contrecord a %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "non c'è un flag di contrecord a %X/%08X"
 
 #: access/transam/xlogreader.c:787
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "lunghezza contrada non valida %u (prevista %lld) a %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "lunghezza contrada non valida %u (prevista %lld) a %X/%08X"
 
 #: access/transam/xlogreader.c:922
 #, c-format
-msgid "missing contrecord at %X/%X"
-msgstr "record mancante a %X/%X"
+msgid "missing contrecord at %X/%08X"
+msgstr "record mancante a %X/%08X"
 
 #: access/transam/xlogreader.c:1129
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ID gestore risorse %u non valido su %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ID gestore risorse %u non valido su %X/%08X"
 
 #: access/transam/xlogreader.c:1142 access/transam/xlogreader.c:1158
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "record con link-precedente %X/%X non corretto a %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "record con link-precedente %X/%08X non corretto a %X/%08X"
 
 #: access/transam/xlogreader.c:1194
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%08X"
 
 #: access/transam/xlogreader.c:1231
 #, c-format
@@ -2596,8 +2596,8 @@ msgstr "Il file di WAL è di un database diverso: XLOG_BLCKSZ non corretto nell'
 
 #: access/transam/xlogreader.c:1305
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "pageaddr inaspettato %X/%X nel segmento di log %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "pageaddr inaspettato %X/%08X nel segmento di log %s, offset %u"
 
 #: access/transam/xlogreader.c:1330
 #, c-format
@@ -2606,53 +2606,53 @@ msgstr "rilevato ID della timeline %u (dopo %u) fuori sequenza nel segmento di l
 
 #: access/transam/xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id fuori sequenza %u a %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id fuori sequenza %u a %X/%08X"
 
 #: access/transam/xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%08X"
 
 #: access/transam/xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%08X"
 
 #: access/transam/xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%08X"
 
 #: access/transam/xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%08X"
 
 #: access/transam/xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED impostato, ma blocca la lunghezza dell'immagine %u a %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED impostato, ma blocca la lunghezza dell'immagine %u a %X/%08X"
 
 #: access/transam/xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%08X"
 
 #: access/transam/xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%08X"
 
 #: access/transam/xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u non valido a %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u non valido a %X/%08X"
 
 #: access/transam/xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "record con lunghezza non valida a %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "record con lunghezza non valida a %X/%08X"
 
 #: access/transam/xlogreader.c:1967
 #, c-format
@@ -2661,28 +2661,28 @@ msgstr "impossibile individuare il blocco di backup con ID %d nel record WAL"
 
 #: access/transam/xlogreader.c:2051
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "impossibile ripristinare l'immagine in %X/%X con il blocco %d non valido specificato"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "impossibile ripristinare l'immagine in %X/%08X con il blocco %d non valido specificato"
 
 #: access/transam/xlogreader.c:2058
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X con stato non valido, blocco %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X con stato non valido, blocco %d"
 
 #: access/transam/xlogreader.c:2085 access/transam/xlogreader.c:2102
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X compressa con %s non supportata da build, blocco %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X compressa con %s non supportata da build, blocco %d"
 
 #: access/transam/xlogreader.c:2111
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X compressa con metodo sconosciuto, blocco %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X compressa con metodo sconosciuto, blocco %d"
 
 #: access/transam/xlogreader.c:2119
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "impossibile decomprimere l'immagine in %X/%X, blocco %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "impossibile decomprimere l'immagine in %X/%08X, blocco %d"
 
 #: access/transam/xlogrecovery.c:526
 #, c-format
@@ -2706,8 +2706,8 @@ msgstr "avvio del ripristino point-in-time a \"%s\""
 
 #: access/transam/xlogrecovery.c:541
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "avvio del ripristino point-in-time alla locazione WAL (LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "avvio del ripristino point-in-time alla locazione WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:545
 #, c-format
@@ -2772,13 +2772,13 @@ msgstr "la timeline richiesta %u non è figlia della storia di questo server"
 
 #: access/transam/xlogrecovery.c:791
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "L'ultimo checkpoint è a %X/%X sulla timeline %u, ma nella storia della timeline richiesta, il server si è separato da quella timeline a %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "L'ultimo checkpoint è a %X/%08X sulla timeline %u, ma nella storia della timeline richiesta, il server si è separato da quella timeline a %X/%08X."
 
 #: access/transam/xlogrecovery.c:805
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "la timeline richiesta %u non contiene il punto di recupero minimo %X/%X sulla timeline %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "la timeline richiesta %u non contiene il punto di recupero minimo %X/%08X sulla timeline %u"
 
 #: access/transam/xlogrecovery.c:833
 #, c-format
@@ -2852,13 +2852,13 @@ msgstr "L'ID sequenza temporale analizzato è %u, ma previsto %u."
 
 #: access/transam/xlogrecovery.c:1641
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "il redo inizia in %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "il redo inizia in %X/%08X"
 
 #: access/transam/xlogrecovery.c:1654
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "ripetizione in corso, tempo trascorso: %ld.%02d s, LSN corrente: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "ripetizione in corso, tempo trascorso: %ld.%02d s, LSN corrente: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1746
 #, c-format
@@ -2867,8 +2867,8 @@ msgstr "lo stop point di ripristino è posto prima di un punto di ripristino con
 
 #: access/transam/xlogrecovery.c:1778
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "ripetizione eseguita con utilizzo del sistema %X/%X: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "ripetizione eseguita con utilizzo del sistema %X/%08X: %s"
 
 #: access/transam/xlogrecovery.c:1784
 #, c-format
@@ -2887,8 +2887,8 @@ msgstr "il ripristino è terminato prima del raggiungimento della destinazione d
 
 #: access/transam/xlogrecovery.c:1979
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "saltato con successo il record mancante a %X/%X, sovrascritto a %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "saltato con successo il record mancante a %X/%08X, sovrascritto a %s"
 
 #: access/transam/xlogrecovery.c:2046
 #, c-format
@@ -2907,14 +2907,14 @@ msgstr "Rimuovere quelle directory o impostare allow_in_place_tablespaces su ON
 
 #: access/transam/xlogrecovery.c:2123
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "è stato raggiunto uno stato di ripristino consistente a %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "è stato raggiunto uno stato di ripristino consistente a %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2161
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "Ripristino WAL a %X/%X per %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "Ripristino WAL a %X/%08X per %s"
 
 #: access/transam/xlogrecovery.c:2257
 #, c-format
@@ -2928,8 +2928,8 @@ msgstr "timeline ID %u imprevista (dopo %u) nel record di checkpoint"
 
 #: access/transam/xlogrecovery.c:2282
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "timeline ID %u imprevista nel record di checkpoint, prima di raggiungere il punto di recupero minimo %X/%X sulla timeline %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "timeline ID %u imprevista nel record di checkpoint, prima di raggiungere il punto di recupero minimo %X/%08X sulla timeline %u"
 
 #: access/transam/xlogrecovery.c:2466 access/transam/xlogrecovery.c:2737
 #, c-format
@@ -2938,8 +2938,8 @@ msgstr "il ripristino è stato interrotto dopo aver raggiunto la consistenza"
 
 #: access/transam/xlogrecovery.c:2487
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "il ripristino è stato interrotto prima della locazione WAL (LSN) \"%X/%X\""
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "il ripristino è stato interrotto prima della locazione WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2572
 #, c-format
@@ -2958,8 +2958,8 @@ msgstr "il ripristino è stato interrotto al punto di ripristino \"%s\" alle %s"
 
 #: access/transam/xlogrecovery.c:2650
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "il ripristino è stato interrotto dopo la locazione WAL (LSN) \"%X/%X\""
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "il ripristino è stato interrotto dopo la locazione WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2717
 #, c-format
@@ -3063,8 +3063,8 @@ msgstr "la nuova timeline %u non è figlia della timeline %u del database"
 
 #: access/transam/xlogrecovery.c:4074
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "la nuova timeline %u si è staccata dalla timeline attuale %u prima del punto di recupero corrente %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "la nuova timeline %u si è staccata dalla timeline attuale %u prima del punto di recupero corrente %X/%08X"
 
 #: access/transam/xlogrecovery.c:4093
 #, c-format
@@ -9317,8 +9317,8 @@ msgstr "deve essere superutente per saltare la transazione"
 
 #: commands/subscriptioncmds.c:1278
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
-msgstr "ignora la posizione WAL (LSN %X/%X) deve essere maggiore dell'origine LSN %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
+msgstr "ignora la posizione WAL (LSN %X/%08X) deve essere maggiore dell'origine LSN %X/%08X"
 
 #: commands/subscriptioncmds.c:1358
 #, c-format
@@ -19344,13 +19344,13 @@ msgstr "avvio della decodifica logica per lo slot \"%s\""
 
 #: replication/logical/logical.c:570
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Commit delle transazioni streaming dopo %X/%X, lettura del WAL dopo %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Commit delle transazioni streaming dopo %X/%08X, lettura del WAL dopo %X/%08X."
 
 #: replication/logical/logical.c:718
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "slot \"%s\", plugin di output \"%s\", nel callback %s, LSN associato %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "slot \"%s\", plugin di output \"%s\", nel callback %s, LSN associato %X/%08X"
 
 #: replication/logical/logical.c:724
 #, c-format
@@ -19454,8 +19454,8 @@ msgstr "nessuno stato di replica libero trovato, incrementa \"max_replication_sl
 
 #: replication/logical/origin.c:790
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "stato di replica ripristinato dal nodo %d a %X/%X"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "stato di replica ripristinato dal nodo %d a %X/%08X"
 
 #: replication/logical/origin.c:800
 #, c-format
@@ -19563,8 +19563,8 @@ msgstr[1] "snapshot di decidifica logica esportati: \"%s\" con %u ID di transazi
 
 #: replication/logical/snapbuild.c:1357 replication/logical/snapbuild.c:1464 replication/logical/snapbuild.c:1993
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "la decodifica logica ha trovato un punto consistente a %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "la decodifica logica ha trovato un punto consistente a %X/%08X"
 
 #: replication/logical/snapbuild.c:1359
 #, c-format
@@ -19573,8 +19573,8 @@ msgstr "Non ci sono transazioni in corso."
 
 #: replication/logical/snapbuild.c:1415
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "la decodifica logica ha trovato un punto di avvio iniziale a %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "la decodifica logica ha trovato un punto di avvio iniziale a %X/%08X"
 
 #: replication/logical/snapbuild.c:1417 replication/logical/snapbuild.c:1441
 #, c-format
@@ -19583,8 +19583,8 @@ msgstr "In attesa che alcune transazioni (circa %d) più vecchie di %u finiscano
 
 #: replication/logical/snapbuild.c:1439
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "la decodifica logica ha trovato il punto iniziale consistente a %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "la decodifica logica ha trovato il punto iniziale consistente a %X/%08X"
 
 #: replication/logical/snapbuild.c:1466
 #, c-format
@@ -19758,13 +19758,13 @@ msgstr "la sottoscrizione \"%s\" è stata disabilitata a causa di un errore"
 
 #: replication/logical/worker.c:3879
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "la replica logica inizia a saltare la transazione su LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "la replica logica inizia a saltare la transazione su LSN %X/%08X"
 
 #: replication/logical/worker.c:3893
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "replica logica completata ignorando la transazione su LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "replica logica completata ignorando la transazione su LSN %X/%08X"
 
 #: replication/logical/worker.c:3975
 #, c-format
@@ -19773,8 +19773,8 @@ msgstr "skip-LSN della sottoscrizione \"%s\" cancellato"
 
 #: replication/logical/worker.c:3976
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
-msgstr "La posizione WAL finale (LSN) %X/%X della transazione remota non corrispondeva a skip-LSN %X/%X."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
+msgstr "La posizione WAL finale (LSN) %X/%08X della transazione remota non corrispondeva a skip-LSN %X/%08X."
 
 #: replication/logical/worker.c:4002
 #, c-format
@@ -19788,18 +19788,18 @@ msgstr "elaborazione dei dati remoti per l'origine della replica \"%s\" durante
 
 #: replication/logical/worker.c:4011
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
-msgstr "elaborazione dei dati remoti per l'origine della replica \"%s\" durante il tipo di messaggio \"%s\" nella transazione %u, terminata alle %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "elaborazione dei dati remoti per l'origine della replica \"%s\" durante il tipo di messaggio \"%s\" nella transazione %u, terminata alle %X/%08X"
 
 #: replication/logical/worker.c:4018
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
-msgstr "elaborazione dei dati remoti per l'origine della replica \"%s\" durante il tipo di messaggio \"%s\" per la relazione di destinazione della replica \"%s.%s\" nella transazione %u, terminata alle %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
+msgstr "elaborazione dei dati remoti per l'origine della replica \"%s\" durante il tipo di messaggio \"%s\" per la relazione di destinazione della replica \"%s.%s\" nella transazione %u, terminata alle %X/%08X"
 
 #: replication/logical/worker.c:4026
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
-msgstr "elaborazione dei dati remoti per l'origine della replica \"%s\" durante il tipo di messaggio \"%s\" per la relazione di destinazione della replica \"%s.%s\" colonna \"%s\" nella transazione %u, terminata alle %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "elaborazione dei dati remoti per l'origine della replica \"%s\" durante il tipo di messaggio \"%s\" per la relazione di destinazione della replica \"%s.%s\" colonna \"%s\" nella transazione %u, terminata alle %X/%08X"
 
 #: replication/pgoutput/pgoutput.c:319
 #, c-format
@@ -19923,8 +19923,8 @@ msgstr "terminazione del processo %d per rilasciare lo slot di replica \"%s\""
 
 #: replication/slot.c:1333
 #, c-format
-msgid "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds max_slot_wal_keep_size"
-msgstr "invalidando lo slot \"%s\" perché il suo restart_lsn %X/%X supera max_slot_wal_keep_size"
+msgid "invalidating slot \"%s\" because its restart_lsn %X/%08X exceeds max_slot_wal_keep_size"
+msgstr "invalidando lo slot \"%s\" perché il suo restart_lsn %X/%08X supera max_slot_wal_keep_size"
 
 #: replication/slot.c:1785
 #, c-format
@@ -19983,8 +19983,8 @@ msgstr "lo slot di replica \"%s\" non può essere avanzato"
 
 #: replication/slotfuncs.c:632
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "non è possibile avanzare lo slot di replica a %X/%X, il minimo è %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "non è possibile avanzare lo slot di replica a %X/%08X, il minimo è %X/%08X"
 
 #: replication/slotfuncs.c:739
 #, c-format
@@ -20083,13 +20083,13 @@ msgstr "la timeline massima %u del primario è dietro la timeline di recupero %u
 
 #: replication/walreceiver.c:404
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "streaming WAL avviato dal primario a %X/%X sulla timeline %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "streaming WAL avviato dal primario a %X/%08X sulla timeline %u"
 
 #: replication/walreceiver.c:408
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "streaming WAL riavviato sulla timeline %X/%X sulla timeline %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "streaming WAL riavviato sulla timeline %X/%08X sulla timeline %u"
 
 #: replication/walreceiver.c:437
 #, c-format
@@ -20103,8 +20103,8 @@ msgstr "replica terminata dal server primario"
 
 #: replication/walreceiver.c:476
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "Fine del WAL raggiunta sulla timeline %u a %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "Fine del WAL raggiunta sulla timeline %u a %X/%08X."
 
 #: replication/walreceiver.c:565
 #, c-format
@@ -20153,18 +20153,18 @@ msgstr "non si può usare una slot di replica logico per la replica fisica"
 
 #: replication/walsender.c:785
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "il punto di avvio richiesto %X/%X sulla timeline %u non è nella storia di questo server"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "il punto di avvio richiesto %X/%08X sulla timeline %u non è nella storia di questo server"
 
 #: replication/walsender.c:788
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "La storia di questo server si è separata dalla timeline %u a %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "La storia di questo server si è separata dalla timeline %u a %X/%08X."
 
 #: replication/walsender.c:832
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "il punto di avvio richiesto %X/%X è più avanti della posizione di flush del WAL %X/%X di questo server"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "il punto di avvio richiesto %X/%08X è più avanti della posizione di flush del WAL %X/%08X di questo server"
 
 #: replication/walsender.c:1015
 #, c-format
diff --git a/src/backend/po/ja.po b/src/backend/po/ja.po
index 5309f0ca14d..8610fc96116 100644
--- a/src/backend/po/ja.po
+++ b/src/backend/po/ja.po
@@ -2012,18 +2012,18 @@ msgstr "WALリーダの割り当てに中に失敗しました。"
 
 #: access/transam/twophase.c:1429
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "WALの%X/%Xから2相状態を読み取れませんでした: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "WALの%X/%08Xから2相状態を読み取れませんでした: %s"
 
 #: access/transam/twophase.c:1434
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "WALの%X/%Xから2相状態を読み取れませんでした"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "WALの%X/%08Xから2相状態を読み取れませんでした"
 
 #: access/transam/twophase.c:1442
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "WALの%X/%Xにあるはずの2相状態のデータがありません"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "WALの%X/%08Xにあるはずの2相状態のデータがありません"
 
 #: access/transam/twophase.c:1744
 #, c-format
@@ -2078,8 +2078,8 @@ msgstr "トランザクション%uの2相状態ファイルを復元できませ
 
 #: access/transam/twophase.c:2515
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
-msgstr "2相状態ファイルがWALレコード%X/%Xで見つかりましたが、このトランザクションはすでにディスクから復元済みです。"
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
+msgstr "2相状態ファイルがWALレコード%X/%08Xで見つかりましたが、このトランザクションはすでにディスクから復元済みです。"
 
 #: access/transam/twophase.c:2523 storage/file/fd.c:514 utils/fmgr/dfmgr.c:199
 #, c-format
@@ -2235,13 +2235,13 @@ msgstr "1トランザクション内には 2^32-1 個より多くのサブトラ
 
 #: access/transam/xlog.c:1552
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "生成されたWALより先の位置までのフラッシュ要求; 要求 %X/%X, 現在位置 %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "生成されたWALより先の位置までのフラッシュ要求; 要求 %X/%08X, 現在位置 %X/%08X"
 
 #: access/transam/xlog.c:1779
 #, c-format
-msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X"
-msgstr "生成されたWALより先の位置までの読み込み要求; 要求 %X/%X, 現在位置 %X/%X"
+msgid "cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X"
+msgstr "生成されたWALより先の位置までの読み込み要求; 要求 %X/%08X, 現在位置 %X/%08X"
 
 #: access/transam/xlog.c:2342 access/transam/xlog.c:4690
 #, c-format
@@ -2490,13 +2490,13 @@ msgstr "チェックポイント開始:%s%s%s%s%s%s%s%s"
 
 #: access/transam/xlog.c:6919
 #, c-format
-msgid "restartpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "リスタートポイント完了: %d個のバッファを出力 (%.1f%%), %d個のSLRUバッファを出力; %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%X, 再生lsn=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "リスタートポイント完了: %d個のバッファを出力 (%.1f%%), %d個のSLRUバッファを出力; %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%08X, 再生lsn=%X/%08X"
 
 #: access/transam/xlog.c:6943
 #, c-format
-msgid "checkpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "チェックポイント完了: %d個のバッファを出力 (%.1f%%), %d個のSLRUバッファを出力; %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%X, 再生lsn=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "チェックポイント完了: %d個のバッファを出力 (%.1f%%), %d個のSLRUバッファを出力; %d個のWALファイルを追加、%d個を削除、%d個を再利用; 書き出し=%ld.%03d秒, 同期=%ld.%03d秒, 全体=%ld.%03d秒; 同期したファイル=%d, 最長=%ld.%03d秒, 平均=%ld.%03d秒; 距離=%d kB, 予測=%d kB; lsn=%X/%08X, 再生lsn=%X/%08X"
 
 #: access/transam/xlog.c:7429
 #, c-format
@@ -2505,8 +2505,8 @@ msgstr "データベースのシャットダウンに並行して、先行書き
 
 #: access/transam/xlog.c:8016
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "リカバリ再開ポイントは%X/%Xです"
+msgid "recovery restart point at %X/%08X"
+msgstr "リカバリ再開ポイントは%X/%08Xです"
 
 #: access/transam/xlog.c:8018
 #, c-format
@@ -2515,8 +2515,8 @@ msgstr "最後に完了したトランザクションはログ時刻 %s のも
 
 #: access/transam/xlog.c:8280
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "復帰ポイント\"%s\"が%X/%Xに作成されました"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "復帰ポイント\"%s\"が%X/%08Xに作成されました"
 
 #: access/transam/xlog.c:8487
 #, c-format
@@ -2764,52 +2764,52 @@ msgstr "\"recovery_prefetch\"は先読み指示の発行をサポートしない
 
 #: access/transam/xlogreader.c:620
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "%X/%Xのレコードオフセットが不正です:最低でも%uを期待していましたが、実際は%uでした"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "%X/%08Xのレコードオフセットが不正です:最低でも%uを期待していましたが、実際は%uでした"
 
 #: access/transam/xlogreader.c:629
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%Xでは継続レコードが必要です"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08Xでは継続レコードが必要です"
 
 #: access/transam/xlogreader.c:670 access/transam/xlogreader.c:1135
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "%X/%Xのレコード長が不正です:長さは最低でも%uを期待していましたが、実際は%uでした"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "%X/%08Xのレコード長が不正です:長さは最低でも%uを期待していましたが、実際は%uでした"
 
 #: access/transam/xlogreader.c:759
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%Xでcontrecordフラグがありません"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08Xでcontrecordフラグがありません"
 
 #: access/transam/xlogreader.c:772
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
 msgstr "%3$X/%4$Xの継続レコードの長さ%1$u(正しくは%2$lld)は不正です"
 
 #: access/transam/xlogreader.c:1143
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "%2$X/%3$XのリソースマネージャID %1$uは不正です"
 
 #: access/transam/xlogreader.c:1156 access/transam/xlogreader.c:1172
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
 msgstr "%3$X/%4$Xのレコードの後方リンク%1$X/%2$Xが不正です"
 
 #: access/transam/xlogreader.c:1210
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "%X/%Xのレコード内のリソースマネージャデータのチェックサムが不正です"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "%X/%08Xのレコード内のリソースマネージャデータのチェックサムが不正です"
 
 #: access/transam/xlogreader.c:1244
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%2$s、LSN %3$X/%4$X、オフセット%5$uで不正なマジックナンバー%1$04X"
 
 #: access/transam/xlogreader.c:1259 access/transam/xlogreader.c:1301
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント %2$s、LSN %3$X/%4$X、オフセット%5$uで不正な情報ビット列%1$04X"
 
 #: access/transam/xlogreader.c:1275
@@ -2829,63 +2829,63 @@ msgstr "WAL ファイルは異なるデータベースシステム由来のも
 
 #: access/transam/xlogreader.c:1321
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで想定外のページアドレス%1$X/%2$X"
 
 #: access/transam/xlogreader.c:1347
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで異常な順序のタイムラインID %1$u(%2$uの後)"
 
 #: access/transam/xlogreader.c:1759
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %uが%X/%Xで不正です"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %uが%X/%08Xで不正です"
 
 #: access/transam/xlogreader.c:1783
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%Xにデータがありません"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%08Xにデータがありません"
 
 #: access/transam/xlogreader.c:1790
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "BKPBLOCK_HAS_DATAが設定されていませんが、%2$X/%3$Xのデータ長は%1$uです"
 
 #: access/transam/xlogreader.c:1826
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEが設定されていますが、%4$X/%5$Xでホールオフセット%1$u、長さ%2$u、ブロックイメージ長%3$uです"
 
 #: access/transam/xlogreader.c:1842
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEが設定されていませんが、%3$X/%4$Xにおけるホールオフセット%1$uの長さが%2$uです"
 
 #: access/transam/xlogreader.c:1856
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr "BKPIMAGE_COMPRESSEDが設定されていますが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです"
 
 #: access/transam/xlogreader.c:1871
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEもBKPIMAGE_COMPRESSEDも設定されていませんが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです"
 
 #: access/transam/xlogreader.c:1887
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%Xにおいて以前のリレーションがありません"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%08Xにおいて以前のリレーションがありません"
 
 #: access/transam/xlogreader.c:1899
 #, c-format
-msgid "invalid block_id %u at %X/%X"
+msgid "invalid block_id %u at %X/%08X"
 msgstr "%2$X/%3$Xにおけるblock_id %1$uが不正です"
 
 #: access/transam/xlogreader.c:1966
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "%X/%Xのレコードのサイズが不正です"
+msgid "record with invalid length at %X/%08X"
+msgstr "%X/%08Xのレコードのサイズが不正です"
 
 #: access/transam/xlogreader.c:1992
 #, c-format
@@ -2894,37 +2894,37 @@ msgstr "WALレコード中ID %dのバックアップブロックを特定でき
 
 #: access/transam/xlogreader.c:2076
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "%X/%Xで不正なブロック%dが指定されているためイメージが復元できませんでした"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "%X/%08Xで不正なブロック%dが指定されているためイメージが復元できませんでした"
 
 #: access/transam/xlogreader.c:2083
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "%X/%Xでブロック%dのイメージが不正な状態であるため復元できませんでした"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "%X/%08Xでブロック%dのイメージが不正な状態であるため復元できませんでした"
 
 #: access/transam/xlogreader.c:2110 access/transam/xlogreader.c:2127
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "%1$X/%2$Xで、ブロック%4$dがこのビルドでサポートされない圧縮方式%3$sで圧縮されているため復元できませんでした"
 
 #: access/transam/xlogreader.c:2136
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "%X/%Xでブロック%dのイメージが不明な方式で圧縮されているため復元できませんでした"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "%X/%08Xでブロック%dのイメージが不明な方式で圧縮されているため復元できませんでした"
 
 #: access/transam/xlogreader.c:2144
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "%X/%Xのブロック%dが伸張できませんでした"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "%X/%08Xのブロック%dが伸張できませんでした"
 
 #: access/transam/xlogrecovery.c:623
 #, c-format
-msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u"
+msgid "starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u"
 msgstr "タイムラインID %5$u上でREDO LSN %1$X/%2$X、チェックポイントLSN %3$X/%4$Xからのバックアップ・リカバリを開始しました"
 
 #: access/transam/xlogrecovery.c:655
 #, c-format
-msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X"
+msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
 msgstr "%3$X/%4$Xのチェックポイントレコードが参照しているredo位置%1$X/%2$Xを見つけられませんでした"
 
 #: access/transam/xlogrecovery.c:657 access/transam/xlogrecovery.c:668
@@ -2941,8 +2941,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:666
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "必須のチェックポイントが%X/%Xで見つかりませんでした"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "必須のチェックポイントが%X/%08Xで見つかりませんでした"
 
 #: access/transam/xlogrecovery.c:696 commands/tablespace.c:664
 #, c-format
@@ -2966,13 +2966,13 @@ msgstr "ファイル\"%s\"の名前を\"%s\"に変更できませんでした: %
 
 #: access/transam/xlogrecovery.c:776
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "REDO LSN %X/%Xのバックアプリカバリを再開しました"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "REDO LSN %X/%08Xのバックアプリカバリを再開しました"
 
 #: access/transam/xlogrecovery.c:801
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "%X/%Xには有効なチェックポイントレコードがありませんでした"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "%X/%08Xには有効なチェックポイントレコードがありませんでした"
 
 #: access/transam/xlogrecovery.c:812
 #, c-format
@@ -2996,8 +2996,8 @@ msgstr "\"%s\"までのポイントインタイムリカバリを開始します
 
 #: access/transam/xlogrecovery.c:827
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "WAL位置(LSN) \"%X/%X\"までのポイントインタイムリカバリを開始します"
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "WAL位置(LSN) \"%X/%08X\"までのポイントインタイムリカバリを開始します"
 
 #: access/transam/xlogrecovery.c:831
 #, c-format
@@ -3017,12 +3017,12 @@ msgstr "要求されたタイムライン%uはこのサーバーの履歴から
 #. translator: %s is a backup_label file or a pg_control file
 #: access/transam/xlogrecovery.c:858
 #, c-format
-msgid "Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
+msgid "Latest checkpoint in file \"%s\" is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
 msgstr "ファイル\"%1$s\"での最終チェックポイントはタイムライン%4$uの%2$X/%3$Xですが、要求されたタイムラインの履歴上、サーバーはそのタイムラインから%5$X/%6$Xで分岐しています。"
 
 #: access/transam/xlogrecovery.c:873
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
 msgstr "要求されたタイムライン%1$uはタイムライン%4$uの最小リカバリポイント%2$X/%3$Xを含みません"
 
 #: access/transam/xlogrecovery.c:901
@@ -3112,18 +3112,18 @@ msgstr "有効なデータディレクトリを再構築するにはpg_combineba
 
 #: access/transam/xlogrecovery.c:1725
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "REDOポイント%X/%Xで想定外のレコードタイプが見つかりました"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "REDOポイント%X/%08Xで想定外のレコードタイプが見つかりました"
 
 #: access/transam/xlogrecovery.c:1748
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "REDOを%X/%Xから開始します"
+msgid "redo starts at %X/%08X"
+msgstr "REDOを%X/%08Xから開始します"
 
 #: access/transam/xlogrecovery.c:1761
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "REDO進行中、経過時間 %ld.%02d秒, 現在のLSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "REDO進行中、経過時間 %ld.%02d秒, 現在のLSN: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1851
 #, c-format
@@ -3132,8 +3132,8 @@ msgstr "要求されたリカバリ停止ポイントは、一貫性があるリ
 
 #: access/transam/xlogrecovery.c:1883
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "REDOが%X/%Xで終了しました、システム使用状況: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "REDOが%X/%08Xで終了しました、システム使用状況: %s"
 
 #: access/transam/xlogrecovery.c:1889
 #, c-format
@@ -3152,8 +3152,8 @@ msgstr "指定したリカバリターゲットに到達する前にリカバリ
 
 #: access/transam/xlogrecovery.c:2104
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "%X/%Xで%sに上書きされて失われた継続行を正常にスキップしました"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "%X/%08Xで%sに上書きされて失われた継続行を正常にスキップしました"
 
 #: access/transam/xlogrecovery.c:2171
 #, c-format
@@ -3172,19 +3172,19 @@ msgstr "これらのディレクトリを削除するか、または\"allow_in_p
 
 #: access/transam/xlogrecovery.c:2227
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
-msgstr "REDO LSN%X/%X、終了LSN %X/%Xのバックアップ・リカバリが完了しました"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
+msgstr "REDO LSN%X/%08X、終了LSN %X/%08Xのバックアップ・リカバリが完了しました"
 
 #: access/transam/xlogrecovery.c:2258
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "%X/%X でリカバリの一貫性が確保されました"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "%X/%08X でリカバリの一貫性が確保されました"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2296
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "%X/%Xにある%sのWAL再生"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "%X/%08Xにある%sのWAL再生"
 
 #: access/transam/xlogrecovery.c:2394
 #, c-format
@@ -3198,7 +3198,7 @@ msgstr "チェックポイントレコードにおいて想定外のタイムラ
 
 #: access/transam/xlogrecovery.c:2419
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
 msgstr "タイムライン%4$uの最小リカバリポイント%2$X/%3$Xに達する前のチェックポイントレコード内の想定外のタイムラインID%1$u。"
 
 #: access/transam/xlogrecovery.c:2603 access/transam/xlogrecovery.c:2879
@@ -3208,8 +3208,8 @@ msgstr "リカバリ処理は一貫性確保後に停止します"
 
 #: access/transam/xlogrecovery.c:2624
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の前で停止します"
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "リカバリ処理はWAL位置(LSN)\"%X/%08X\"の前で停止します"
 
 #: access/transam/xlogrecovery.c:2714
 #, c-format
@@ -3228,8 +3228,8 @@ msgstr "リカバリ処理は復元ポイント\"%s\"、時刻%s に停止しま
 
 #: access/transam/xlogrecovery.c:2792
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "リカバリ処理はWAL位置(LSN)\"%X/%X\"の後で停止します"
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "リカバリ処理はWAL位置(LSN)\"%X/%08X\"の後で停止します"
 
 #: access/transam/xlogrecovery.c:2859
 #, c-format
@@ -3263,17 +3263,17 @@ msgstr "再開するには pg_xlog_replay_resume() を実行してください"
 
 #: access/transam/xlogrecovery.c:3216
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%2$s、LSN %3$X/%4$X、オフセット%5$uで想定外のタイムラインID%1$u"
 
 #: access/transam/xlogrecovery.c:3432
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "WALセグメント%s、LSN %X/%X、オフセット%uを読み取れませんでした: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "WALセグメント%s、LSN %X/%08X、オフセット%uを読み取れませんでした: %m"
 
 #: access/transam/xlogrecovery.c:3439
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
 msgstr "WALセグメント%1$s、LSN %2$X/%3$X、オフセット%4$uを読み取れませんでした: %6$zu 中 %5$d の読み込み"
 
 #: access/transam/xlogrecovery.c:4082
@@ -3308,8 +3308,8 @@ msgstr "新しいタイムライン%uはデータベースシステムのタイ
 
 #: access/transam/xlogrecovery.c:4180
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "新しいタイムライン%uは現在のデータベースシステムのタイムライン%uから現在のリカバリポイント%X/%Xより前に分岐しています"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "新しいタイムライン%uは現在のデータベースシステムのタイムライン%uから現在のリカバリポイント%X/%08Xより前に分岐しています"
 
 #: access/transam/xlogrecovery.c:4199
 #, c-format
@@ -3610,17 +3610,17 @@ msgstr "タイムライン%uがマニフェストにありましたが、サー
 
 #: backup/basebackup_incremental.c:412
 #, c-format
-msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X"
+msgid "manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
 msgstr "マニフェストが%2$X/%3$Xから始まる初期タイムライン%1$uのWALを必要としてますが、このタイムラインは%4$X/%5$Xから始まっています"
 
 #: backup/basebackup_incremental.c:422
 #, c-format
-msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X"
+msgid "manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
 msgstr "マニフェストが%2$X/%3$Xから始まる継続タイムライン%1$uのWALをを必要としてますが、このタイムラインは%4$X/%5$Xから始まっています"
 
 #: backup/basebackup_incremental.c:433
 #, c-format
-msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X"
+msgid "manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X"
 msgstr "マニフェストは%2$X/%3$Xで終了する最終タイムライン%1$uからのWALを必要としますが、このバックアップは%4$X/%5$Xで開始されます"
 
 #: backup/basebackup_incremental.c:437
@@ -3630,23 +3630,23 @@ msgstr "これはスタンバイ上の差分バックアップで前回のバッ
 
 #: backup/basebackup_incremental.c:444
 #, c-format
-msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X"
+msgid "manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X"
 msgstr "マニフェストが%2$X/%3$Xで終了する非最終タイムライン%1$uのWALをを必要としてますが、このサーバーではタイムラインが%4$X/%5$Xで切り替わっています"
 
 #: backup/basebackup_incremental.c:525
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist"
-msgstr "WAL集計がタイムライン%u上の%X/%Xから%X/%Xまで必要ですが、そのタイムライン上のそのLSN範囲での集計は存在しません"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist"
+msgstr "WAL集計がタイムライン%u上の%X/%08Xから%X/%08Xまで必要ですが、そのタイムライン上のそのLSN範囲での集計は存在しません"
 
 #: backup/basebackup_incremental.c:532
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete"
-msgstr "WAL集計がタイムライン%u上の%X/%Xから%X/%Xまで必要ですが、そのタイムライン上のそのLSN範囲での集計は不完全です"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete"
+msgstr "WAL集計がタイムライン%u上の%X/%08Xから%X/%08Xまで必要ですが、そのタイムライン上のそのLSN範囲での集計は不完全です"
 
 #: backup/basebackup_incremental.c:536
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
-msgstr "この範囲で集計されていない最初のLSNは%X/%Xです。"
+msgid "The first unsummarized LSN in this range is %X/%08X."
+msgstr "この範囲で集計されていない最初のLSNは%X/%08Xです。"
 
 #: backup/basebackup_incremental.c:934
 #, c-format
@@ -10050,8 +10050,8 @@ msgstr "ALTER SUBSCRIPTION ... REFRESH を copy_data = false を指定して実
 
 #: commands/subscriptioncmds.c:1542
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
-msgstr "WAL読み飛ばし位置(LSN %X/%X)は基点LSN %X/%Xより大きくなければなりません"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
+msgstr "WAL読み飛ばし位置(LSN %X/%08X)は基点LSN %X/%08Xより大きくなければなりません"
 
 #: commands/subscriptioncmds.c:1667
 #, c-format
@@ -20438,34 +20438,34 @@ msgstr "WAL集計が進んでいません"
 
 #: postmaster/walsummarizer.c:744
 #, c-format
-msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory."
-msgstr "集計は%X/%Xまで進んでいる必要がありますが、ディスク上では%X/%X、メモリ上では%X/%Xよりあとまで進んでいません。"
+msgid "Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory."
+msgstr "集計は%X/%08Xまで進んでいる必要がありますが、ディスク上では%X/%08X、メモリ上では%X/%08Xよりあとまで進んでいません。"
 
 #: postmaster/walsummarizer.c:758
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld second"
-msgid_plural "still waiting for WAL summarization through %X/%X after %ld seconds"
+msgid "still waiting for WAL summarization through %X/%08X after %ld second"
+msgid_plural "still waiting for WAL summarization through %X/%08X after %ld seconds"
 msgstr[0] "%3$ld秒経過しましたが、WAL集計が%1$X/%2$Xに到達するのをまだ待ってます"
 
 #: postmaster/walsummarizer.c:763
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
-msgstr "集計がディスク上で%X/%X、メモリ上で%X/%Xに到達しました。"
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
+msgstr "集計がディスク上で%X/%08X、メモリ上で%X/%08Xに到達しました。"
 
 #: postmaster/walsummarizer.c:1007
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%Xの後に有効なレコードが見つかりませんでした"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08Xの後に有効なレコードが見つかりませんでした"
 
 #: postmaster/walsummarizer.c:1052
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "%X/%Xでタイムライン%uのWALを読み取れませんでした: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "%X/%08Xでタイムライン%uのWALを読み取れませんでした: %s"
 
 #: postmaster/walsummarizer.c:1058
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "%X/%Xでタイムライン%uのWALを読み取れませんでした"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "%X/%08Xでタイムライン%uのWALを読み取れませんでした"
 
 #: regex/regc_pg_locale.c:244
 #, c-format
@@ -20844,13 +20844,13 @@ msgstr "スロット\"%s\"の論理デコードを開始します"
 
 #: replication/logical/logical.c:611
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
 msgstr "%3$X/%4$XからWALを読み取って、%1$X/%2$X以降にコミットされるトランザクションをストリーミングします。"
 
 #: replication/logical/logical.c:759
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "スロット\"%s\", 出力プラグイン\"%s\", %sコールバックの処理中, 関連LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "スロット\"%s\", 出力プラグイン\"%s\", %sコールバックの処理中, 関連LSN %X/%08X"
 
 #: replication/logical/logical.c:765
 #, c-format
@@ -20944,8 +20944,8 @@ msgstr "使用可能なレプリケーション状態領域がありません、
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "ノード%dのレプリケーション状態を%X/%Xに復元します"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "ノード%dのレプリケーション状態を%X/%08Xに復元します"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -21050,8 +21050,8 @@ msgstr "リモートのスロットがローカルのスロットよりも進ん
 
 #: replication/logical/slotsync.c:216
 #, c-format
-msgid "The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u."
-msgstr "リモートスロットのLSNは%X/%Xでカタログxminは%uですが, ローカルスロットのLSNは%X/%Xでカタログxminは%uです。"
+msgid "The remote slot has LSN %X/%08X and catalog xmin %u, but the local slot has LSN %X/%08X and catalog xmin %u."
+msgstr "リモートスロットのLSNは%X/%08Xでカタログxminは%uですが, ローカルスロットのLSNは%X/%08Xでカタログxminは%uです。"
 
 #: replication/logical/slotsync.c:460
 #, c-format
@@ -21065,8 +21065,8 @@ msgstr "レプリケーションスロット\"%s\"を同期できませんでし
 
 #: replication/logical/slotsync.c:581
 #, c-format
-msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X."
-msgstr "論理デコードが一貫性ポイントをローカルスロットのLSN%X/%Xから見つけられませんでした。"
+msgid "Logical decoding could not find consistent point from local slot's LSN %X/%08X."
+msgstr "論理デコードが一貫性ポイントをローカルスロットのLSN%X/%08Xから見つけられませんでした。"
 
 #: replication/logical/slotsync.c:590
 #, c-format
@@ -21075,7 +21075,7 @@ msgstr "新規に作成したレプリケーションスロット\"%s\"が同期
 
 #: replication/logical/slotsync.c:629
 #, c-format
-msgid "skipping slot synchronization because the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X"
+msgid "skipping slot synchronization because the received slot sync LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X"
 msgstr "受信したスロット\"%3$s\"のスロット同期LSN%1$X/%2$XがスタンバイのLSN%4$X/%5$Xよりも進んでいるためスロット同期をスキップします"
 
 #: replication/logical/slotsync.c:651
@@ -21183,8 +21183,8 @@ msgstr[0] "エクスポートされた論理デコードスナップショット
 
 #: replication/logical/snapbuild.c:1265 replication/logical/snapbuild.c:1362 replication/logical/snapbuild.c:1868
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "論理デコードは一貫性ポイントを%X/%Xで発見しました"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "論理デコードは一貫性ポイントを%X/%08Xで発見しました"
 
 #: replication/logical/snapbuild.c:1267
 #, c-format
@@ -21193,8 +21193,8 @@ msgstr "実行中のトランザクションはありません。"
 
 #: replication/logical/snapbuild.c:1314
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "論理デコードは初期開始点を%X/%Xで発見しました"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "論理デコードは初期開始点を%X/%08Xで発見しました"
 
 #: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340
 #, c-format
@@ -21203,8 +21203,8 @@ msgstr "%2$uより古いトランザクション(おおよそ%1$d個)の完了
 
 #: replication/logical/snapbuild.c:1338
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "論理デコードは初期の一貫性ポイントを%X/%Xで発見しました"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "論理デコードは初期の一貫性ポイントを%X/%08Xで発見しました"
 
 #: replication/logical/snapbuild.c:1364
 #, c-format
@@ -21403,13 +21403,13 @@ msgstr "サブスクリプション\"%s\"はエラーのため無効化されま
 
 #: replication/logical/worker.c:4893
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "論理レプリケーションは%X/%Xででトランザクションのスキップを開始します"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "論理レプリケーションは%X/%08Xででトランザクションのスキップを開始します"
 
 #: replication/logical/worker.c:4907
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "論理レプリケーションは%X/%Xでトランザクションのスキップを完了しました"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "論理レプリケーションは%X/%08Xでトランザクションのスキップを完了しました"
 
 #: replication/logical/worker.c:4989
 #, c-format
@@ -21418,8 +21418,8 @@ msgstr "サブスクリプションの\"%s\"スキップLSNをクリアしまし
 
 #: replication/logical/worker.c:4990
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
-msgstr "リモートトランザクションの完了WAL位置(LSN) %X/%XがスキップLSN %X/%X と一致しません。"
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
+msgstr "リモートトランザクションの完了WAL位置(LSN) %X/%08XがスキップLSN %X/%08X と一致しません。"
 
 #: replication/logical/worker.c:5027
 #, c-format
@@ -21433,7 +21433,7 @@ msgstr "トランザクション%3$u中、メッセージタイプ\"%2$s\"でレ
 
 #: replication/logical/worker.c:5036
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
 msgstr "%4$X/%5$Xで終了したトランザクション%3$u中、メッセージタイプ\"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中"
 
 #: replication/logical/worker.c:5047
@@ -21443,7 +21443,7 @@ msgstr "レプリケーション起点\"%1$s\"のリモートデータ処理中
 
 #: replication/logical/worker.c:5054
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
 msgstr "%6$X/%7$Xで終了したトランザクション%5$u中、レプリケーション先リレーション\"%3$s.%4$s\"に対するメッセージタイプ\"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中"
 
 #: replication/logical/worker.c:5065
@@ -21453,7 +21453,7 @@ msgstr "レプリケーション起点\"%1$s\"のリモートデータ処理中
 
 #: replication/logical/worker.c:5073
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
 msgstr "%7$X/%8$Xで終了したトランザクション%6$u中、レプリケーション先リレーション\"%3$s.%4$s\"、列\"%5$s\"に対するメッセージタイプ\"%2$s\"でレプリケーション基点\"%1$s\"のリモートからのデータを処理中"
 
 #: replication/pgoutput/pgoutput.c:328
@@ -21663,9 +21663,9 @@ msgstr "%s属性を持つロールのみがレプリケーションスロット
 
 #: replication/slot.c:1550
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %<PRIu64> byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %<PRIu64> bytes."
-msgstr[0] "このスロットのrestart_lsn %X/%Xは制限を%<PRIu64>バイト超過しています。"
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %<PRIu64> byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %<PRIu64> bytes."
+msgstr[0] "このスロットのrestart_lsn %X/%08Xは制限を%<PRIu64>バイト超過しています。"
 
 #: replication/slot.c:1561
 #, c-format
@@ -21834,8 +21834,8 @@ msgstr "このスロットはWALを留保したことがないか、無効化さ
 
 #: replication/slotfuncs.c:569
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "レプリケーションスロットを %X/%X に進めることはできません、最小値は %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "レプリケーションスロットを %X/%08X に進めることはできません、最小値は %X/%08X"
 
 #: replication/slotfuncs.c:676
 #, c-format
@@ -21950,12 +21950,12 @@ msgstr "プライマリの最大のタイムライン%uが、リカバリのタ
 
 #: replication/walreceiver.c:389
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
 msgstr "プライマリのタイムライン%3$uの %1$X/%2$XからでWALストリーミングを始めます"
 
 #: replication/walreceiver.c:393
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
 msgstr "タイムライン%3$uの %1$X/%2$XからでWALストリーミングを再開します"
 
 #: replication/walreceiver.c:428
@@ -21970,8 +21970,8 @@ msgstr "プライマリサーバーによりレプリケーションが打ち切
 
 #: replication/walreceiver.c:473
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "タイムライン%uの%X/%XでWALの最後に達しました"
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "タイムライン%uの%X/%08XでWALの最後に達しました"
 
 #: replication/walreceiver.c:573
 #, c-format
@@ -22020,18 +22020,18 @@ msgstr "論理レプリケーションスロットは物理レプリケーショ
 
 #: replication/walsender.c:895
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
 msgstr "タイムライン%3$u上の要求された開始ポイント%1$X/%2$Xはサーバーの履歴にありません"
 
 #: replication/walsender.c:898
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "サーバーの履歴はタイムライン%uの%X/%Xからフォークしました。"
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "サーバーの履歴はタイムライン%uの%X/%08Xからフォークしました。"
 
 #: replication/walsender.c:942
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "要求された開始ポイント%X/%XはサーバーのWALフラッシュ位置%X/%Xより進んでいます"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "要求された開始ポイント%X/%08XはサーバーのWALフラッシュ位置%X/%08Xより進んでいます"
 
 #: replication/walsender.c:1137
 #, c-format
diff --git a/src/backend/po/ka.po b/src/backend/po/ka.po
index 23730e71818..652c7bc50b2 100644
--- a/src/backend/po/ka.po
+++ b/src/backend/po/ka.po
@@ -2008,18 +2008,18 @@ msgstr "შეცდომა WAL კითხვის პროცესორ
 
 #: access/transam/twophase.c:1429
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "\"WAL\"-დან 2ფაზიანი მდგომარეობის წაკითხვის შეცდომა მისამართზე %X/%X: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "\"WAL\"-დან 2ფაზიანი მდგომარეობის წაკითხვის შეცდომა მისამართზე %X/%08X: %s"
 
 #: access/transam/twophase.c:1434
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "\"WAL\"-დან 2ფაზიანი მდგომარეობის წაკითხვის შეცდომა მისამართზე %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "\"WAL\"-დან 2ფაზიანი მდგომარეობის წაკითხვის შეცდომა მისამართზე %X/%08X"
 
 #: access/transam/twophase.c:1442
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "\"WAL\"-ში მოსალოდნელი ორფაზიანი მდგომარეობის მონაცემები მისამართზე %X/%X არ არსებობს"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "\"WAL\"-ში მოსალოდნელი ორფაზიანი მდგომარეობის მონაცემები მისამართზე %X/%08X არ არსებობს"
 
 #: access/transam/twophase.c:1744
 #, c-format
@@ -2075,7 +2075,7 @@ msgstr "ორფაზიანი მდგომარეობის ფა
 
 #: access/transam/twophase.c:2515
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
 msgstr ""
 
 #: access/transam/twophase.c:2523 storage/file/fd.c:514 utils/fmgr/dfmgr.c:199
@@ -2232,12 +2232,12 @@ msgstr "ტრანზაქციაში 2^32-1 ქვეტრანზა
 
 #: access/transam/xlog.c:1552
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
 msgstr ""
 
 #: access/transam/xlog.c:1779
 #, c-format
-msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X"
+msgid "cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X"
 msgstr ""
 
 #: access/transam/xlog.c:2342 access/transam/xlog.c:4690
@@ -2488,12 +2488,12 @@ msgstr "საკონტროლო წერტილი იწყება:
 
 #: access/transam/xlog.c:6919
 #, c-format
-msgid "restartpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 
 #: access/transam/xlog.c:6943
 #, c-format
-msgid "checkpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%), wrote %d SLRU buffers; %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 
 #: access/transam/xlog.c:7429
@@ -2503,8 +2503,8 @@ msgstr "კონკურენტული წინასწარ-ჩაწ
 
 #: access/transam/xlog.c:8016
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "აღდგენის გადატვირთვის წერტილი: %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "აღდგენის გადატვირთვის წერტილი: %X/%08X"
 
 #: access/transam/xlog.c:8018
 #, c-format
@@ -2513,8 +2513,8 @@ msgstr "უკანასკნელად დასრულებული 
 
 #: access/transam/xlog.c:8280
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "აღდგენის წერტილი \"%s\" შექმნილია %X/%X -სთან"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "აღდგენის წერტილი \"%s\" შექმნილია %X/%08X -სთან"
 
 #: access/transam/xlog.c:8487
 #, c-format
@@ -2763,53 +2763,53 @@ msgstr "\"recovery_prefetch\" პლატფორმებზე, რომლ
 
 #: access/transam/xlogreader.c:620
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X: მოველოდი მინიმუმ %u, მივიღე %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%08X: მოველოდი მინიმუმ %u, მივიღე %u"
 
 #: access/transam/xlogreader.c:629
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord მოთხოვნილია %X/%X-ის მიერ"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord მოთხოვნილია %X/%08X-ის მიერ"
 
 #: access/transam/xlogreader.c:670 access/transam/xlogreader.c:1135
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ჩანაწერის არასწორი სიგრძე მისამართზე %X/%X: მოველოდი მინიმუმ %u, მივიღე %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ჩანაწერის არასწორი სიგრძე მისამართზე %X/%08X: მოველოდი მინიმუმ %u, მივიღე %u"
 
 #: access/transam/xlogreader.c:759
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "მისამართზე %X/%X contrecord ალამი არ არსებობს"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "მისამართზე %X/%08X contrecord ალამი არ არსებობს"
 
 #: access/transam/xlogreader.c:772
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "contrecord -ის არასწორი სიგრძე %u (მოველოდი %lld) მისამართზე %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "contrecord -ის არასწორი სიგრძე %u (მოველოდი %lld) მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1143
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "რესურსის მმართველის არასწორი ID %u მისამართზე %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "რესურსის მმართველის არასწორი ID %u მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1156 access/transam/xlogreader.c:1172
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "ჩანაწერი არასწორი წინა ბმულით %X/%X მისამართზე %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "ჩანაწერი არასწორი წინა ბმულით %X/%08X მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1210
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "რესურსის მმართველის მონაცემების არასწორი საკონტროლო რიცხვი ჩანაწერში მისამართზე %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "რესურსის მმართველის მონაცემების არასწორი საკონტროლო რიცხვი ჩანაწერში მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1244
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "არასწორი მაგიური რიცხვი %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "არასწორი მაგიური რიცხვი %04X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: access/transam/xlogreader.c:1259 access/transam/xlogreader.c:1301
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "არასწორი საინფორმაციო ბიტები %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "არასწორი საინფორმაციო ბიტები %04X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: access/transam/xlogreader.c:1275
 #, c-format
@@ -2828,63 +2828,63 @@ msgstr "WAL ფაილი სხვა მონაცემთა ბაზ
 
 #: access/transam/xlogreader.c:1321
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "მოულოდნელი pageaddr %X/%X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "მოულოდნელი pageaddr %X/%08X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: access/transam/xlogreader.c:1347
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "მიმდევრობის-გარე დროის ხაზის ID %u (%u-ის შემდეგ) ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "მიმდევრობის-გარე დროის ხაზის ID %u (%u-ის შემდეგ) ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: access/transam/xlogreader.c:1759
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "ურიგო block_id %u მისამართზე %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "ურიგო block_id %u მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1783
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ მონაცემები მისამართზე %X/%X არ არსებობს"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ მონაცემები მისამართზე %X/%08X არ არსებობს"
 
 #: access/transam/xlogreader.c:1790
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ არსებობს მონაცემები სიგრძით %u მისამართზე %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ არსებობს მონაცემები სიგრძით %u მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1826
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE დაყენებულია, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u ბლოკის ასლის სიგრძე %u მისამართზე %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE დაყენებულია, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u ბლოკის ასლის სიგრძე %u მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1842
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE დაყენებული არაა, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u მისანართზე %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE დაყენებული არაა, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u მისანართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1856
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED დაყენებულია, მაგრამ ბლოკის ასლის სიგრძეა %u მისამართზე %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED დაყენებულია, მაგრამ ბლოკის ასლის სიგრძეა %u მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1871
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "არც BKPIMAGE_HAS_HOLE და არც BKPIMAGE_COMPRESSED დაყენებული არაა, მაგრამ ბლოკის ასლის სიგრძე %u-ა, მისამართზე %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "არც BKPIMAGE_HAS_HOLE და არც BKPIMAGE_COMPRESSED დაყენებული არაა, მაგრამ ბლოკის ასლის სიგრძე %u-ა, მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1887
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL დაყენებულია, მაგრამ წინა მნიშვნელობა მითითებული არაა მისამართზე %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL დაყენებულია, მაგრამ წინა მნიშვნელობა მითითებული არაა მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1899
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "არასწორი block_id %u %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "არასწორი block_id %u %X/%08X"
 
 #: access/transam/xlogreader.c:1966
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "ჩანაწერი არასწორი სიგრძით მისამართზე %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "ჩანაწერი არასწორი სიგრძით მისამართზე %X/%08X"
 
 #: access/transam/xlogreader.c:1992
 #, c-format
@@ -2893,38 +2893,38 @@ msgstr "შეცდომა WAL ჩანაწერში მარქაფ
 
 #: access/transam/xlogreader.c:2076
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X, როცა მითითებულია არასწორი ბლოკი %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%08X, როცა მითითებულია არასწორი ბლოკი %d"
 
 #: access/transam/xlogreader.c:2083
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "არასწორად შეკუმშული ასლი მისამართზე %X/%X, ბლოკი %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "არასწორად შეკუმშული ასლი მისამართზე %X/%08X, ბლოკი %d"
 
 #: access/transam/xlogreader.c:2110 access/transam/xlogreader.c:2127
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "%3$s მეთოდით შეკუმშული ასლი მისამართზე %1$X/%2$X, ბლოკი %4$d მხარდაუჭერელია ამ აგების მიერ"
 
 #: access/transam/xlogreader.c:2136
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "ასლის აღდგენის შეცდომა მისამართზე %X/%X შეკუმშული უცნობი მეთოდით, ბლოკი %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "ასლის აღდგენის შეცდომა მისამართზე %X/%08X შეკუმშული უცნობი მეთოდით, ბლოკი %d"
 
 #: access/transam/xlogreader.c:2144
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "არასწორად შეკუმშული ასლი მისამართზე %X/%X, ბლოკი %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "არასწორად შეკუმშული ასლი მისამართზე %X/%08X, ბლოკი %d"
 
 #: access/transam/xlogrecovery.c:623
 #, c-format
-msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u"
-msgstr "იწყება მარქაფის აღდგენა გამეორების LSN-ით %X/%X საკონტროლო წერტილზე %X/%X დროის ხაზზე ID-ით %u"
+msgid "starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u"
+msgstr "იწყება მარქაფის აღდგენა გამეორების LSN-ით %X/%08X საკონტროლო წერტილზე %X/%08X დროის ხაზზე ID-ით %u"
 
 #: access/transam/xlogrecovery.c:655
 #, c-format
-msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X"
-msgstr "ვერ ვიპოვე გამეორების მდებარეობა %X/%X, რომელსაც მიმართავს საკონტროლო წერტილის ჩანაწერი მისამართზე %X/%X"
+msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
+msgstr "ვერ ვიპოვე გამეორების მდებარეობა %X/%08X, რომელსაც მიმართავს საკონტროლო წერტილის ჩანაწერი მისამართზე %X/%08X"
 
 #: access/transam/xlogrecovery.c:657 access/transam/xlogrecovery.c:668
 #, c-format
@@ -2936,8 +2936,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:666
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "აუცილებელი საკონტროლო წერტილის მოძებნა შეუძლებელია მისამართზე %X/%X"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "აუცილებელი საკონტროლო წერტილის მოძებნა შეუძლებელია მისამართზე %X/%08X"
 
 #: access/transam/xlogrecovery.c:696 commands/tablespace.c:664
 #, c-format
@@ -2961,13 +2961,13 @@ msgstr "გადარქმევის შეცდომა %s - %s: %m."
 
 #: access/transam/xlogrecovery.c:776
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "მარქაფის აღდგენის თავიდან გაშვება გამეორების LSN-ით %X/%X"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "მარქაფის აღდგენის თავიდან გაშვება გამეორების LSN-ით %X/%08X"
 
 #: access/transam/xlogrecovery.c:801
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "სწორი საკონტროლო წერტილის ჩანაწერის მოძებნა შეუძლებელია მისამართზე %X/%X"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "სწორი საკონტროლო წერტილის ჩანაწერის მოძებნა შეუძლებელია მისამართზე %X/%08X"
 
 #: access/transam/xlogrecovery.c:812
 #, c-format
@@ -2991,7 +2991,7 @@ msgstr "დროში-მითითებული-წერტილით
 
 #: access/transam/xlogrecovery.c:827
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
 msgstr ""
 
 #: access/transam/xlogrecovery.c:831
@@ -3012,12 +3012,12 @@ msgstr "მოთხოვნილი დროის ხაზი %u სერ
 #. translator: %s is a backup_label file or a pg_control file
 #: access/transam/xlogrecovery.c:858
 #, c-format
-msgid "Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
+msgid "Latest checkpoint in file \"%s\" is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
 msgstr ""
 
 #: access/transam/xlogrecovery.c:873
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:901
@@ -3107,18 +3107,18 @@ msgstr "სწორი მონაცემების საქაღალ
 
 #: access/transam/xlogrecovery.c:1725
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "აღმოჩენილია მოულოდნელი ჩანაწერის ტიპი გამეორების წერტილზე %X/%X"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "აღმოჩენილია მოულოდნელი ჩანაწერის ტიპი გამეორების წერტილზე %X/%08X"
 
 #: access/transam/xlogrecovery.c:1748
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "გამეორება დაიწყება მისამართიდან %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "გამეორება დაიწყება მისამართიდან %X/%08X"
 
 #: access/transam/xlogrecovery.c:1761
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "მიმდინარეობს გამეორება. გასული დრო: %ld.%02d მიმდინარე LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "მიმდინარეობს გამეორება. გასული დრო: %ld.%02d მიმდინარე LSN: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1851
 #, c-format
@@ -3127,8 +3127,8 @@ msgstr "მოთხოვნილი აღდგენის წერტი
 
 #: access/transam/xlogrecovery.c:1883
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "გამეორება დასრულდა %X/%X -სთან. სისტემის დატვირთვა: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "გამეორება დასრულდა %X/%08X -სთან. სისტემის დატვირთვა: %s"
 
 #: access/transam/xlogrecovery.c:1889
 #, c-format
@@ -3147,7 +3147,7 @@ msgstr "აღდგენა მითითებული აღდგენ
 
 #: access/transam/xlogrecovery.c:2104
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:2171
@@ -3167,19 +3167,19 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2227
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:2258
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "თანმიმდევრული აღდგენის მდგომარეობა მიღწეულია მისამართზე %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "თანმიმდევრული აღდგენის მდგომარეობა მიღწეულია მისამართზე %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2296
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "WAL გამეორება %X/%X %s-სთვის"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "WAL გამეორება %X/%08X %s-სთვის"
 
 #: access/transam/xlogrecovery.c:2394
 #, c-format
@@ -3193,7 +3193,7 @@ msgstr "მოულოდნელი დროის ხაზის ID %u (%u
 
 #: access/transam/xlogrecovery.c:2419
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:2603 access/transam/xlogrecovery.c:2879
@@ -3203,8 +3203,8 @@ msgstr "აღდგენა შეთანხმებული მდგო
 
 #: access/transam/xlogrecovery.c:2624
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "აღდგენა შეწყდა WAL-ის მდებარეობამდე (LSN) \"%X/%X\""
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "აღდგენა შეწყდა WAL-ის მდებარეობამდე (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2714
 #, c-format
@@ -3223,8 +3223,8 @@ msgstr "აღდგენა შეწყდა აღდგენის წე
 
 #: access/transam/xlogrecovery.c:2792
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "აღდგენა შეწყდა WAL-ის მდებარეობამდე (LSN) \"%X/%X\""
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "აღდგენა შეწყდა WAL-ის მდებარეობამდე (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2859
 #, c-format
@@ -3258,18 +3258,18 @@ msgstr "გასაგრძელებლად გაუშვით pg_wal_
 
 #: access/transam/xlogrecovery.c:3216
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "მოულოდნელი დროის ხაზის ID %u WAL სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "მოულოდნელი დროის ხაზის ID %u WAL სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: access/transam/xlogrecovery.c:3432
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "ჟურნალის სეგმენტიდან (%s, LSN %X/%X, წანაცვლება %u) წაკითხვის შეცდომა: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "ჟურნალის სეგმენტიდან (%s, LSN %X/%08X, წანაცვლება %u) წაკითხვის შეცდომა: %m"
 
 #: access/transam/xlogrecovery.c:3439
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
-msgstr "ჟურნალის სეგმენტიდან (%s, LSN %X/%X, წანაცვლება %u) წაკითხვის შეცდომა: წავიკითხე %d %zu-დან"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
+msgstr "ჟურნალის სეგმენტიდან (%s, LSN %X/%08X, წანაცვლება %u) წაკითხვის შეცდომა: წავიკითხე %d %zu-დან"
 
 #: access/transam/xlogrecovery.c:4082
 #, c-format
@@ -3303,7 +3303,7 @@ msgstr "ახალი დროის ხაზი %u ბაზის სი
 
 #: access/transam/xlogrecovery.c:4180
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:4199
@@ -3607,18 +3607,18 @@ msgstr "დროის ხაზი %u ვიპოვე მანიფეს
 
 #: backup/basebackup_incremental.c:412
 #, c-format
-msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "მანიფესტი მოითხოვს WAL-ს საწყისი დროის ხაზიდან %u საწყისი წერტილით %X/%X, მაგრამ დროის ხაზი იწყება მნიშვნელობაზე %X/%X"
+msgid "manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "მანიფესტი მოითხოვს WAL-ს საწყისი დროის ხაზიდან %u საწყისი წერტილით %X/%08X, მაგრამ დროის ხაზი იწყება მნიშვნელობაზე %X/%08X"
 
 #: backup/basebackup_incremental.c:422
 #, c-format
-msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "მანიფესტი მოითხოვს WAL-ს გაგრძელების დროის ხაზიდან %u საწყისი წერტილით %X/%X, მაგრამ დროის ხაზი იწყება მნიშვნელობაზე %X/%X"
+msgid "manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "მანიფესტი მოითხოვს WAL-ს გაგრძელების დროის ხაზიდან %u საწყისი წერტილით %X/%08X, მაგრამ დროის ხაზი იწყება მნიშვნელობაზე %X/%08X"
 
 #: backup/basebackup_incremental.c:433
 #, c-format
-msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X"
-msgstr "მანიფესტი მოითხოვს WAL-ს ფინალური დროის ხაზიდან %u საბოლოო წერტილით %X/%X, მაგრამ ეს მარქაფი იწყება მისამართზე %X/%X"
+msgid "manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X"
+msgstr "მანიფესტი მოითხოვს WAL-ს ფინალური დროის ხაზიდან %u საბოლოო წერტილით %X/%08X, მაგრამ ეს მარქაფი იწყება მისამართზე %X/%08X"
 
 #: backup/basebackup_incremental.c:437
 #, c-format
@@ -3627,22 +3627,22 @@ msgstr ""
 
 #: backup/basebackup_incremental.c:444
 #, c-format
-msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X"
-msgstr "მანიფესტი მოითხოვს WAL-ს არაფინალური დროის ხაზიდან %u საბოლოო წერტილით %X/%X, მაგრამ ამ სერვერმა გადართო დროის ხაზები მისამართზე %X/%X"
+msgid "manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X"
+msgstr "მანიფესტი მოითხოვს WAL-ს არაფინალური დროის ხაზიდან %u საბოლოო წერტილით %X/%08X, მაგრამ ამ სერვერმა გადართო დროის ხაზები მისამართზე %X/%08X"
 
 #: backup/basebackup_incremental.c:525
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist"
 msgstr ""
 
 #: backup/basebackup_incremental.c:532
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete"
 msgstr ""
 
 #: backup/basebackup_incremental.c:536
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
+msgid "The first unsummarized LSN in this range is %X/%08X."
 msgstr ""
 
 #: backup/basebackup_incremental.c:934
@@ -10068,8 +10068,8 @@ msgstr "გამოიყენეთ ALTER SUBSCRIPTION ... REFRESH 'copy_data
 
 #: commands/subscriptioncmds.c:1542
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
-msgstr "გამოტოვება WAL-ის მდებარეობა (LSN %X/%X) საწყის LSN-ზე %X/%X დიდი უნდა იყოს"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
+msgstr "გამოტოვება WAL-ის მდებარეობა (LSN %X/%08X) საწყის LSN-ზე %X/%08X დიდი უნდა იყოს"
 
 #: commands/subscriptioncmds.c:1667
 #, c-format
@@ -20429,35 +20429,35 @@ msgstr ""
 
 #: postmaster/walsummarizer.c:744
 #, c-format
-msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory."
+msgid "Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory."
 msgstr ""
 
 #: postmaster/walsummarizer.c:758
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld second"
-msgid_plural "still waiting for WAL summarization through %X/%X after %ld seconds"
+msgid "still waiting for WAL summarization through %X/%08X after %ld second"
+msgid_plural "still waiting for WAL summarization through %X/%08X after %ld seconds"
 msgstr[0] ""
 msgstr[1] ""
 
 #: postmaster/walsummarizer.c:763
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
 msgstr ""
 
 #: postmaster/walsummarizer.c:1007
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%X -ის შემდეგ სწორი ჩანაწერი არ არსებობს"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08X -ის შემდეგ სწორი ჩანაწერი არ არსებობს"
 
 #: postmaster/walsummarizer.c:1052
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "ვერ წავიკითხე WAL დროის ხაზიდან %u მისამართზე %X/%X: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "ვერ წავიკითხე WAL დროის ხაზიდან %u მისამართზე %X/%08X: %s"
 
 #: postmaster/walsummarizer.c:1058
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "ვერ წავიკითხე WAL დროის ხაზიდან %u მისამართზე %X/%X"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "ვერ წავიკითხე WAL დროის ხაზიდან %u მისამართზე %X/%08X"
 
 #: regex/regc_pg_locale.c:241
 #, c-format
@@ -20836,12 +20836,12 @@ msgstr "იწყება ლოგიკური გაშიფვრა ს
 
 #: replication/logical/logical.c:611
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
 msgstr ""
 
 #: replication/logical/logical.c:759
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
 msgstr ""
 
 #: replication/logical/logical.c:765
@@ -20936,8 +20936,8 @@ msgstr "თავისუფალი რეპლიკაციის მდ
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "აღდგენილია კვანძის %d რეპლიკაციის მდგომარეობა %X/%X-მდე"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "აღდგენილია კვანძის %d რეპლიკაციის მდგომარეობა %X/%08X-მდე"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -21044,7 +21044,7 @@ msgstr "რეპლიკაციის სლოტის სინქრო
 
 #: replication/logical/slotsync.c:216
 #, c-format
-msgid "The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u."
+msgid "The remote slot has LSN %X/%08X and catalog xmin %u, but the local slot has LSN %X/%08X and catalog xmin %u."
 msgstr ""
 
 #: replication/logical/slotsync.c:460
@@ -21059,7 +21059,7 @@ msgstr "რეპლიკაციის სლოტის \"%s\" სინქ
 
 #: replication/logical/slotsync.c:581
 #, c-format
-msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X."
+msgid "Logical decoding could not find consistent point from local slot's LSN %X/%08X."
 msgstr ""
 
 #: replication/logical/slotsync.c:590
@@ -21069,7 +21069,7 @@ msgstr "ახლად შექმნილი რეპლიკაციი
 
 #: replication/logical/slotsync.c:629
 #, c-format
-msgid "skipping slot synchronization because the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X"
+msgid "skipping slot synchronization because the received slot sync LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X"
 msgstr ""
 
 #: replication/logical/slotsync.c:651
@@ -21178,7 +21178,7 @@ msgstr[1] ""
 
 #: replication/logical/snapbuild.c:1305 replication/logical/snapbuild.c:1402 replication/logical/snapbuild.c:1908
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
 msgstr ""
 
 #: replication/logical/snapbuild.c:1307
@@ -21188,7 +21188,7 @@ msgstr "გაშვებული ტრანზაქციების გ
 
 #: replication/logical/snapbuild.c:1354
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
 msgstr ""
 
 #: replication/logical/snapbuild.c:1356 replication/logical/snapbuild.c:1380
@@ -21198,7 +21198,7 @@ msgstr ""
 
 #: replication/logical/snapbuild.c:1378
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
 msgstr ""
 
 #: replication/logical/snapbuild.c:1404
@@ -21398,13 +21398,13 @@ msgstr "გამოწერა \"%s\" გაითიშა შეცდომ
 
 #: replication/logical/worker.c:4893
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "ლოგიკური რეპლიკაცია იწყებს ტრანზაქციის გამოტოვებას მისამართზე LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "ლოგიკური რეპლიკაცია იწყებს ტრანზაქციის გამოტოვებას მისამართზე LSN %X/%08X"
 
 #: replication/logical/worker.c:4907
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "ლოგიკურმა რეპლიკაციამ დაასრულა ტრანზაქციის გამოტოვება მისამართზე LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "ლოგიკურმა რეპლიკაციამ დაასრულა ტრანზაქციის გამოტოვება მისამართზე LSN %X/%08X"
 
 #: replication/logical/worker.c:4989
 #, c-format
@@ -21413,7 +21413,7 @@ msgstr "skip-LSN გამოწერისთვის \"%s\" გასუფ
 
 #: replication/logical/worker.c:4990
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
 msgstr ""
 
 #: replication/logical/worker.c:5027
@@ -21428,7 +21428,7 @@ msgstr ""
 
 #: replication/logical/worker.c:5036
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 
 #: replication/logical/worker.c:5047
@@ -21438,7 +21438,7 @@ msgstr ""
 
 #: replication/logical/worker.c:5054
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 
 #: replication/logical/worker.c:5065
@@ -21448,7 +21448,7 @@ msgstr ""
 
 #: replication/logical/worker.c:5073
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 
 #: replication/pgoutput/pgoutput.c:328
@@ -21658,8 +21658,8 @@ msgstr ""
 
 #: replication/slot.c:1550
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %<PRIu64> byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %<PRIu64> bytes."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %<PRIu64> byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %<PRIu64> bytes."
 msgstr[0] ""
 msgstr[1] ""
 
@@ -21830,7 +21830,7 @@ msgstr ""
 
 #: replication/slotfuncs.c:569
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
 msgstr ""
 
 #: replication/slotfuncs.c:676
@@ -21945,12 +21945,12 @@ msgstr ""
 
 #: replication/walreceiver.c:389
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
 msgstr ""
 
 #: replication/walreceiver.c:393
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
 msgstr ""
 
 #: replication/walreceiver.c:428
@@ -21965,7 +21965,7 @@ msgstr "რეპლიკაცია შეწყვეტილია ძი
 
 #: replication/walreceiver.c:473
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
 msgstr ""
 
 #: replication/walreceiver.c:573
@@ -22015,17 +22015,17 @@ msgstr ""
 
 #: replication/walsender.c:895
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
 msgstr ""
 
 #: replication/walsender.c:898
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
 msgstr ""
 
 #: replication/walsender.c:942
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
 msgstr ""
 
 #: replication/walsender.c:1137
@@ -32280,8 +32280,8 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის 
 #~ msgstr "პარამეტრის არასწორი სახელი \"%s\""
 
 #, c-format
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%08X"
 
 #, c-format
 #~ msgid "invalid resource manager ID in primary checkpoint record"
@@ -32324,8 +32324,8 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის 
 #~ msgstr "მანიფესტის სისტემის იდენფიტიკატორი მთელი რიცხვი არაა"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "მისამართზე %X/%X contrecord ალამი არ არსებობს"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "მისამართზე %X/%08X contrecord ალამი არ არსებობს"
 
 #, c-format
 #~ msgid "multiple limit options not allowed"
@@ -32474,8 +32474,8 @@ msgstr "სხვა ბაზიდან სწრაფი ასლის 
 #~ msgstr "აკლა პარამეტრი publication_names"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "ჩანაწერის სიგრძე %u მისამართზე %X/%X ძალიან გრძელია"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "ჩანაწერის სიგრძე %u მისამართზე %X/%08X ძალიან გრძელია"
 
 #~ msgid "server process"
 #~ msgstr "სერვერის პროცესი"
diff --git a/src/backend/po/ko.po b/src/backend/po/ko.po
index d71eed4b6c0..fd31e7442b3 100644
--- a/src/backend/po/ko.po
+++ b/src/backend/po/ko.po
@@ -2408,18 +2408,18 @@ msgstr "WAL 읽기 프로세서를 할당하는 중에 오류 발생"
 
 #: access/transam/twophase.c:1445
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "two-phase 상태정보을 읽을 수 없음 WAL 위치: %X/%X, %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "two-phase 상태정보을 읽을 수 없음 WAL 위치: %X/%08X, %s"
 
 #: access/transam/twophase.c:1450
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "two-phase 상태정보을 읽을 수 없음 WAL 위치: %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "two-phase 상태정보을 읽을 수 없음 WAL 위치: %X/%08X"
 
 #: access/transam/twophase.c:1458
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "WAL %X/%X 위치에 2단계 커밋 상태 자료가 없습니다"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "WAL %X/%08X 위치에 2단계 커밋 상태 자료가 없습니다"
 
 #: access/transam/twophase.c:1761
 #, c-format
@@ -2479,10 +2479,10 @@ msgstr "%u 트랜잭션에서 사용하는 two-phase 상태정보 파일을 복
 #: access/transam/twophase.c:2532
 #, c-format
 msgid ""
-"Two-phase state file has been found in WAL record %X/%X, but this "
+"Two-phase state file has been found in WAL record %X/%08X, but this "
 "transaction has already been restored from disk."
 msgstr ""
-"WAL 레코드 %X/%X 에서 2PC 상태 파일을 찾았지만, 그 트랜잭션은 이미 디스크에 "
+"WAL 레코드 %X/%08X 에서 2PC 상태 파일을 찾았지만, 그 트랜잭션은 이미 디스크에 "
 "기록한 상태입니다."
 
 #: access/transam/twophase.c:2540 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209
@@ -2667,17 +2667,17 @@ msgstr "하나의 트랜잭션 안에서는 2^32-1 개의 하위트랜잭션을
 #: access/transam/xlog.c:1542
 #, c-format
 msgid ""
-"request to flush past end of generated WAL; request %X/%X, current position "
-"%X/%X"
-msgstr "생성된 WAL의 끝을 지난 flush 요청, 요청위치: %X/%X, 현재위치: %X/%X"
+"request to flush past end of generated WAL; request %X/%08X, current position "
+"%X/%08X"
+msgstr "생성된 WAL의 끝을 지난 flush 요청, 요청위치: %X/%08X, 현재위치: %X/%08X"
 
 #: access/transam/xlog.c:1769
 #, c-format
 msgid ""
-"cannot read past end of generated WAL: requested %X/%X, current position %X/"
+"cannot read past end of generated WAL: requested %X/%08X, current position %X/"
 "%X"
 msgstr ""
-"생성된 WAL의 끝을 지나서 읽을 수 없음: 요청위치: %X/%X, 현재위치: %X/%X"
+"생성된 WAL의 끝을 지나서 읽을 수 없음: 요청위치: %X/%08X, 현재위치: %X/%08X"
 
 #: access/transam/xlog.c:2210 access/transam/xlog.c:4501
 #, c-format
@@ -3073,12 +3073,12 @@ msgid ""
 "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d "
 "removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; "
 "sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 "restartpoint 작업완료: %d개(%.1f%%) 버퍼 씀; %d개 WAL 파일 추가됨, %d개 지웠"
 "음, %d개 재활용; 쓰기시간: %ld.%03d s, 동기화시간: %ld.%03d s, 전체시간: %ld."
 "%03d s; 동기화 파일 개수: %d, 최장시간: %ld.%03d s, 평균시간: %ld.%03d s; 실"
-"제작업량: %d kB, 예상한작업량: %d kB; lsn=%X/%X, redo lsn=%X/%X"
+"제작업량: %d kB, 예상한작업량: %d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 
 #: access/transam/xlog.c:6751
 #, c-format
@@ -3086,12 +3086,12 @@ msgid ""
 "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d "
 "removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; "
 "sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 "채크포인트 작업완료: %d개(%.1f%%) 버퍼 씀; %d개 WAL 파일 추가됨, %d개 지웠"
 "음, %d개 재활용; 쓰기시간: %ld.%03d s, 동기화시간: %ld.%03d s, 전체시간: %ld."
 "%03d s; 동기화 파일 개수: %d, 최장시간: %ld.%03d s, 평균시간: %ld.%03d s; 실"
-"제작업량: %d kB, 예상한작업량: %d kB; lsn=%X/%X, redo lsn=%X/%X"
+"제작업량: %d kB, 예상한작업량: %d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 
 #: access/transam/xlog.c:7233
 #, c-format
@@ -3101,8 +3101,8 @@ msgstr "데이터베이스 시스템이 중지되는 동안 동시 트랜잭션
 
 #: access/transam/xlog.c:7818
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "%X/%X에서 복구 작업 시작함"
+msgid "recovery restart point at %X/%08X"
+msgstr "%X/%08X에서 복구 작업 시작함"
 
 #: access/transam/xlog.c:7820
 #, c-format
@@ -3111,8 +3111,8 @@ msgstr "마지막 완료된 트랜잭션 기록 시간은 %s 입니다."
 
 #: access/transam/xlog.c:8082
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "\"%s\" 이름의 복구 위치는 %X/%X에 만들었음"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "\"%s\" 이름의 복구 위치는 %X/%08X에 만들었음"
 
 #: access/transam/xlog.c:8289
 #, c-format
@@ -3416,53 +3416,53 @@ msgstr ""
 
 #: access/transam/xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "잘못된 레코드 오프셋: 위치 %X/%X, 기대값 %u, 실재값 %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "잘못된 레코드 오프셋: 위치 %X/%08X, 기대값 %u, 실재값 %u"
 
 #: access/transam/xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%X에서 contrecord를 필요로 함"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08X에서 contrecord를 필요로 함"
 
 #: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "잘못된 레코드 길이: 위치 %X/%X, 기대값 %u, 실재값 %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "잘못된 레코드 길이: 위치 %X/%08X, 기대값 %u, 실재값 %u"
 
 #: access/transam/xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%X 위치에 contrecord 플래그가 없음"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08X 위치에 contrecord 플래그가 없음"
 
 #: access/transam/xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "잘못된 contrecord 길이 %u (기대값: %lld), 위치 %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "잘못된 contrecord 길이 %u (기대값: %lld), 위치 %X/%08X"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "잘못된 자원 관리 ID %u, 위치: %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "잘못된 자원 관리 ID %u, 위치: %X/%08X"
 
 #: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "레코드의 잘못된 프리링크 %X/%X, 해당 레코드 %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "레코드의 잘못된 프리링크 %X/%08X, 해당 레코드 %X/%08X"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%X 레코드"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%08X 레코드"
 
 #: access/transam/xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "%04X 매직 번호가 잘못됨, WAL 조각 파일 %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "%04X 매직 번호가 잘못됨, WAL 조각 파일 %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "잘못된 정보 비트 %04X, WAL 조각 파일 %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "잘못된 정보 비트 %04X, WAL 조각 파일 %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogreader.c:1274
 #, c-format
@@ -3493,77 +3493,77 @@ msgstr ""
 
 #: access/transam/xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "잘못된 페이지 주소 %X/%X, WAL 조각 파일 %s, LSN %X/%X, offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "잘못된 페이지 주소 %X/%08X, WAL 조각 파일 %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogreader.c:1346
 #, c-format
 msgid ""
-"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, "
+"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, "
 "offset %u"
 msgstr ""
-"타임라인 범위 벗어남 %u (이전 번호 %u), WAL 조각 파일 %s, LSN %X/%X, offset "
+"타임라인 범위 벗어남 %u (이전 번호 %u), WAL 조각 파일 %s, LSN %X/%08X, offset "
 "%u"
 
 #: access/transam/xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "%u block_id는 범위를 벗어남, 위치 %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "%u block_id는 범위를 벗어남, 위치 %X/%08X"
 
 #: access/transam/xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%X 에 자료가 없음"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%08X 에 자료가 없음"
 
 #: access/transam/xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%08X"
 
 #: access/transam/xlogreader.c:1816
 #, c-format
 msgid ""
 "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at "
-"%X/%X"
+"%X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE 설정이 되어 있지만, 옵셋: %u, 길이: %u, 블록 이미지 길이: "
-"%u, 대상: %X/%X"
+"%u, 대상: %X/%08X"
 
 #: access/transam/xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr ""
-"BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%X"
+"BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%08X"
 
 #: access/transam/xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr ""
-"BKPIMAGE_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%X"
+"BKPIMAGE_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%08X"
 
 #: access/transam/xlogreader.c:1861
 #, c-format
 msgid ""
 "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image "
-"length is %u at %X/%X"
+"length is %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE, BKPIMAGE_COMPRESSED 지정 안되어 있으나, 블록 이미지 길이"
-"는 %u, 대상: %X/%X"
+"는 %u, 대상: %X/%08X"
 
 #: access/transam/xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%X 에 이전 릴레이션 없음"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%08X 에 이전 릴레이션 없음"
 
 #: access/transam/xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "잘못된 block_id %u, 위치 %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "잘못된 block_id %u, 위치 %X/%08X"
 
 #: access/transam/xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "잘못된 레코드 길이, 위치 %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "잘못된 레코드 길이, 위치 %X/%08X"
 
 #: access/transam/xlogreader.c:1982
 #, c-format
@@ -3572,44 +3572,44 @@ msgstr "WAL 레코드에서 %d ID의 백업 블록을 찾을 수 없음"
 
 #: access/transam/xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "%X/%X 위치에 이미지를 복원할 수 없음 %d 블록이 잘못 지정됨"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "%X/%08X 위치에 이미지를 복원할 수 없음 %d 블록이 잘못 지정됨"
 
 #: access/transam/xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "%X/%X 위치에 이미지를 복원할 수 없음, %d 블록의 상태가 이상함"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "%X/%08X 위치에 이미지를 복원할 수 없음, %d 블록의 상태가 이상함"
 
 #: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with %s not supported by build, "
+"could not restore image at %X/%08X compressed with %s not supported by build, "
 "block %d"
-msgstr "%X/%X 위치에 압축된 이미지 복원 실패, %s 지원 하지 않음, 해당 블록: %d"
+msgstr "%X/%08X 위치에 압축된 이미지 복원 실패, %s 지원 하지 않음, 해당 블록: %d"
 
 #: access/transam/xlogreader.c:2126
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "알 수 없는 방법으로 이미지 압축 복원 실패: 위치 %X/%X, 블록 %d"
+"could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "알 수 없는 방법으로 이미지 압축 복원 실패: 위치 %X/%08X, 블록 %d"
 
 #: access/transam/xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "이미지 압축 풀기 실패, 위치 %X/%X, 블록 %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "이미지 압축 풀기 실패, 위치 %X/%08X, 블록 %d"
 
 #: access/transam/xlogrecovery.c:617
 #, c-format
 msgid ""
-"starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on "
+"starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on "
 "timeline ID %u"
-msgstr "백업 복구 시작: 리두LSN=%X/%X, 체크포인트LSN=%X/%X, 타임라인ID=%u"
+msgstr "백업 복구 시작: 리두LSN=%X/%08X, 체크포인트LSN=%X/%08X, 타임라인ID=%u"
 
 #: access/transam/xlogrecovery.c:649
 #, c-format
 msgid ""
-"could not find redo location %X/%X referenced by checkpoint record at %X/%X"
-msgstr "%X/%X 위치의 redo lsn을 찾을 수 없음: 참조하는 체크포인트 레코드=%X/%X"
+"could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
+msgstr "%X/%08X 위치의 redo lsn을 찾을 수 없음: 참조하는 체크포인트 레코드=%X/%08X"
 
 #: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662
 #, c-format
@@ -3630,8 +3630,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:660
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "요청된 체크포인트 레코드의 위치(%X/%X)를 잡을 수 없음"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "요청된 체크포인트 레코드의 위치(%X/%08X)를 잡을 수 없음"
 
 #: access/transam/xlogrecovery.c:690 commands/tablespace.c:664
 #, c-format
@@ -3655,13 +3655,13 @@ msgstr "\"%s\" 파일을 \"%s\" 파일로 이름을 바꿀 수 없음: %m"
 
 #: access/transam/xlogrecovery.c:770
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "\"%X/%X\" redo LSN에서 백업 복구 작업을 다시 시작합니다"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "\"%X/%08X\" redo LSN에서 백업 복구 작업을 다시 시작합니다"
 
 #: access/transam/xlogrecovery.c:795
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "%X/%X에서 바른 체크포인트 레코드를 잡을 수 없음"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "%X/%08X에서 바른 체크포인트 레코드를 잡을 수 없음"
 
 #: access/transam/xlogrecovery.c:806
 #, c-format
@@ -3685,8 +3685,8 @@ msgstr "\"%s\" 복구 대상 이름까지 시점 복구 작업을 시작합니
 
 #: access/transam/xlogrecovery.c:821
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "\"%X/%X\" 위치(LSN)까지 시점 복구 작업을 시작합니다"
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "\"%X/%08X\" 위치(LSN)까지 시점 복구 작업을 시작합니다"
 
 #: access/transam/xlogrecovery.c:825
 #, c-format
@@ -3706,19 +3706,19 @@ msgstr "요청한 %u 타임라인은 서버 타임라인의 하위가 아님"
 #: access/transam/xlogrecovery.c:851
 #, c-format
 msgid ""
-"Latest checkpoint is at %X/%X on timeline %u, but in the history of the "
-"requested timeline, the server forked off from that timeline at %X/%X."
+"Latest checkpoint is at %X/%08X on timeline %u, but in the history of the "
+"requested timeline, the server forked off from that timeline at %X/%08X."
 msgstr ""
-"마지막 체크포인트 위치는 %X/%X (%u 타임라인)입니다. 하지만, 요청받은 타임라"
-"인 내역파일에는 그 타임라인 %X/%X 위치에서 분기되었습니다."
+"마지막 체크포인트 위치는 %X/%08X (%u 타임라인)입니다. 하지만, 요청받은 타임라"
+"인 내역파일에는 그 타임라인 %X/%08X 위치에서 분기되었습니다."
 
 #: access/transam/xlogrecovery.c:865
 #, c-format
 msgid ""
-"requested timeline %u does not contain minimum recovery point %X/%X on "
+"requested timeline %u does not contain minimum recovery point %X/%08X on "
 "timeline %u"
 msgstr ""
-"요청한 %u 타임라인은 %X/%X 최소 복구 위치가 없습니다, 기존 타임라인: %u"
+"요청한 %u 타임라인은 %X/%08X 최소 복구 위치가 없습니다, 기존 타임라인: %u"
 
 #: access/transam/xlogrecovery.c:893
 #, c-format
@@ -3824,18 +3824,18 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:1717
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "%X/%X redo 위치에 잘못된 레크드 형태가 발견됨"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "%X/%08X redo 위치에 잘못된 레크드 형태가 발견됨"
 
 #: access/transam/xlogrecovery.c:1740
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "%X/%X에서 redo 작업 시작됨"
+msgid "redo starts at %X/%08X"
+msgstr "%X/%08X에서 redo 작업 시작됨"
 
 #: access/transam/xlogrecovery.c:1753
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "redo 진행 중, 예상시간: %ld.%02d s, 현재 LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "redo 진행 중, 예상시간: %ld.%02d s, 현재 LSN: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1843
 #, c-format
@@ -3844,8 +3844,8 @@ msgstr "요청한 복구 중지 지점이 일치하는 복구 지점 앞에 있
 
 #: access/transam/xlogrecovery.c:1875
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "%X/%X에서 redo 작업 완료, 시스템 사용량: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "%X/%08X에서 redo 작업 완료, 시스템 사용량: %s"
 
 #: access/transam/xlogrecovery.c:1881
 #, c-format
@@ -3864,8 +3864,8 @@ msgstr "지정한 recovery target 도달 전에 복구 끝남"
 
 #: access/transam/xlogrecovery.c:2095
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "%X/%X에 빠진 contrecord를 건너뜀, %s에 덮어씀"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "%X/%08X에 빠진 contrecord를 건너뜀, %s에 덮어씀"
 
 #: access/transam/xlogrecovery.c:2162
 #, c-format
@@ -3888,19 +3888,19 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2217
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
-msgstr "redo LSN %X/%X 부터 end LSN %X/%X 까지 백업 복구 완료"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
+msgstr "redo LSN %X/%08X 부터 end LSN %X/%08X 까지 백업 복구 완료"
 
 #: access/transam/xlogrecovery.c:2247
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "%X/%X 위치에서 복구 일관성을 맞춤"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "%X/%08X 위치에서 복구 일관성을 맞춤"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2285
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "WAL redo 위치: %X/%X, 대상: %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "WAL redo 위치: %X/%08X, 대상: %s"
 
 #: access/transam/xlogrecovery.c:2383
 #, c-format
@@ -3919,9 +3919,9 @@ msgstr "체크포인트 레코드에 예기치 않은 타임라인 ID %u이(가)
 #, c-format
 msgid ""
 "unexpected timeline ID %u in checkpoint record, before reaching minimum "
-"recovery point %X/%X on timeline %u"
+"recovery point %X/%08X on timeline %u"
 msgstr ""
-"체크포인트 내역 안에 %u 타임라인 ID가 기대한 것과 다릅니다. 발생 위치: %X/%X "
+"체크포인트 내역 안에 %u 타임라인 ID가 기대한 것과 다릅니다. 발생 위치: %X/%08X "
 "(타임라인: %u) 최소 복구 위치 이전"
 
 #: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868
@@ -3931,8 +3931,8 @@ msgstr "일관성을 다 맞추어 복구 작업을 중지합니다."
 
 #: access/transam/xlogrecovery.c:2613
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "복구 중지 위치(LSN): \"%X/%X\" 이전"
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "복구 중지 위치(LSN): \"%X/%08X\" 이전"
 
 #: access/transam/xlogrecovery.c:2703
 #, c-format
@@ -3951,8 +3951,8 @@ msgstr "복구 중지함, 복구 위치 \"%s\", 시간 %s"
 
 #: access/transam/xlogrecovery.c:2781
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "복구 중지 위치(LSN): \"%X/%X\" 이후"
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "복구 중지 위치(LSN): \"%X/%08X\" 이후"
 
 #: access/transam/xlogrecovery.c:2848
 #, c-format
@@ -3986,19 +3986,19 @@ msgstr "계속 진행하려면, pg_wal_replay_resume() 함수를 호출하세요
 
 #: access/transam/xlogrecovery.c:3205
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "예상치 못한 타임라인 ID %u, WAL 조각 파일: %s, LSN %X/%X, offset %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "예상치 못한 타임라인 ID %u, WAL 조각 파일: %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogrecovery.c:3413
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "%s WAL 조각에서 읽기 실패, LSN %X/%X, offset %u: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "%s WAL 조각에서 읽기 실패, LSN %X/%08X, offset %u: %m"
 
 #: access/transam/xlogrecovery.c:3420
 #, c-format
 msgid ""
-"could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
-msgstr "%s WAL 조각에서 읽기 실패, LSN %X/%X, offset %u: read %d / %zu"
+"could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
+msgstr "%s WAL 조각에서 읽기 실패, LSN %X/%08X, offset %u: read %d / %zu"
 
 #: access/transam/xlogrecovery.c:4060
 #, c-format
@@ -4034,10 +4034,10 @@ msgstr "요청한 %u 타임라인은 %u 데이터베이스 시스템 타임라
 #, c-format
 msgid ""
 "new timeline %u forked off current database system timeline %u before "
-"current recovery point %X/%X"
+"current recovery point %X/%08X"
 msgstr ""
 "복구 위치까지 복구하기 전에 새 타임라인 %u번으로 분기됨, 기존 데이터베이스 타"
-"임라인: %u, 기대한 복구 위치 %X/%X"
+"임라인: %u, 기대한 복구 위치 %X/%08X"
 
 #: access/transam/xlogrecovery.c:4177
 #, c-format
@@ -4374,29 +4374,29 @@ msgstr "매니페스트에 있는 타임라인 %u번이 이 서버 백업 이력
 #: backup/basebackup_incremental.c:414
 #, c-format
 msgid ""
-"manifest requires WAL from initial timeline %u starting at %X/%X, but that "
-"timeline begins at %X/%X"
+"manifest requires WAL from initial timeline %u starting at %X/%08X, but that "
+"timeline begins at %X/%08X"
 msgstr ""
-"매니페스트에는 시작 타임라인이 %u번으로 %X/%X에 있다고 해서 그 WAL 파일이 필요한데, "
-"그 타임라인은 %X/%X에 있음"
+"매니페스트에는 시작 타임라인이 %u번으로 %X/%08X에 있다고 해서 그 WAL 파일이 필요한데, "
+"그 타임라인은 %X/%08X에 있음"
 
 #: backup/basebackup_incremental.c:424
 #, c-format
 msgid ""
-"manifest requires WAL from continuation timeline %u starting at %X/%X, but "
-"that timeline begins at %X/%X"
+"manifest requires WAL from continuation timeline %u starting at %X/%08X, but "
+"that timeline begins at %X/%08X"
 msgstr ""
-"매니페스트에는 연결 타임라인이 %u번으로 %X/%X에 있다고 해서 그 WAL 파일이 필요한데, "
-"그 타임라인은 %X/%X에 있음"
+"매니페스트에는 연결 타임라인이 %u번으로 %X/%08X에 있다고 해서 그 WAL 파일이 필요한데, "
+"그 타임라인은 %X/%08X에 있음"
 
 #: backup/basebackup_incremental.c:435
 #, c-format
 msgid ""
-"manifest requires WAL from final timeline %u ending at %X/%X, but this "
-"backup starts at %X/%X"
+"manifest requires WAL from final timeline %u ending at %X/%08X, but this "
+"backup starts at %X/%08X"
 msgstr ""
-"매니페스트에는 최종 타임라인이 %u번으로 %X/%X에 있다고 해서 그 WAL 파일이 필요한데, "
-"이 백업은 %X/%X에서 시작됨"
+"매니페스트에는 최종 타임라인이 %u번으로 %X/%08X에 있다고 해서 그 WAL 파일이 필요한데, "
+"이 백업은 %X/%08X에서 시작됨"
 
 #: backup/basebackup_incremental.c:439
 #, c-format
@@ -4410,34 +4410,34 @@ msgstr ""
 #: backup/basebackup_incremental.c:446
 #, c-format
 msgid ""
-"manifest requires WAL from non-final timeline %u ending at %X/%X, but this "
-"server switched timelines at %X/%X"
+"manifest requires WAL from non-final timeline %u ending at %X/%08X, but this "
+"server switched timelines at %X/%08X"
 msgstr ""
-"매니페스트에는 %u 타임라인을 끝내는 것이 %X/%X에 있어 그 WAL 파일이 필요한데, "
-"서버는 %X/%X에서 타임라인이 바뀌었음"
+"매니페스트에는 %u 타임라인을 끝내는 것이 %X/%08X에 있어 그 WAL 파일이 필요한데, "
+"서버는 %X/%08X에서 타임라인이 바뀌었음"
 
 #: backup/basebackup_incremental.c:527
 #, c-format
 msgid ""
-"WAL summaries are required on timeline %u from %X/%X to %X/%X, but no "
+"WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no "
 "summaries for that timeline and LSN range exist"
 msgstr ""
-"WAL 요약 정보에서는 %u번 타임라인은 %X/%X에서 %X/%X까지인데, "
+"WAL 요약 정보에서는 %u번 타임라인은 %X/%08X에서 %X/%08X까지인데, "
 "이 타임라인과 범위에 대한 요약을 못 찾음"
 
 #: backup/basebackup_incremental.c:534
 #, c-format
 msgid ""
-"WAL summaries are required on timeline %u from %X/%X to %X/%X, but the "
+"WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the "
 "summaries for that timeline and LSN range are incomplete"
 msgstr ""
-"WAL 요약 정보에서는 %u번 타임라인은 %X/%X에서 %X/%X까지인데, "
+"WAL 요약 정보에서는 %u번 타임라인은 %X/%08X에서 %X/%08X까지인데, "
 "이 타임라인과 범위에 대한 요약이 불완전함"
 
 #: backup/basebackup_incremental.c:538
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
-msgstr "이 범위 안의 첫번째 요약푼 LSN은 %X/%X입니다."
+msgid "The first unsummarized LSN in this range is %X/%08X."
+msgstr "이 범위 안의 첫번째 요약푼 LSN은 %X/%08X입니다."
 
 #: backup/basebackup_incremental.c:938
 #, c-format
@@ -11205,9 +11205,9 @@ msgstr ""
 
 #: commands/subscriptioncmds.c:1473
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
 msgstr ""
-"WAL 위치 (LSN %X/%X)를 건너뛰려면, 그 값이 원본 LSN %X/%X 보다 커야합니다"
+"WAL 위치 (LSN %X/%08X)를 건너뛰려면, 그 값이 원본 LSN %X/%08X 보다 커야합니다"
 
 #: commands/subscriptioncmds.c:1594
 #, c-format
@@ -21706,38 +21706,38 @@ msgstr "WAL 요약정보 처리 작업이 진행 중이지 않음"
 #: postmaster/walsummarizer.c:741
 #, c-format
 msgid ""
-"Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/"
+"Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/"
 "%X in memory."
 msgstr ""
-"요약정보 처리 작업은 %X/%X에서 필요한데, 디스크의 %X/%X, 메모리의 %X/%X에서 멈추어 있음"
+"요약정보 처리 작업은 %X/%08X에서 필요한데, 디스크의 %X/%08X, 메모리의 %X/%08X에서 멈추어 있음"
 
 #: postmaster/walsummarizer.c:755
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld second"
+msgid "still waiting for WAL summarization through %X/%08X after %ld second"
 msgid_plural ""
-"still waiting for WAL summarization through %X/%X after %ld seconds"
+"still waiting for WAL summarization through %X/%08X after %ld seconds"
 msgstr[0] ""
-"%X/%X에서 여전히 %ld초 동안 WAL 요약정보 처리 작업이 멈춰 있음"
+"%X/%08X에서 여전히 %ld초 동안 WAL 요약정보 처리 작업이 멈춰 있음"
 
 #: postmaster/walsummarizer.c:760
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
-msgstr "요약정보 처리 작업이 디스크의 %X/%X에, 메모리의 %X/%X에 다달았음"
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
+msgstr "요약정보 처리 작업이 디스크의 %X/%08X에, 메모리의 %X/%08X에 다달았음"
 
 #: postmaster/walsummarizer.c:1000
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%X 뒤에 올바른 레코드를 찾을 수 없음"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08X 뒤에 올바른 레코드를 찾을 수 없음"
 
 #: postmaster/walsummarizer.c:1045
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "%u번 타임라인의 %X/%X에서 WAL를 읽을 수 없음: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "%u번 타임라인의 %X/%08X에서 WAL를 읽을 수 없음: %s"
 
 #: postmaster/walsummarizer.c:1051
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "타임라인 %u, 위치 %X/%X 에서 WAL를 읽을 없음"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "타임라인 %u, 위치 %X/%08X 에서 WAL를 읽을 없음"
 
 #: regex/regc_pg_locale.c:244
 #, c-format
@@ -22059,16 +22059,16 @@ msgstr "\"%s\" 이름의 논리적 복제 슬롯을 만드는 중"
 
 #: replication/logical/logical.c:630
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
 msgstr ""
-"%X/%X 이후 트랜잭션 커밋 정보를 스트리밍 하는 중, %X/%X 위치부터 WAL 읽는 중"
+"%X/%08X 이후 트랜잭션 커밋 정보를 스트리밍 하는 중, %X/%08X 위치부터 WAL 읽는 중"
 
 #: replication/logical/logical.c:778
 #, c-format
 msgid ""
-"slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
+"slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
 msgstr ""
-"슬롯: \"%s\", 출력 플러그인: \"%s\", 해당 콜백함수: %s, 관련 LSN: %X/%X"
+"슬롯: \"%s\", 출력 플러그인: \"%s\", 해당 콜백함수: %s, 관련 LSN: %X/%08X"
 
 #: replication/logical/logical.c:784
 #, c-format
@@ -22175,8 +22175,8 @@ msgstr ""
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "%d 노드 %X/%X 위치로 복제 상태가 복구됨"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "%d 노드 %X/%08X 위치로 복제 상태가 복구됨"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -22296,11 +22296,11 @@ msgstr "원격 슬롯이 로컬 슬롯 보다 우선이어서 복제 슬롯(\"%s
 #: replication/logical/slotsync.c:217
 #, c-format
 msgid ""
-"The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has "
-"LSN %X/%X and catalog xmin %u."
+"The remote slot has LSN %X/%08X and catalog xmin %u, but the local slot has "
+"LSN %X/%08X and catalog xmin %u."
 msgstr ""
-"원격 슬롯에는 LSN %X/%X, catalog xmin %u 정보가 있지만, "
-"로컬 슬롯은 LSN %X/%X, catalog xmin %u 상태입니다."
+"원격 슬롯에는 LSN %X/%08X, catalog xmin %u 정보가 있지만, "
+"로컬 슬롯은 LSN %X/%08X, catalog xmin %u 상태입니다."
 
 #: replication/logical/slotsync.c:459
 #, c-format
@@ -22315,8 +22315,8 @@ msgstr "\"%s\" 복제 슬롯을 동기화 할 수 없음"
 #: replication/logical/slotsync.c:580
 #, c-format
 msgid ""
-"Logical decoding could not find consistent point from local slot's LSN %X/%X."
-msgstr "논리적 디코딩이 로컬 슬롯 %X/%X에서 일관성 위치를 찾지 못함"
+"Logical decoding could not find consistent point from local slot's LSN %X/%08X."
+msgstr "논리적 디코딩이 로컬 슬롯 %X/%08X에서 일관성 위치를 찾지 못함"
 
 #: replication/logical/slotsync.c:589
 #, c-format
@@ -22326,11 +22326,11 @@ msgstr "새롭게 만들어진 \"%s\" 복제 슬롯은 이제 동기화 준비 
 #: replication/logical/slotsync.c:628
 #, c-format
 msgid ""
-"skipping slot synchronization because the received slot sync LSN %X/%X for "
-"slot \"%s\" is ahead of the standby position %X/%X"
+"skipping slot synchronization because the received slot sync LSN %X/%08X for "
+"slot \"%s\" is ahead of the standby position %X/%08X"
 msgstr ""
-"슬롯 동기화가 건너뜀, 수신된 슬롯 동기화 LSN은 %X/%X(해당 슬롯: \"%s\")인데 "
-"이는 대기 서버 위치인 %X/%X 보다 앞섭니다."
+"슬롯 동기화가 건너뜀, 수신된 슬롯 동기화 LSN은 %X/%08X(해당 슬롯: \"%s\")인데 "
+"이는 대기 서버 위치인 %X/%08X 보다 앞섭니다."
 
 #: replication/logical/slotsync.c:650
 #, c-format
@@ -22456,8 +22456,8 @@ msgstr[0] ""
 #: replication/logical/snapbuild.c:1404 replication/logical/snapbuild.c:1501
 #: replication/logical/snapbuild.c:2017
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "논리적 디코딩 이어서 시작할 위치: %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "논리적 디코딩 이어서 시작할 위치: %X/%08X"
 
 #: replication/logical/snapbuild.c:1406
 #, c-format
@@ -22466,8 +22466,8 @@ msgstr "실행할 트랜잭션이 없음"
 
 #: replication/logical/snapbuild.c:1453
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "논리적 디코딩 시작 위치: %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "논리적 디코딩 시작 위치: %X/%08X"
 
 #: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479
 #, c-format
@@ -22476,8 +22476,8 @@ msgstr "(대략 %d개) %u 보다 오래된 트랜잭션이 종료되길 기다
 
 #: replication/logical/snapbuild.c:1477
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "논리적 디코딩을 이어서 시작할 위치: %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "논리적 디코딩을 이어서 시작할 위치: %X/%08X"
 
 #: replication/logical/snapbuild.c:1503
 #, c-format
@@ -22728,13 +22728,13 @@ msgstr "\"%s\" 구독이 오류로 비활성화 되었습니다."
 
 #: replication/logical/worker.c:4806
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "%X/%X LSN 에서 트랜잭션 건너 뛰어 논리 복제를 시작함"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "%X/%08X LSN 에서 트랜잭션 건너 뛰어 논리 복제를 시작함"
 
 #: replication/logical/worker.c:4820
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "논리 복제가 %X/%X LSN까지 트랜잭션을 건너뛰었습니다."
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "논리 복제가 %X/%08X LSN까지 트랜잭션을 건너뛰었습니다."
 
 #: replication/logical/worker.c:4902
 #, c-format
@@ -22744,9 +22744,9 @@ msgstr "\"%s\" 이름의 구독의 LSN 건너뛰기 완료함"
 #: replication/logical/worker.c:4903
 #, c-format
 msgid ""
-"Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN "
-"%X/%X."
-msgstr "원력 트랜잭션 마침 WAL 위치 %X/%X LSN이 skip-LSN %X/%X와 같지 않음"
+"Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN "
+"%X/%08X."
+msgstr "원력 트랜잭션 마침 WAL 위치 %X/%08X LSN이 skip-LSN %X/%08X와 같지 않음"
 
 #: replication/logical/worker.c:4940
 #, c-format
@@ -22769,10 +22769,10 @@ msgstr ""
 #, c-format
 msgid ""
 "processing remote data for replication origin \"%s\" during message type "
-"\"%s\" in transaction %u, finished at %X/%X"
+"\"%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해"
-"당 트랜잭션: %u, 마침 위치: %X/%X"
+"당 트랜잭션: %u, 마침 위치: %X/%08X"
 
 #: replication/logical/worker.c:4960
 #, c-format
@@ -22788,10 +22788,10 @@ msgstr ""
 msgid ""
 "processing remote data for replication origin \"%s\" during message type "
 "\"%s\" for replication target relation \"%s.%s\" in transaction %u, finished "
-"at %X/%X"
+"at %X/%08X"
 msgstr ""
 "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해"
-"당 복제 대상 릴레이션: \"%s.%s\", 해당 트랜잭션: %u, 마침 위치: %X/%X"
+"당 복제 대상 릴레이션: \"%s.%s\", 해당 트랜잭션: %u, 마침 위치: %X/%08X"
 
 #: replication/logical/worker.c:4978
 #, c-format
@@ -22808,11 +22808,11 @@ msgstr ""
 msgid ""
 "processing remote data for replication origin \"%s\" during message type "
 "\"%s\" for replication target relation \"%s.%s\" column \"%s\" in "
-"transaction %u, finished at %X/%X"
+"transaction %u, finished at %X/%08X"
 msgstr ""
 "\"%s\" 복제 오리진용 원격 데이터를 처리합니다. 해당 메시지 유형: \"%s\", 해"
 "당 복제 대상 릴레이션: \"%s.%s\", 해당 칼럼 \"%s\", 해당 트랜잭션: %u, 마침 "
-"위치: %X/%X"
+"위치: %X/%08X"
 
 #: replication/pgoutput/pgoutput.c:322
 #, c-format
@@ -23013,10 +23013,10 @@ msgstr "복제 슬롯은 %s 속성을 가진 롤만 사용할 수 있습니다."
 
 #: replication/slot.c:1498
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
 msgstr[0] ""
-"해당 슬롯 restart_lsn %X/%X 값은 %llu 바이트로 그 크기를 초과했습니다."
+"해당 슬롯 restart_lsn %X/%08X 값은 %llu 바이트로 그 크기를 초과했습니다."
 
 #: replication/slot.c:1506
 #, c-format
@@ -23170,8 +23170,8 @@ msgstr "이 슬롯은 한 번도 WAL를 예약한 적이 없거나, 잘못된 
 
 #: replication/slotfuncs.c:566
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "복제 슬롯 위치를 %X/%X 로 바꿀 수 없습니다. 최소값은 %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "복제 슬롯 위치를 %X/%08X 로 바꿀 수 없습니다. 최소값은 %X/%08X"
 
 #: replication/slotfuncs.c:673
 #, c-format
@@ -23282,13 +23282,13 @@ msgstr ""
 
 #: replication/walreceiver.c:419
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "주 서버의 WAL 스트리밍 시작 위치: %X/%X (타임라인 %u)"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "주 서버의 WAL 스트리밍 시작 위치: %X/%08X (타임라인 %u)"
 
 #: replication/walreceiver.c:423
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "WAL 스트리밍 재시작 위치: %X/%X (타임라인 %u)"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "WAL 스트리밍 재시작 위치: %X/%08X (타임라인 %u)"
 
 #: replication/walreceiver.c:458
 #, c-format
@@ -23302,8 +23302,8 @@ msgstr "주 서버에 의해서 복제가 끝남"
 
 #: replication/walreceiver.c:503
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "타임라인 %u, 위치 %X/%X 에서 WAL 끝에 도달함"
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "타임라인 %u, 위치 %X/%08X 에서 WAL 끝에 도달함"
 
 #: replication/walreceiver.c:593
 #, c-format
@@ -23353,20 +23353,20 @@ msgstr "물리적 복제에서 논리적 복제 슬롯을 사용할 수 없음"
 #: replication/walsender.c:919
 #, c-format
 msgid ""
-"requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "요청된 %X/%X 시작 위치(타임라인 %u)가 이 서버 내역에 없습니다."
+"requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "요청된 %X/%08X 시작 위치(타임라인 %u)가 이 서버 내역에 없습니다."
 
 #: replication/walsender.c:922
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "이 서버의 시작 위치: 타임라인 %u, 위치 %X/%X"
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "이 서버의 시작 위치: 타임라인 %u, 위치 %X/%08X"
 
 #: replication/walsender.c:966
 #, c-format
 msgid ""
-"requested starting point %X/%X is ahead of the WAL flush position of this "
-"server %X/%X"
-msgstr "%X/%X 위치는 서버의 %X/%X 보다 미래의 것입니다."
+"requested starting point %X/%08X is ahead of the WAL flush position of this "
+"server %X/%08X"
+msgstr "%X/%08X 위치는 서버의 %X/%08X 보다 미래의 것입니다."
 
 #: replication/walsender.c:1160
 #, c-format
diff --git a/src/backend/po/pl.po b/src/backend/po/pl.po
index 3ac9d0451c9..6d9e9b75338 100644
--- a/src/backend/po/pl.po
+++ b/src/backend/po/pl.po
@@ -1515,15 +1515,15 @@ msgstr "Niepowodzenie podczas rezerwowania procesora odczytu WAL."
 
 #: access/transam/twophase.c:1314
 #, c-format
-#| msgid "could not read two-phase state from xlog at %X/%X"
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "nie można czytać stanu dwufazowego z WAL na %X/%X"
+#| msgid "could not read two-phase state from xlog at %X/%08X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "nie można czytać stanu dwufazowego z WAL na %X/%08X"
 
 #: access/transam/twophase.c:1322
 #, c-format
-#| msgid "expected two-phase state data is not present in xlog at %X/%X"
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "oczekiwanych danych stanu dwufazowego nie ma w WAL na %X/%X"
+#| msgid "expected two-phase state data is not present in xlog at %X/%08X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "oczekiwanych danych stanu dwufazowego nie ma w WAL na %X/%08X"
 
 #: access/transam/twophase.c:1557
 #, c-format
@@ -1756,8 +1756,8 @@ msgstr "nie można pisać do pliku dziennika %s do offsetu %u, długość %zu: %
 
 #: access/transam/xlog.c:2742
 #, c-format
-msgid "updated min recovery point to %X/%X on timeline %u"
-msgstr "zaktualizowano min punkt przywracania do %X/%X na osi czasu %u"
+msgid "updated min recovery point to %X/%08X on timeline %u"
+msgstr "zaktualizowano min punkt przywracania do %X/%08X na osi czasu %u"
 
 #: access/transam/xlog.c:3389
 #, c-format
@@ -1833,8 +1833,8 @@ msgstr "nowa linia czasu %u nie jest potomna dla linii czasu systemu bazy danych
 
 #: access/transam/xlog.c:4338
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "nowa linia czasu %u nie jest potomna dla linii czasu systemu bazy danych %u przed bieżącym punktem przywracania %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "nowa linia czasu %u nie jest potomna dla linii czasu systemu bazy danych %u przed bieżącym punktem przywracania %X/%08X"
 
 #: access/transam/xlog.c:4357
 #, c-format
@@ -2120,8 +2120,8 @@ msgstr "zatrzymanie odzyskiwania po osiągnięciu spójności"
 #: access/transam/xlog.c:5647
 #, c-format
 #| msgid "recovery stopping before abort of transaction %u, time %s"
-msgid "recovery stopping before WAL position (LSN) \"%X/%X\""
-msgstr "zatrzymanie odzyskiwania przed pozycją WAL (LSN) \"%X/%X\""
+msgid "recovery stopping before WAL position (LSN) \"%X/%08X\""
+msgstr "zatrzymanie odzyskiwania przed pozycją WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlog.c:5733
 #, c-format
@@ -2141,8 +2141,8 @@ msgstr "zatrzymanie odzyskiwania w punkcie przywrócenia \"%s\", czas %s"
 #: access/transam/xlog.c:5804
 #, c-format
 #| msgid "recovery stopping after abort of transaction %u, time %s"
-msgid "recovery stopping after WAL position (LSN) \"%X/%X\""
-msgstr "zatrzymanie odzyskiwania po pozycji WAL (LSN) \"%X/%X\""
+msgid "recovery stopping after WAL position (LSN) \"%X/%08X\""
+msgstr "zatrzymanie odzyskiwania po pozycji WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlog.c:5872
 #, c-format
@@ -2258,8 +2258,8 @@ msgstr "chwila początkowa odzyskiwania do \"%s\""
 #: access/transam/xlog.c:6327
 #, c-format
 #| msgid "starting point-in-time recovery to \"%s\""
-msgid "starting point-in-time recovery to WAL position (LSN) \"%X/%X\""
-msgstr "chwila początkowa odzyskiwania do pozycji WAL (LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL position (LSN) \"%X/%08X\""
+msgstr "chwila początkowa odzyskiwania do pozycji WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlog.c:6332
 #, c-format
@@ -2273,8 +2273,8 @@ msgstr "rozpoczęto odzyskiwanie archiwum"
 
 #: access/transam/xlog.c:6386 access/transam/xlog.c:6514
 #, c-format
-msgid "checkpoint record is at %X/%X"
-msgstr "rekord punktu kontrolnego jest w %X/%X"
+msgid "checkpoint record is at %X/%08X"
+msgstr "rekord punktu kontrolnego jest w %X/%08X"
 
 #: access/transam/xlog.c:6400
 #, c-format
@@ -2318,8 +2318,8 @@ msgstr "nie można odnaleźć poprawnego rekordu punktu kontrolnego"
 
 #: access/transam/xlog.c:6533
 #, c-format
-msgid "using previous checkpoint record at %X/%X"
-msgstr "użycie poprzedniego rekordu punktu kontrolnego w %X/%X"
+msgid "using previous checkpoint record at %X/%08X"
+msgstr "użycie poprzedniego rekordu punktu kontrolnego w %X/%08X"
 
 #: access/transam/xlog.c:6577
 #, c-format
@@ -2328,13 +2328,13 @@ msgstr "żądana linia czasu %u nie jest potomna dla historii tego procesu"
 
 #: access/transam/xlog.c:6579
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "Ostatni punkt kontrolny znajduje się na %X/%X osi czasu %u, ale w historii żądanej osi czasu serwer rozłączył się z tą osią na %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "Ostatni punkt kontrolny znajduje się na %X/%08X osi czasu %u, ale w historii żądanej osi czasu serwer rozłączył się z tą osią na %X/%08X."
 
 #: access/transam/xlog.c:6595
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "żądana linia czasu %u nie zawiera minimalnego punktu przywrócenia %X/%X na osi czasu %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "żądana linia czasu %u nie zawiera minimalnego punktu przywrócenia %X/%08X na osi czasu %u"
 
 #: access/transam/xlog.c:6626
 #, c-format
@@ -2378,8 +2378,8 @@ msgstr "inicjacja dla rezerwy dynamicznej"
 
 #: access/transam/xlog.c:7014
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "ponowienie uruchamia się w %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "ponowienie uruchamia się w %X/%08X"
 
 #: access/transam/xlog.c:7248
 #, c-format
@@ -2388,8 +2388,8 @@ msgstr "żądany punkt zatrzymania odtworzenia znajduje się przed punktem spój
 
 #: access/transam/xlog.c:7286
 #, c-format
-msgid "redo done at %X/%X"
-msgstr "ponowienie wykonane w %X/%X"
+msgid "redo done at %X/%08X"
+msgstr "ponowienie wykonane w %X/%08X"
 
 #: access/transam/xlog.c:7291 access/transam/xlog.c:9294
 #, c-format
@@ -2428,8 +2428,8 @@ msgstr "wybrany nowy ID linii czasowej: %u"
 
 #: access/transam/xlog.c:7839
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "stan spójnego odzyskania osiągnięty w %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "stan spójnego odzyskania osiągnięty w %X/%08X"
 
 #: access/transam/xlog.c:8031
 #, c-format
@@ -2529,18 +2529,18 @@ msgstr "pominięcie punktu restartu, odzyskiwanie już się zakończyło"
 
 #: access/transam/xlog.c:9116
 #, c-format
-msgid "skipping restartpoint, already performed at %X/%X"
-msgstr "pominięcie punktu restartu, wykonano już w %X/%X"
+msgid "skipping restartpoint, already performed at %X/%08X"
+msgstr "pominięcie punktu restartu, wykonano już w %X/%08X"
 
 #: access/transam/xlog.c:9292
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "punkt restartu odzyskiwania w %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "punkt restartu odzyskiwania w %X/%08X"
 
 #: access/transam/xlog.c:9428
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "punkt przywrócenia \"%s\" utworzony w %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "punkt przywrócenia \"%s\" utworzony w %X/%08X"
 
 #: access/transam/xlog.c:9558
 #, c-format
@@ -2554,8 +2554,8 @@ msgstr "nieoczekiwany ID linii czasu %u (po %u) w rekordzie punktu kontrolnego"
 
 #: access/transam/xlog.c:9583
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "nieoczekiwany ID linii czasu %u w rekordzie punktu kontrolnego, przed osiągnięciem minimalnego punktu przywrócenia %X/%X na linii czasu %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "nieoczekiwany ID linii czasu %u w rekordzie punktu kontrolnego, przed osiągnięciem minimalnego punktu przywrócenia %X/%08X na linii czasu %u"
 
 #: access/transam/xlog.c:9658
 #, c-format
@@ -2737,9 +2737,9 @@ msgstr "archiwizacja WAL nie jest włączona; musisz upewnić się, że wszystki
 #. translator: %s is a WAL record description
 #: access/transam/xlog.c:11319
 #, c-format
-#| msgid "xlog redo at %X/%X for %s"
-msgid "WAL redo at %X/%X for %s"
-msgstr "ponowienie WAL na %X/%X dla %s"
+#| msgid "xlog redo at %X/%08X for %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "ponowienie WAL na %X/%08X dla %s"
 
 #: access/transam/xlog.c:11368
 #, c-format
@@ -2940,48 +2940,48 @@ msgstr "Funkcje kontroli odzyskiwania mogą być wykonywane tylko w trakcie odzy
 
 #: access/transam/xlogreader.c:276
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "niepoprawne przesunięcie rekordu w %X/%X"
+msgid "invalid record offset at %X/%08X"
+msgstr "niepoprawne przesunięcie rekordu w %X/%08X"
 
 #: access/transam/xlogreader.c:284
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "wymagany kontrekord w %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "wymagany kontrekord w %X/%08X"
 
 #: access/transam/xlogreader.c:325 access/transam/xlogreader.c:625
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "niepoprawna długość rekordu w %X/%X: oczekiwana %u, jest %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "niepoprawna długość rekordu w %X/%08X: oczekiwana %u, jest %u"
 
 #: access/transam/xlogreader.c:340
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "za duża długość rekordu %u w %X/%X"
+msgid "record length %u at %X/%08X too long"
+msgstr "za duża długość rekordu %u w %X/%08X"
 
 #: access/transam/xlogreader.c:381
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "brak flagi kontrekordu na %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "brak flagi kontrekordu na %X/%08X"
 
 #: access/transam/xlogreader.c:394
 #, c-format
-msgid "invalid contrecord length %u at %X/%X"
-msgstr "niepoprawna długość kontrekordu %u na %X/%X"
+msgid "invalid contrecord length %u at %X/%08X"
+msgstr "niepoprawna długość kontrekordu %u na %X/%08X"
 
 #: access/transam/xlogreader.c:633
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "niepoprawny ID menażera zasobów %u w %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "niepoprawny ID menażera zasobów %u w %X/%08X"
 
 #: access/transam/xlogreader.c:647 access/transam/xlogreader.c:664
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "rekord z niepoprawnym poprz-linkiem %X/%X w %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "rekord z niepoprawnym poprz-linkiem %X/%08X w %X/%08X"
 
 #: access/transam/xlogreader.c:701
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "niepoprawna suma kontrolna danych menadżera zasobów w rekordzie w %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "niepoprawna suma kontrolna danych menadżera zasobów w rekordzie w %X/%08X"
 
 #: access/transam/xlogreader.c:734
 #, c-format
@@ -3010,8 +3010,8 @@ msgstr "plik WAL pochodzi z innego systemu bazy danych: niepoprawny XLOG_BLCKSZ
 
 #: access/transam/xlogreader.c:813
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "nieoczekiwany adrstrony %X/%X w segmencie dziennika %s, przesunięcie %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "nieoczekiwany adrstrony %X/%08X w segmencie dziennika %s, przesunięcie %u"
 
 #: access/transam/xlogreader.c:838
 #, c-format
@@ -3020,58 +3020,58 @@ msgstr "nieoczekiwany ID linii czasu %u (po %u) w segmencie dziennika %s, przesu
 
 #: access/transam/xlogreader.c:1083
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "poza porządkiem block_id %u na %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "poza porządkiem block_id %u na %X/%08X"
 
 #: access/transam/xlogreader.c:1106
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA jest ustawione, ale nie załączono danych na %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA jest ustawione, ale nie załączono danych na %X/%08X"
 
 #: access/transam/xlogreader.c:1113
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA nie jest ustawione, długość danych to %u na %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA nie jest ustawione, długość danych to %u na %X/%08X"
 
 #: access/transam/xlogreader.c:1149
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE jest ustawione, ale przesunięcie dziury %u długości %u blok obrazu o długości %u na %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE jest ustawione, ale przesunięcie dziury %u długości %u blok obrazu o długości %u na %X/%08X"
 
 #: access/transam/xlogreader.c:1165
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE nie jest ustawione, ale przesunięcie dziury %u o długości %u na %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE nie jest ustawione, ale przesunięcie dziury %u o długości %u na %X/%08X"
 
 #: access/transam/xlogreader.c:1180
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED jest ustawione, ale blok obrazu o długości %u na %X/%X"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED jest ustawione, ale blok obrazu o długości %u na %X/%08X"
 
 #: access/transam/xlogreader.c:1195
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ani BKPIMAGE_HAS_HOLE ani BKPIMAGE_IS_COMPRESSED nie jest ustawione, ale długość bloku obrazu to %u na %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ani BKPIMAGE_HAS_HOLE ani BKPIMAGE_IS_COMPRESSED nie jest ustawione, ale długość bloku obrazu to %u na %X/%08X"
 
 #: access/transam/xlogreader.c:1211
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL jest ustawione ale brak poprzedniej rel na %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL jest ustawione ale brak poprzedniej rel na %X/%08X"
 
 #: access/transam/xlogreader.c:1223
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "niepoprawny block_id %u na %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "niepoprawny block_id %u na %X/%08X"
 
 #: access/transam/xlogreader.c:1291
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "rekord o niepoprawnej długości w %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "rekord o niepoprawnej długości w %X/%08X"
 
 #: access/transam/xlogreader.c:1380
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "niepoprawny skompresowany obraz na %X/%X, blok %d"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "niepoprawny skompresowany obraz na %X/%08X, blok %d"
 
 #: access/transam/xlogutils.c:747 replication/walsender.c:2345
 #, c-format
@@ -17092,13 +17092,13 @@ msgstr "początek dekodowania logicznego do gniazda \"%s\""
 
 #: replication/logical/logical.c:392
 #, c-format
-msgid "streaming transactions committing after %X/%X, reading WAL from %X/%X"
-msgstr "zatwierdzenie transakcji przesyłania po %X/%X, odczyt WAL od %X/%X"
+msgid "streaming transactions committing after %X/%08X, reading WAL from %X/%08X"
+msgstr "zatwierdzenie transakcji przesyłania po %X/%08X, odczyt WAL od %X/%08X"
 
 #: replication/logical/logical.c:527
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "gniazdo \"%s\", wtyczka wyjścia \"%s\", w wywołaniu zwrotnym %s, powiązana LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "gniazdo \"%s\", wtyczka wyjścia \"%s\", w wywołaniu zwrotnym %s, powiązana LSN %X/%08X"
 
 #: replication/logical/logical.c:534
 #, c-format
@@ -17296,8 +17296,8 @@ msgstr[2] "wyeksportowano logicznie dekodowaną migawkę: \"%s\" z %u IDami tran
 #: replication/logical/snapbuild.c:935 replication/logical/snapbuild.c:1300
 #: replication/logical/snapbuild.c:1843
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "dekodowanie logiczne napotkało punkt zgodności na %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "dekodowanie logiczne napotkało punkt zgodności na %X/%08X"
 
 #: replication/logical/snapbuild.c:937
 #, c-format
@@ -17311,8 +17311,8 @@ msgstr "Nie ma już aktywnych transakcji."
 
 #: replication/logical/snapbuild.c:1364
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "dekodowanie logiczne napotkało początkowy punkt wyjścia na %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "dekodowanie logiczne napotkało początkowy punkt wyjścia na %X/%08X"
 
 #: replication/logical/snapbuild.c:1366
 #, c-format
@@ -17664,13 +17664,13 @@ msgstr "najwyższa linia czasu %u podstawowego jest poza linią czasu odzyskiwan
 
 #: replication/walreceiver.c:388
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "rozpoczęto przesyłanie WAL z podstawowego na %X/%X na linii czasu %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "rozpoczęto przesyłanie WAL z podstawowego na %X/%08X na linii czasu %u"
 
 #: replication/walreceiver.c:393
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "ponownie rozpoczęto przesyłanie WAL na %X/%X na linii czasu %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "ponownie rozpoczęto przesyłanie WAL na %X/%08X na linii czasu %u"
 
 #: replication/walreceiver.c:422
 #, c-format
@@ -17684,8 +17684,8 @@ msgstr "replikacja zakończona przez serwer podstawowy"
 
 #: replication/walreceiver.c:460
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "Osiągnięto koniec WAL na linii czasu %u na %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "Osiągnięto koniec WAL na linii czasu %u na %X/%08X."
 
 #: replication/walreceiver.c:555
 #, c-format
@@ -17729,18 +17729,18 @@ msgstr "nie można użyć gniazda replikacji logicznej do dekodowania fizycznego
 
 #: replication/walsender.c:603
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "żądanego punktu początku %X/%X linii czasu %u nie ma w historii tego serwera"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "żądanego punktu początku %X/%08X linii czasu %u nie ma w historii tego serwera"
 
 #: replication/walsender.c:607
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "Historia tego serwera oddzieliła się od osi czasu %u na %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "Historia tego serwera oddzieliła się od osi czasu %u na %X/%08X."
 
 #: replication/walsender.c:652
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "żądany punkt początku %X/%X jest przed pozycją opróżnienia WAL tego serwera %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "żądany punkt początku %X/%08X jest przed pozycją opróżnienia WAL tego serwera %X/%08X"
 
 #: replication/walsender.c:885
 #, c-format
@@ -25412,8 +25412,8 @@ msgstr "nie można importować migawki z innej bazy danych"
 #~ msgid "invalid value for recovery parameter \"recovery_target\""
 #~ msgstr "nieprawidłowa wartość dla parametru naprawczego \"recovery_target\""
 
-#~ msgid "redo record is at %X/%X; shutdown %s"
-#~ msgstr "rekord ponowienia w %X/%X; zamknięcie %s"
+#~ msgid "redo record is at %X/%08X; shutdown %s"
+#~ msgstr "rekord ponowienia w %X/%08X; zamknięcie %s"
 
 #~ msgid "next transaction ID: %u/%u; next OID: %u"
 #~ msgstr "ID następnej transakcji: %u/%u; następny OID: %u"
@@ -25538,8 +25538,8 @@ msgstr "nie można importować migawki z innej bazy danych"
 #~ msgid "Only superusers can use untrusted languages."
 #~ msgstr "Jedynie superużytkownik może używać niezaufanych języków."
 
-#~ msgid "invalid record length at %X/%X"
-#~ msgstr "niepoprawna długość rekordu w %X/%X"
+#~ msgid "invalid record length at %X/%08X"
+#~ msgstr "niepoprawna długość rekordu w %X/%08X"
 
 #~ msgid "must be superuser to control recovery"
 #~ msgstr "musisz być superużytkownikiem by kontrolować odzyskiwanie"
diff --git a/src/backend/po/pt_BR.po b/src/backend/po/pt_BR.po
index 21c2741e2bd..5beeac098f2 100644
--- a/src/backend/po/pt_BR.po
+++ b/src/backend/po/pt_BR.po
@@ -2005,18 +2005,18 @@ msgstr "Falha ao alocar um processo de leitura do WAL."
 
 #: access/transam/twophase.c:1423
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "não foi possível ler o estado de duas-fases do WAL em %X/%X: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "não foi possível ler o estado de duas-fases do WAL em %X/%08X: %s"
 
 #: access/transam/twophase.c:1428
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "não foi possível ler o estado de duas-fases do WAL em %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "não foi possível ler o estado de duas-fases do WAL em %X/%08X"
 
 #: access/transam/twophase.c:1436
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "os dados esperados do estado de duas-fases não estão presentes no WAL em %X/%X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "os dados esperados do estado de duas-fases não estão presentes no WAL em %X/%08X"
 
 #: access/transam/twophase.c:1732
 #, c-format
@@ -2072,8 +2072,8 @@ msgstr "não foi possível recuperar o arquivo de estado de duas-fases para a tr
 
 #: access/transam/twophase.c:2502
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
-msgstr "O arquivo de estado de duas-fases foi encontrado no registro do WAL %X/%X, mas essa transação já foi restaurada do disco."
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
+msgstr "O arquivo de estado de duas-fases foi encontrado no registro do WAL %X/%08X, mas essa transação já foi restaurada do disco."
 
 #: access/transam/twophase.c:2510 jit/jit.c:205 utils/fmgr/dfmgr.c:209
 #: utils/fmgr/dfmgr.c:415
@@ -2227,8 +2227,8 @@ msgstr "não é possível ter mais do que 2^32-1 subtransações em uma transaç
 
 #: access/transam/xlog.c:1468
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "requisitado descarregar além do final do WAL gerado; requisitado %X/%X, posição atual %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "requisitado descarregar além do final do WAL gerado; requisitado %X/%08X, posição atual %X/%08X"
 
 #: access/transam/xlog.c:2230
 #, c-format
@@ -2527,12 +2527,12 @@ msgstr ""
 
 #: access/transam/xlog.c:6307
 #, c-format
-msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 
 #: access/transam/xlog.c:6330
 #, c-format
-msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 
 #: access/transam/xlog.c:6768
@@ -2542,8 +2542,8 @@ msgstr "atividade de WAL simultânea enquanto o sistema de banco de dados está
 
 #: access/transam/xlog.c:7329
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "ponto de reinício de recuperação em %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "ponto de reinício de recuperação em %X/%08X"
 
 #: access/transam/xlog.c:7331
 #, c-format
@@ -2552,8 +2552,8 @@ msgstr "A última transação completada ocorreu às %s (momento de registro)."
 
 #: access/transam/xlog.c:7579
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "ponto de restauração \"%s\" criado em %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "ponto de restauração \"%s\" criado em %X/%08X"
 
 #: access/transam/xlog.c:7786
 #, c-format
@@ -2800,53 +2800,53 @@ msgstr ""
 
 #: access/transam/xlogreader.c:621
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "deslocamento de registro inválido em %X/%X: esperado pelo menos %u, obtido %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "deslocamento de registro inválido em %X/%08X: esperado pelo menos %u, obtido %u"
 
 #: access/transam/xlogreader.c:630
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord é solicitado por %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord é solicitado por %X/%08X"
 
 #: access/transam/xlogreader.c:671 access/transam/xlogreader.c:1136
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "comprimento de registro inválido em %X/%X: esperado pelo menos %u, obtido %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "comprimento de registro inválido em %X/%08X: esperado pelo menos %u, obtido %u"
 
 #: access/transam/xlogreader.c:760
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "não há marcação contrecord em %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "não há marcação contrecord em %X/%08X"
 
 #: access/transam/xlogreader.c:773
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "comprimento de contrecord inválido %u (esperado %lld) em %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "comprimento de contrecord inválido %u (esperado %lld) em %X/%08X"
 
 #: access/transam/xlogreader.c:1144
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ID do gerenciador de recursos inválido %u em %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ID do gerenciador de recursos inválido %u em %X/%08X"
 
 #: access/transam/xlogreader.c:1157 access/transam/xlogreader.c:1173
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "registro com prev-link %X/%X incorreto em %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "registro com prev-link %X/%08X incorreto em %X/%08X"
 
 #: access/transam/xlogreader.c:1211
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "soma de verificação do gerenciador de recursos é incorreta no registro em %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "soma de verificação do gerenciador de recursos é incorreta no registro em %X/%08X"
 
 #: access/transam/xlogreader.c:1245
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "número mágico inválido %04X no segmento do WAL %s, LSN %X/%X, deslocamento %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "número mágico inválido %04X no segmento do WAL %s, LSN %X/%08X, deslocamento %u"
 
 #: access/transam/xlogreader.c:1260 access/transam/xlogreader.c:1302
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "bits de informação inválidos %04X no segmento do WAL %s, LSN %X/%X, deslocamento %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "bits de informação inválidos %04X no segmento do WAL %s, LSN %X/%08X, deslocamento %u"
 
 #: access/transam/xlogreader.c:1276
 #, c-format
@@ -2865,63 +2865,63 @@ msgstr "arquivo do WAL é de um sistema de banco de dados diferente: XLOG_BLCKSZ
 
 #: access/transam/xlogreader.c:1322
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "endereço de página não esperado %X/%X no segmento do WAL %s, LSN %X/%X, deslocamento %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "endereço de página não esperado %X/%08X no segmento do WAL %s, LSN %X/%08X, deslocamento %u"
 
 #: access/transam/xlogreader.c:1348
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ID da linha do tempo fora de sequência %u (após %u) no segmento do WAL %s, LSN %X/%X, deslocamento %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ID da linha do tempo fora de sequência %u (após %u) no segmento do WAL %s, LSN %X/%08X, deslocamento %u"
 
 #: access/transam/xlogreader.c:1754
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u fora de ordem em %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u fora de ordem em %X/%08X"
 
 #: access/transam/xlogreader.c:1778
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA definido mas nenhum dado incluído em %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA definido mas nenhum dado incluído em %X/%08X"
 
 #: access/transam/xlogreader.c:1785
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA não foi definido mas tamanho do dado é %u em %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA não foi definido mas tamanho do dado é %u em %X/%08X"
 
 #: access/transam/xlogreader.c:1821
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE definido mas posição do espaço livre %u tamanho %u tamanho da imagem do bloco %u em %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE definido mas posição do espaço livre %u tamanho %u tamanho da imagem do bloco %u em %X/%08X"
 
 #: access/transam/xlogreader.c:1837
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE não foi definido mas posição do espaço livre %u tamanho %u em %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE não foi definido mas posição do espaço livre %u tamanho %u em %X/%08X"
 
 #: access/transam/xlogreader.c:1851
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED definido, mas bloqueia o comprimento da imagem %u em %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED definido, mas bloqueia o comprimento da imagem %u em %X/%08X"
 
 #: access/transam/xlogreader.c:1866
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "nem BKPIMAGE_HAS_HOLE nem BKPIMAGE_COMPRESSED definidos, mas o comprimento da imagem do bloco é %u em %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "nem BKPIMAGE_HAS_HOLE nem BKPIMAGE_COMPRESSED definidos, mas o comprimento da imagem do bloco é %u em %X/%08X"
 
 #: access/transam/xlogreader.c:1882
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL definido mas não há relação anterior em %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL definido mas não há relação anterior em %X/%08X"
 
 #: access/transam/xlogreader.c:1894
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u inválido em %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u inválido em %X/%08X"
 
 #: access/transam/xlogreader.c:1961
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "registro com tamanho inválido em %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "registro com tamanho inválido em %X/%08X"
 
 #: access/transam/xlogreader.c:1987
 #, c-format
@@ -2930,28 +2930,28 @@ msgstr "não foi possível localizar o bloco de cópia de segurança com ID %d n
 
 #: access/transam/xlogreader.c:2071
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
 msgstr ""
 
 #: access/transam/xlogreader.c:2078
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "não foi possível restaurar a imagem em %X/%X com estado não válido, bloco %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "não foi possível restaurar a imagem em %X/%08X com estado não válido, bloco %d"
 
 #: access/transam/xlogreader.c:2105 access/transam/xlogreader.c:2122
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr ""
 
 #: access/transam/xlogreader.c:2131
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
 msgstr ""
 
 #: access/transam/xlogreader.c:2139
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "não foi possível descomprimir a imagem em %X/%X, bloco %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "não foi possível descomprimir a imagem em %X/%08X, bloco %d"
 
 #: access/transam/xlogrecovery.c:547
 #, c-format
@@ -2975,8 +2975,8 @@ msgstr "iniciando recuperação de ponto no tempo para \"%s\""
 
 #: access/transam/xlogrecovery.c:562
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "iniciando recuperação de ponto no tempo para o local do WAL (LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "iniciando recuperação de ponto no tempo para o local do WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:566
 #, c-format
@@ -3038,13 +3038,13 @@ msgstr "linha do tempo solicitada %u não é descendente do histórico do servid
 
 #: access/transam/xlogrecovery.c:812
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "Último ponto de controle está em %X/%X na linha do tempo %u, mas no histórico da linha do tempo solicitada, o servidor bifurcou daquela linha do tempo em %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "Último ponto de controle está em %X/%08X na linha do tempo %u, mas no histórico da linha do tempo solicitada, o servidor bifurcou daquela linha do tempo em %X/%08X."
 
 #: access/transam/xlogrecovery.c:826
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "linha do tempo solicitada %u não contém o ponto de recuperação mínimo %X/%X na linha do tempo %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "linha do tempo solicitada %u não contém o ponto de recuperação mínimo %X/%08X na linha do tempo %u"
 
 #: access/transam/xlogrecovery.c:854
 #, c-format
@@ -3125,12 +3125,12 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:1662
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "redo inicia em %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "redo inicia em %X/%08X"
 
 #: access/transam/xlogrecovery.c:1675
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:1767
@@ -3140,8 +3140,8 @@ msgstr "ponto de parada de recuperação solicitado está antes do ponto de recu
 
 #: access/transam/xlogrecovery.c:1799
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "refazer feito em %X/%X uso do sistema: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "refazer feito em %X/%08X uso do sistema: %s"
 
 #: access/transam/xlogrecovery.c:1805
 #, c-format
@@ -3160,7 +3160,7 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2019
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
 msgstr ""
 
 #: access/transam/xlogrecovery.c:2086
@@ -3180,14 +3180,14 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2163
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "estado de recuperação consistente alcançado em %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "estado de recuperação consistente alcançado em %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2201
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "redo WAL em %X/%X para %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "redo WAL em %X/%08X para %s"
 
 #: access/transam/xlogrecovery.c:2299
 #, c-format
@@ -3201,8 +3201,8 @@ msgstr "ID da linha do tempo não esperado %u (após %u) no registro do ponto de
 
 #: access/transam/xlogrecovery.c:2324
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "ID da linha do tempo não esperado %u no registro do ponto de verificação, antes de atingir o ponto de recuperação mínimo %X/%X na linha do tempo %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "ID da linha do tempo não esperado %u no registro do ponto de verificação, antes de atingir o ponto de recuperação mínimo %X/%08X na linha do tempo %u"
 
 #: access/transam/xlogrecovery.c:2508 access/transam/xlogrecovery.c:2784
 #, c-format
@@ -3211,8 +3211,8 @@ msgstr "recuperação parada após atingir consistência"
 
 #: access/transam/xlogrecovery.c:2529
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "recuperação parando antes do local do WAL (LSN) \"%X/%X\""
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "recuperação parando antes do local do WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2619
 #, c-format
@@ -3231,8 +3231,8 @@ msgstr "recuperação parada no ponto de restauração \"%s\", tempo %s"
 
 #: access/transam/xlogrecovery.c:2697
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "recuperação parando após a localização do WAL (LSN) \"%X/%X\""
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "recuperação parando após a localização do WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2764
 #, c-format
@@ -3266,18 +3266,18 @@ msgstr "Execute pg_wal_replay_resume() para continuar."
 
 #: access/transam/xlogrecovery.c:3121
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ID da linha do tempo não esperado %u no segmento do WAL %s, LSN %X/%X, deslocamento %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ID da linha do tempo não esperado %u no segmento do WAL %s, LSN %X/%08X, deslocamento %u"
 
 #: access/transam/xlogrecovery.c:3329
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "não foi possível ler o segmento do WAL %s, LSN %X/%X, deslocamento %u: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "não foi possível ler o segmento do WAL %s, LSN %X/%08X, deslocamento %u: %m"
 
 #: access/transam/xlogrecovery.c:3336
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
-msgstr "não foi possível ler do segmento do WAL %s, LSN %X/%X, deslocamento %u: leitura %d de %zu"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
+msgstr "não foi possível ler do segmento do WAL %s, LSN %X/%08X, deslocamento %u: leitura %d de %zu"
 
 #: access/transam/xlogrecovery.c:3976
 #, c-format
@@ -3311,8 +3311,8 @@ msgstr "nova linha do tempo %u não é descendente da linha do tempo %u do siste
 
 #: access/transam/xlogrecovery.c:4074
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "nova linha do tempo %u bifurcou da linha do tempo %u do sistema de banco de dados antes do ponto de recuperação atual %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "nova linha do tempo %u bifurcou da linha do tempo %u do sistema de banco de dados antes do ponto de recuperação atual %X/%08X"
 
 #: access/transam/xlogrecovery.c:4093
 #, c-format
@@ -9902,7 +9902,7 @@ msgstr ""
 
 #: commands/subscriptioncmds.c:1428
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
 msgstr ""
 
 #: commands/subscriptioncmds.c:1513
@@ -20267,13 +20267,13 @@ msgstr "iniciando decodificação lógica para entrada \"%s\""
 
 #: replication/logical/logical.c:610
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Fluxo de transações efetivadas após %X/%X, lendo WAL de %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Fluxo de transações efetivadas após %X/%08X, lendo WAL de %X/%08X."
 
 #: replication/logical/logical.c:758
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "entrada \"%s\", plugin de saída \"%s\", na função %s, LSN associado %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "entrada \"%s\", plugin de saída \"%s\", na função %s, LSN associado %X/%08X"
 
 #: replication/logical/logical.c:764
 #, c-format
@@ -20371,8 +20371,8 @@ msgstr "não foi possível encontrar um estado de replicação livre, aumente ma
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "estado de replicação recuperado do nó %d para %X/%X"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "estado de replicação recuperado do nó %d para %X/%08X"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -20485,8 +20485,8 @@ msgstr[1] "instantâneo exportado de decodificação lógica: \"%s\" com %u IDs
 #: replication/logical/snapbuild.c:1388 replication/logical/snapbuild.c:1480
 #: replication/logical/snapbuild.c:1996
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "decodificação lógica encontrou ponto consistente em %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "decodificação lógica encontrou ponto consistente em %X/%08X"
 
 #: replication/logical/snapbuild.c:1390
 #, c-format
@@ -20495,8 +20495,8 @@ msgstr "Não há transações em execução."
 
 #: replication/logical/snapbuild.c:1432
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "decodificação lógica encontrou ponto de partida inicial em %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "decodificação lógica encontrou ponto de partida inicial em %X/%08X"
 
 #: replication/logical/snapbuild.c:1434 replication/logical/snapbuild.c:1458
 #, c-format
@@ -20505,8 +20505,8 @@ msgstr ""
 
 #: replication/logical/snapbuild.c:1456
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "a decodificação lógica encontrou um ponto consistente inicial em %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "a decodificação lógica encontrou um ponto consistente inicial em %X/%08X"
 
 #: replication/logical/snapbuild.c:1482
 #, c-format
@@ -20685,12 +20685,12 @@ msgstr "a subscrição \"%s\" foi desativada devido a um erro"
 
 #: replication/logical/worker.c:4805
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "a replicação lógica começa a saltar a transação em LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "a replicação lógica começa a saltar a transação em LSN %X/%08X"
 
 #: replication/logical/worker.c:4819
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
 msgstr ""
 
 #: replication/logical/worker.c:4901
@@ -20700,7 +20700,7 @@ msgstr "skip-LSN da subscrição \"%s\" apagado"
 
 #: replication/logical/worker.c:4902
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
 msgstr ""
 
 #: replication/logical/worker.c:4928
@@ -20715,7 +20715,7 @@ msgstr ""
 
 #: replication/logical/worker.c:4937
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 
 #: replication/logical/worker.c:4948
@@ -20725,7 +20725,7 @@ msgstr ""
 
 #: replication/logical/worker.c:4955
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 
 #: replication/logical/worker.c:4966
@@ -20735,7 +20735,7 @@ msgstr ""
 
 #: replication/logical/worker.c:4974
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 
 #: replication/pgoutput/pgoutput.c:317
@@ -20866,8 +20866,8 @@ msgstr ""
 
 #: replication/slot.c:1271
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
 msgstr[0] ""
 msgstr[1] ""
 
@@ -20952,7 +20952,7 @@ msgstr ""
 
 #: replication/slotfuncs.c:641
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
 msgstr ""
 
 #: replication/slotfuncs.c:748
@@ -21052,13 +21052,13 @@ msgstr "maior linha do tempo %u do servidor principal está atrás da linha do t
 
 #: replication/walreceiver.c:417
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "iniciado fluxo de WAL do principal em %X/%X na linha do tempo %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "iniciado fluxo de WAL do principal em %X/%08X na linha do tempo %u"
 
 #: replication/walreceiver.c:421
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "reiniciado fluxo de WAL em %X/%X na linha do tempo %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "reiniciado fluxo de WAL em %X/%08X na linha do tempo %u"
 
 #: replication/walreceiver.c:457
 #, c-format
@@ -21072,8 +21072,8 @@ msgstr "replicação terminada pelo servidor principal"
 
 #: replication/walreceiver.c:502
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "Fim do WAL alcançado na linha do tempo %u em %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "Fim do WAL alcançado na linha do tempo %u em %X/%08X."
 
 #: replication/walreceiver.c:592
 #, c-format
@@ -21122,18 +21122,18 @@ msgstr "não é possível utilizar uma entrada de replicação lógica para repl
 
 #: replication/walsender.c:770
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "ponto de início solicitado %X/%X na linha do tempo %u não está no histórico deste servidor"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "ponto de início solicitado %X/%08X na linha do tempo %u não está no histórico deste servidor"
 
 #: replication/walsender.c:773
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "O histórico deste servidor bifurcou da linha do tempo %u em %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "O histórico deste servidor bifurcou da linha do tempo %u em %X/%08X."
 
 #: replication/walsender.c:817
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "ponto de início solicitado %X/%X está a frente da posição de escrita do WAL neste servidor %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "ponto de início solicitado %X/%08X está a frente da posição de escrita do WAL neste servidor %X/%08X"
 
 #: replication/walsender.c:1010
 #, c-format
diff --git a/src/backend/po/ru.po b/src/backend/po/ru.po
index f8e7152cd84..edf90b225aa 100644
--- a/src/backend/po/ru.po
+++ b/src/backend/po/ru.po
@@ -2504,20 +2504,20 @@ msgstr "Не удалось разместить обработчик журна
 
 #: access/transam/twophase.c:1429
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%X: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%08X: %s"
 
 #: access/transam/twophase.c:1434
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "не удалось прочитать состояние 2PC из WAL в позиции %X/%08X"
 
 #: access/transam/twophase.c:1442
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
 msgstr ""
 "ожидаемые данные состояния двухфазной фиксации отсутствуют в WAL в позиции "
-"%X/%X"
+"%X/%08X"
 
 #: access/transam/twophase.c:1745
 #, c-format
@@ -2580,10 +2580,10 @@ msgstr "не удалось восстановить файл состояния
 #: access/transam/twophase.c:2516
 #, c-format
 msgid ""
-"Two-phase state file has been found in WAL record %X/%X, but this "
+"Two-phase state file has been found in WAL record %X/%08X, but this "
 "transaction has already been restored from disk."
 msgstr ""
-"Для WAL-записи %X/%X найден файл состояния двухфазной фиксации, но эта "
+"Для WAL-записи %X/%08X найден файл состояния двухфазной фиксации, но эта "
 "транзакция уже была восстановлена с диска."
 
 #: access/transam/twophase.c:2524 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209
@@ -2776,20 +2776,20 @@ msgstr "в одной транзакции не может быть больше
 #: access/transam/xlog.c:1542
 #, c-format
 msgid ""
-"request to flush past end of generated WAL; request %X/%X, current position "
-"%X/%X"
+"request to flush past end of generated WAL; request %X/%08X, current position "
+"%X/%08X"
 msgstr ""
 "запрос на сброс данных за концом сгенерированного WAL; запрошена позиция %X/"
-"%X, текущая позиция %X/%X"
+"%X, текущая позиция %X/%08X"
 
 #: access/transam/xlog.c:1769
 #, c-format
 msgid ""
-"cannot read past end of generated WAL: requested %X/%X, current position %X/"
+"cannot read past end of generated WAL: requested %X/%08X, current position %X/"
 "%X"
 msgstr ""
-"чтение за концом сгенерированного WAL невозможно: запрошена позиция %X/%X, "
-"текущая позиция %X/%X"
+"чтение за концом сгенерированного WAL невозможно: запрошена позиция %X/%08X, "
+"текущая позиция %X/%08X"
 
 #: access/transam/xlog.c:2210 access/transam/xlog.c:4501
 #, c-format
@@ -3189,13 +3189,13 @@ msgid ""
 "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d "
 "removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; "
 "sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 "точка перезапуска завершена: записано буферов: %d (%.1f%%); добавлено файлов "
 "WAL %d, удалено: %d, переработано: %d; запись=%ld.%03d сек., синхр.=%ld.%03d "
 "сек., всего=%ld.%03d сек.; синхронизировано_файлов=%d, самая_долгая_синхр."
 "=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d kB, ожидалось=%d kB; "
-"lsn=%X/%X, lsn redo=%X/%X"
+"lsn=%X/%08X, lsn redo=%X/%08X"
 
 # well-spelled: синхр
 #: access/transam/xlog.c:6751
@@ -3204,13 +3204,13 @@ msgid ""
 "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d "
 "removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; "
 "sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
+"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
 msgstr ""
 "контрольная точка завершена: записано буферов: %d (%.1f%%); добавлено файлов "
 "WAL %d, удалено: %d, переработано: %d; запись=%ld.%03d сек., синхр.=%ld.%03d "
 "сек., всего=%ld.%03d сек.; синхронизировано_файлов=%d, самая_долгая_синхр."
 "=%ld.%03d сек., средняя=%ld.%03d сек.; расстояние=%d kB, ожидалось=%d kB; "
-"lsn=%X/%X, lsn redo=%X/%X"
+"lsn=%X/%08X, lsn redo=%X/%08X"
 
 #: access/transam/xlog.c:7233
 #, c-format
@@ -3222,8 +3222,8 @@ msgstr ""
 
 #: access/transam/xlog.c:7818
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "точка перезапуска восстановления в позиции %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "точка перезапуска восстановления в позиции %X/%08X"
 
 #: access/transam/xlog.c:7820
 #, c-format
@@ -3232,8 +3232,8 @@ msgstr "Последняя завершённая транзакция была
 
 #: access/transam/xlog.c:8082
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "точка восстановления \"%s\" создана в позиции %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "точка восстановления \"%s\" создана в позиции %X/%08X"
 
 #: access/transam/xlog.c:8289
 #, c-format
@@ -3552,59 +3552,59 @@ msgstr ""
 
 #: access/transam/xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
 msgstr ""
-"неверное смещение записи в позиции %X/%X: ожидалось минимум %u, получено %u"
+"неверное смещение записи в позиции %X/%08X: ожидалось минимум %u, получено %u"
 
 #: access/transam/xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "в позиции %X/%X запрошено продолжение записи"
+msgid "contrecord is requested by %X/%08X"
+msgstr "в позиции %X/%08X запрошено продолжение записи"
 
 #: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
 msgstr ""
-"неверная длина записи в позиции %X/%X: ожидалось минимум %u, получено %u"
+"неверная длина записи в позиции %X/%08X: ожидалось минимум %u, получено %u"
 
 #: access/transam/xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "нет флага contrecord в позиции %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "нет флага contrecord в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "неверный ID менеджера ресурсов %u в позиции %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "неверный ID менеджера ресурсов %u в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "запись с неверной ссылкой назад %X/%X в позиции %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "запись с неверной ссылкой назад %X/%08X в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
 msgstr ""
 "некорректная контрольная сумма данных менеджера ресурсов в записи в позиции "
-"%X/%X"
+"%X/%08X"
 
 #: access/transam/xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr ""
-"неверное магическое число %04X в сегменте WAL %s, LSN %X/%X, смещение %u"
+"неверное магическое число %04X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr ""
-"неверные информационные биты %04X в сегменте WAL %s, LSN %X/%X, смещение %u"
+"неверные информационные биты %04X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: access/transam/xlogreader.c:1274
 #, c-format
@@ -3635,53 +3635,53 @@ msgstr ""
 
 #: access/transam/xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "неожиданный pageaddr %X/%X в сегменте WAL %s, LSN %X/%X, смещение %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "неожиданный pageaddr %X/%08X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: access/transam/xlogreader.c:1346
 #, c-format
 msgid ""
-"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, "
+"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, "
 "offset %u"
 msgstr ""
 "нарушение последовательности ID линии времени %u (после %u) в сегменте WAL "
-"%s, LSN %X/%X, смещение %u"
+"%s, LSN %X/%08X, смещение %u"
 
 #: access/transam/xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%08X нет"
 
 #: access/transam/xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr ""
-"BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X"
+"BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1816
 #, c-format
 msgid ""
 "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at "
-"%X/%X"
+"%X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u "
-"при длине образа блока %u в позиции %X/%X"
+"при длине образа блока %u в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина "
-"%u в позиции %X/%X"
+"%u в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_COMPRESSED установлен, но длина образа блока равна %u в позиции %X/"
 "%X"
@@ -3690,27 +3690,27 @@ msgstr ""
 #, c-format
 msgid ""
 "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image "
-"length is %u at %X/%X"
+"length is %u at %X/%08X"
 msgstr ""
 "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_COMPRESSED не установлены, но длина образа "
-"блока равна %u в позиции %X/%X"
+"блока равна %u в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
 msgstr ""
 "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/"
 "%X"
 
 #: access/transam/xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "неверный идентификатор блока %u в позиции %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "неверный идентификатор блока %u в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "запись с неверной длиной в позиции %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "запись с неверной длиной в позиции %X/%08X"
 
 #: access/transam/xlogreader.c:1982
 #, c-format
@@ -3719,54 +3719,54 @@ msgstr "не удалось найти копию блока с ID %d в зап
 
 #: access/transam/xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X с указанным неверным блоком %d"
+"не удалось восстановить образ в позиции %X/%08X с указанным неверным блоком %d"
 
 #: access/transam/xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X с неверным состоянием, блок %d"
+"не удалось восстановить образ в позиции %X/%08X с неверным состоянием, блок %d"
 
 #: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with %s not supported by build, "
+"could not restore image at %X/%08X compressed with %s not supported by build, "
 "block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X, сжатый методом %s, который не "
+"не удалось восстановить образ в позиции %X/%08X, сжатый методом %s, который не "
 "поддерживается этой сборкой, блок %d"
 
 #: access/transam/xlogreader.c:2126
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with unknown method, block %d"
+"could not restore image at %X/%08X compressed with unknown method, block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X, сжатый неизвестным методом, "
+"не удалось восстановить образ в позиции %X/%08X, сжатый неизвестным методом, "
 "блок %d"
 
 #: access/transam/xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "не удалось развернуть образ в позиции %X/%X, блок %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "не удалось развернуть образ в позиции %X/%08X, блок %d"
 
 #: access/transam/xlogrecovery.c:617
 #, c-format
 msgid ""
-"starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on "
+"starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on "
 "timeline ID %u"
 msgstr ""
-"начинается восстановление копии с LSN redo %X/%X, LSN контрольной точки %X/"
+"начинается восстановление копии с LSN redo %X/%08X, LSN контрольной точки %X/"
 "%X, на линии времени %u"
 
 #: access/transam/xlogrecovery.c:649
 #, c-format
 msgid ""
-"could not find redo location %X/%X referenced by checkpoint record at %X/%X"
+"could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
 msgstr ""
-"не удалось найти положение REDO %X/%X, указанное в записи контрольной точки "
-"в %X/%X"
+"не удалось найти положение REDO %X/%08X, указанное в записи контрольной точки "
+"в %X/%08X"
 
 #: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662
 #, c-format
@@ -3786,8 +3786,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:660
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "не удалось найти нужную запись контрольной точки в %X/%X"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "не удалось найти нужную запись контрольной точки в %X/%08X"
 
 #: access/transam/xlogrecovery.c:690 commands/tablespace.c:664
 #, c-format
@@ -3811,13 +3811,13 @@ msgstr "Не удалось переименовать файл \"%s\" в \"%s\"
 
 #: access/transam/xlogrecovery.c:770
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "перезапуск восстановления копии с LSN redo %X/%X"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "перезапуск восстановления копии с LSN redo %X/%08X"
 
 #: access/transam/xlogrecovery.c:795
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "не удалось найти корректную запись контрольной точки в %X/%X"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "не удалось найти корректную запись контрольной точки в %X/%08X"
 
 #: access/transam/xlogrecovery.c:806
 #, c-format
@@ -3841,9 +3841,9 @@ msgstr "начинается восстановление точки во вре
 
 #: access/transam/xlogrecovery.c:821
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
 msgstr ""
-"начинается восстановление точки во времени до позиции в WAL (LSN) \"%X/%X\""
+"начинается восстановление точки во времени до позиции в WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:825
 #, c-format
@@ -3864,16 +3864,16 @@ msgstr "в истории сервера нет ответвления запр
 #: access/transam/xlogrecovery.c:851
 #, c-format
 msgid ""
-"Latest checkpoint is at %X/%X on timeline %u, but in the history of the "
-"requested timeline, the server forked off from that timeline at %X/%X."
+"Latest checkpoint is at %X/%08X on timeline %u, but in the history of the "
+"requested timeline, the server forked off from that timeline at %X/%08X."
 msgstr ""
-"Последняя контрольная точка: %X/%X на линии времени %u, но в истории "
-"запрошенной линии времени сервер ответвился с этой линии в %X/%X."
+"Последняя контрольная точка: %X/%08X на линии времени %u, но в истории "
+"запрошенной линии времени сервер ответвился с этой линии в %X/%08X."
 
 #: access/transam/xlogrecovery.c:865
 #, c-format
 msgid ""
-"requested timeline %u does not contain minimum recovery point %X/%X on "
+"requested timeline %u does not contain minimum recovery point %X/%08X on "
 "timeline %u"
 msgstr ""
 "запрошенная линия времени %u не содержит минимальную точку восстановления %X/"
@@ -3986,19 +3986,19 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:1717
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "в точке redo %X/%X обнаружена запись неожиданного типа"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "в точке redo %X/%08X обнаружена запись неожиданного типа"
 
 #: access/transam/xlogrecovery.c:1740
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "запись REDO начинается со смещения %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "запись REDO начинается со смещения %X/%08X"
 
 #: access/transam/xlogrecovery.c:1753
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
 msgstr ""
-"выполняется воспроизведение, прошло времени: %ld.%02d с, текущий LSN: %X/%X"
+"выполняется воспроизведение, прошло времени: %ld.%02d с, текущий LSN: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1843
 #, c-format
@@ -4009,8 +4009,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:1875
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "записи REDO обработаны до смещения %X/%X, нагрузка системы: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "записи REDO обработаны до смещения %X/%08X, нагрузка системы: %s"
 
 #: access/transam/xlogrecovery.c:1881
 #, c-format
@@ -4029,9 +4029,9 @@ msgstr "восстановление окончилось до достижен
 
 #: access/transam/xlogrecovery.c:2095
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
 msgstr ""
-"успешно пропущена отсутствующая запись contrecord в %X/%X, перезаписанная в "
+"успешно пропущена отсутствующая запись contrecord в %X/%08X, перезаписанная в "
 "%s"
 
 #: access/transam/xlogrecovery.c:2162
@@ -4056,19 +4056,19 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2217
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
-msgstr "завершено восстановление копии с LSN redo %X/%X и конечным LSN %X/%X"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
+msgstr "завершено восстановление копии с LSN redo %X/%08X и конечным LSN %X/%08X"
 
 #: access/transam/xlogrecovery.c:2247
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "согласованное состояние восстановления достигнуто в позиции %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "согласованное состояние восстановления достигнуто в позиции %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2285
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "запись REDO в WAL в позиции %X/%X для %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "запись REDO в WAL в позиции %X/%08X для %s"
 
 #: access/transam/xlogrecovery.c:2383
 #, c-format
@@ -4089,10 +4089,10 @@ msgstr "неожиданный ID линии времени %u (после %u) 
 #, c-format
 msgid ""
 "unexpected timeline ID %u in checkpoint record, before reaching minimum "
-"recovery point %X/%X on timeline %u"
+"recovery point %X/%08X on timeline %u"
 msgstr ""
 "неожиданный ID линии времени %u в записи контрольной точки, до достижения "
-"минимальной к. т. %X/%X на линии времени %u"
+"минимальной к. т. %X/%08X на линии времени %u"
 
 #: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868
 #, c-format
@@ -4102,8 +4102,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:2613
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "восстановление останавливается перед позицией в WAL (LSN) \"%X/%X\""
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "восстановление останавливается перед позицией в WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2703
 #, c-format
@@ -4124,8 +4124,8 @@ msgstr "восстановление останавливается в точк
 
 #: access/transam/xlogrecovery.c:2781
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "восстановление останавливается после позиции в WAL (LSN) \"%X/%X\""
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "восстановление останавливается после позиции в WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2848
 #, c-format
@@ -4161,21 +4161,21 @@ msgstr "Выполните pg_wal_replay_resume() для продолжения.
 
 #: access/transam/xlogrecovery.c:3205
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr ""
-"неожиданный ID линии времени %u в сегменте WAL %s, LSN %X/%X, смещение %u"
+"неожиданный ID линии времени %u в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: access/transam/xlogrecovery.c:3413
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "не удалось прочитать сегмент WAL %s, LSN %X/%X, смещение %u: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "не удалось прочитать сегмент WAL %s, LSN %X/%08X, смещение %u: %m"
 
 #: access/transam/xlogrecovery.c:3420
 #, c-format
 msgid ""
-"could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
+"could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
 msgstr ""
-"не удалось прочитать сегмент WAL %s, LSN %X/%X, смещение %u (прочитано байт: "
+"не удалось прочитать сегмент WAL %s, LSN %X/%08X, смещение %u (прочитано байт: "
 "%d из %zu)"
 
 #: access/transam/xlogrecovery.c:4061
@@ -4213,10 +4213,10 @@ msgstr ""
 #, c-format
 msgid ""
 "new timeline %u forked off current database system timeline %u before "
-"current recovery point %X/%X"
+"current recovery point %X/%08X"
 msgstr ""
 "новая линия времени %u ответвилась от текущей линии времени базы данных %u "
-"до текущей точки восстановления %X/%X"
+"до текущей точки восстановления %X/%08X"
 
 #: access/transam/xlogrecovery.c:4178
 #, c-format
@@ -4571,29 +4571,29 @@ msgstr "в манифесте найдена линия времени %u, но
 #: backup/basebackup_incremental.c:414
 #, c-format
 msgid ""
-"manifest requires WAL from initial timeline %u starting at %X/%X, but that "
-"timeline begins at %X/%X"
+"manifest requires WAL from initial timeline %u starting at %X/%08X, but that "
+"timeline begins at %X/%08X"
 msgstr ""
 "манифест требует наличия WAL с изначальной линии времени %u, начиная с "
-"позиции %X/%X, но эта линия времени начинается с %X/%X"
+"позиции %X/%08X, но эта линия времени начинается с %X/%08X"
 
 #: backup/basebackup_incremental.c:424
 #, c-format
 msgid ""
-"manifest requires WAL from continuation timeline %u starting at %X/%X, but "
-"that timeline begins at %X/%X"
+"manifest requires WAL from continuation timeline %u starting at %X/%08X, but "
+"that timeline begins at %X/%08X"
 msgstr ""
 "манифест требует наличия WAL с последующей линии времени %u, начиная с "
-"позиции %X/%X, но эта линия времени начинается с %X/%X"
+"позиции %X/%08X, но эта линия времени начинается с %X/%08X"
 
 #: backup/basebackup_incremental.c:435
 #, c-format
 msgid ""
-"manifest requires WAL from final timeline %u ending at %X/%X, but this "
-"backup starts at %X/%X"
+"manifest requires WAL from final timeline %u ending at %X/%08X, but this "
+"backup starts at %X/%08X"
 msgstr ""
 "манифест требует наличия WAL с последней линии времени %u, завершающейся в "
-"%X/%X, но эта копия начинается с %X/%X"
+"%X/%08X, но эта копия начинается с %X/%08X"
 
 #: backup/basebackup_incremental.c:439
 #, c-format
@@ -4607,34 +4607,34 @@ msgstr ""
 #: backup/basebackup_incremental.c:446
 #, c-format
 msgid ""
-"manifest requires WAL from non-final timeline %u ending at %X/%X, but this "
-"server switched timelines at %X/%X"
+"manifest requires WAL from non-final timeline %u ending at %X/%08X, but this "
+"server switched timelines at %X/%08X"
 msgstr ""
 "манифест требует наличия WAL с промежуточной линии времени %u, завершающейся "
-"в %X/%X, но этот сервер переключил линии времени в %X/%X"
+"в %X/%08X, но этот сервер переключил линии времени в %X/%08X"
 
 #: backup/basebackup_incremental.c:527
 #, c-format
 msgid ""
-"WAL summaries are required on timeline %u from %X/%X to %X/%X, but no "
+"WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no "
 "summaries for that timeline and LSN range exist"
 msgstr ""
-"требуются обобщения WAL для линии времени %u с позиции %X/%X по %X/%X, но "
+"требуются обобщения WAL для линии времени %u с позиции %X/%08X по %X/%08X, но "
 "они не найдены"
 
 #: backup/basebackup_incremental.c:534
 #, c-format
 msgid ""
-"WAL summaries are required on timeline %u from %X/%X to %X/%X, but the "
+"WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the "
 "summaries for that timeline and LSN range are incomplete"
 msgstr ""
-"требуются обобщения WAL для линии времени %u с позиции %X/%X по %X/%X, но "
+"требуются обобщения WAL для линии времени %u с позиции %X/%08X по %X/%08X, но "
 "обобщения для этой линии времени и этого диапазона LSN неполные"
 
 #: backup/basebackup_incremental.c:538
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
-msgstr "Первый необобщённый LSN в этом диапазоне: %X/%X."
+msgid "The first unsummarized LSN in this range is %X/%08X."
+msgstr "Первый необобщённый LSN в этом диапазоне: %X/%08X."
 
 #: backup/basebackup_incremental.c:938
 #, c-format
@@ -11591,9 +11591,9 @@ msgstr ""
 
 #: commands/subscriptioncmds.c:1473
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
 msgstr ""
-"позиция пропуска в WAL (LSN %X/%X) должна быть больше начального LSN %X/%X"
+"позиция пропуска в WAL (LSN %X/%08X) должна быть больше начального LSN %X/%08X"
 
 #: commands/subscriptioncmds.c:1594
 #, c-format
@@ -22497,40 +22497,40 @@ msgstr "процесс обобщения WAL не продвигается"
 #: postmaster/walsummarizer.c:741
 #, c-format
 msgid ""
-"Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/"
+"Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/"
 "%X in memory."
 msgstr ""
-"Обобщение должно охватить %X/%X, но оно остановилось на позиции %X/%X на "
-"диске и %X/%X в памяти."
+"Обобщение должно охватить %X/%08X, но оно остановилось на позиции %X/%08X на "
+"диске и %X/%08X в памяти."
 
 #: postmaster/walsummarizer.c:755
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld second"
+msgid "still waiting for WAL summarization through %X/%08X after %ld second"
 msgid_plural ""
-"still waiting for WAL summarization through %X/%X after %ld seconds"
-msgstr[0] "ожидание обобщения позиции %X/%X продолжается %ld сек."
-msgstr[1] "ожидание обобщения позиции %X/%X продолжается %ld сек."
-msgstr[2] "ожидание обобщения позиции %X/%X продолжается %ld сек."
+"still waiting for WAL summarization through %X/%08X after %ld seconds"
+msgstr[0] "ожидание обобщения позиции %X/%08X продолжается %ld сек."
+msgstr[1] "ожидание обобщения позиции %X/%08X продолжается %ld сек."
+msgstr[2] "ожидание обобщения позиции %X/%08X продолжается %ld сек."
 
 #: postmaster/walsummarizer.c:760
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
-msgstr "Процесс обобщения достиг позиции %X/%X на диске и %X/%X в памяти."
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
+msgstr "Процесс обобщения достиг позиции %X/%08X на диске и %X/%08X в памяти."
 
 #: postmaster/walsummarizer.c:1000
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "не удалось найти корректную запись после %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "не удалось найти корректную запись после %X/%08X"
 
 #: postmaster/walsummarizer.c:1045
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "не удалось прочитать WAL с линии времени %u в позиции %X/%X: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "не удалось прочитать WAL с линии времени %u в позиции %X/%08X: %s"
 
 #: postmaster/walsummarizer.c:1051
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "не удалось прочитать WAL с линии времени %u в позиции %X/%X"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "не удалось прочитать WAL с линии времени %u в позиции %X/%08X"
 
 #: regex/regc_pg_locale.c:244
 #, c-format
@@ -22870,15 +22870,15 @@ msgstr "начинается логическое декодирование д
 
 #: replication/logical/logical.c:630
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Передача транзакций, фиксируемых после %X/%X, чтение WAL с %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Передача транзакций, фиксируемых после %X/%08X, чтение WAL с %X/%08X."
 
 #: replication/logical/logical.c:778
 #, c-format
 msgid ""
-"slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
+"slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
 msgstr ""
-"слот \"%s\", модуль вывода \"%s\", в обработчике %s, связанный LSN: %X/%X"
+"слот \"%s\", модуль вывода \"%s\", в обработчике %s, связанный LSN: %X/%08X"
 
 #: replication/logical/logical.c:784
 #, c-format
@@ -22992,8 +22992,8 @@ msgstr ""
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "состояние репликации узла %d восстановлено до %X/%X"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "состояние репликации узла %d восстановлено до %X/%08X"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -23130,11 +23130,11 @@ msgstr ""
 #: replication/logical/slotsync.c:217
 #, c-format
 msgid ""
-"The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has "
-"LSN %X/%X and catalog xmin %u."
+"The remote slot has LSN %X/%08X and catalog xmin %u, but the local slot has "
+"LSN %X/%08X and catalog xmin %u."
 msgstr ""
-"Для удалённого слота текущий LSN %X/%X и xmin каталога %u, тогда как для "
-"локального — LSN %X/%X и xmin каталога %u."
+"Для удалённого слота текущий LSN %X/%08X и xmin каталога %u, тогда как для "
+"локального — LSN %X/%08X и xmin каталога %u."
 
 #: replication/logical/slotsync.c:459
 #, c-format
@@ -23149,10 +23149,10 @@ msgstr "не удалось синхронизировать слот репли
 #: replication/logical/slotsync.c:580
 #, c-format
 msgid ""
-"Logical decoding could not find consistent point from local slot's LSN %X/%X."
+"Logical decoding could not find consistent point from local slot's LSN %X/%08X."
 msgstr ""
 "При логическом декодировании не удалось найти точку согласованности от LSN "
-"локального слота %X/%X."
+"локального слота %X/%08X."
 
 #: replication/logical/slotsync.c:589
 #, c-format
@@ -23162,11 +23162,11 @@ msgstr "созданный слот репликации \"%s\" сейчас г
 #: replication/logical/slotsync.c:628
 #, c-format
 msgid ""
-"skipping slot synchronization because the received slot sync LSN %X/%X for "
-"slot \"%s\" is ahead of the standby position %X/%X"
+"skipping slot synchronization because the received slot sync LSN %X/%08X for "
+"slot \"%s\" is ahead of the standby position %X/%08X"
 msgstr ""
-"синхронизация слота пропускается, потому что полученная позиция LSN %X/%X "
-"для слота \"%s\" предшествует позиции %X/%X на резервном сервере"
+"синхронизация слота пропускается, потому что полученная позиция LSN %X/%08X "
+"для слота \"%s\" предшествует позиции %X/%08X на резервном сервере"
 
 #: replication/logical/slotsync.c:650
 #, c-format
@@ -23307,8 +23307,8 @@ msgstr[2] ""
 #: replication/logical/snapbuild.c:1404 replication/logical/snapbuild.c:1501
 #: replication/logical/snapbuild.c:2017
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "процесс логического декодирования достиг точки согласованности в %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "процесс логического декодирования достиг точки согласованности в %X/%08X"
 
 #: replication/logical/snapbuild.c:1406
 #, c-format
@@ -23317,9 +23317,9 @@ msgstr "Больше активных транзакций нет."
 
 #: replication/logical/snapbuild.c:1453
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
 msgstr ""
-"процесс логического декодирования нашёл начальную стартовую точку в %X/%X"
+"процесс логического декодирования нашёл начальную стартовую точку в %X/%08X"
 
 #: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479
 #, c-format
@@ -23328,9 +23328,9 @@ msgstr "Ожидание транзакций (примерно %d), старе
 
 #: replication/logical/snapbuild.c:1477
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
 msgstr ""
-"при логическом декодировании найдена начальная точка согласованности в %X/%X"
+"при логическом декодировании найдена начальная точка согласованности в %X/%08X"
 
 #: replication/logical/snapbuild.c:1503
 #, c-format
@@ -23603,15 +23603,15 @@ msgstr "подписка \"%s\" была отключена из-за ошибк
 
 #: replication/logical/worker.c:4806
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
 msgstr ""
-"обработчик логической репликации начинает пропускать транзакцию с LSN %X/%X"
+"обработчик логической репликации начинает пропускать транзакцию с LSN %X/%08X"
 
 #: replication/logical/worker.c:4820
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
 msgstr ""
-"обработчик логической репликации завершил пропуск транзакции с LSN %X/%X"
+"обработчик логической репликации завершил пропуск транзакции с LSN %X/%08X"
 
 #: replication/logical/worker.c:4902
 #, c-format
@@ -23621,11 +23621,11 @@ msgstr "значение skip-LSN для подписки \"%s\" очищено"
 #: replication/logical/worker.c:4903
 #, c-format
 msgid ""
-"Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN "
-"%X/%X."
+"Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN "
+"%X/%08X."
 msgstr ""
-"Позиция завершения удалённой транзакции в WAL (LSN) %X/%X не совпала со "
-"значением skip-LSN %X/%X."
+"Позиция завершения удалённой транзакции в WAL (LSN) %X/%08X не совпала со "
+"значением skip-LSN %X/%08X."
 
 #: replication/logical/worker.c:4940
 #, c-format
@@ -23649,10 +23649,10 @@ msgstr ""
 #, c-format
 msgid ""
 "processing remote data for replication origin \"%s\" during message type "
-"\"%s\" in transaction %u, finished at %X/%X"
+"\"%s\" in transaction %u, finished at %X/%08X"
 msgstr ""
 "обработка внешних данных для источника репликации \"%s\" в контексте "
-"сообщения типа \"%s\" в транзакции %u, конечная позиция %X/%X"
+"сообщения типа \"%s\" в транзакции %u, конечная позиция %X/%08X"
 
 #: replication/logical/worker.c:4960
 #, c-format
@@ -23669,11 +23669,11 @@ msgstr ""
 msgid ""
 "processing remote data for replication origin \"%s\" during message type "
 "\"%s\" for replication target relation \"%s.%s\" in transaction %u, finished "
-"at %X/%X"
+"at %X/%08X"
 msgstr ""
 "обработка внешних данных для источника репликации \"%s\" в контексте "
 "сообщения типа \"%s\" для целевого отношения репликации \"%s.%s\" в "
-"транзакции %u, конечная позиция %X/%X"
+"транзакции %u, конечная позиция %X/%08X"
 
 #: replication/logical/worker.c:4978
 #, c-format
@@ -23691,11 +23691,11 @@ msgstr ""
 msgid ""
 "processing remote data for replication origin \"%s\" during message type "
 "\"%s\" for replication target relation \"%s.%s\" column \"%s\" in "
-"transaction %u, finished at %X/%X"
+"transaction %u, finished at %X/%08X"
 msgstr ""
 "обработка внешних данных для источника репликации \"%s\" в контексте "
 "сообщения типа \"%s\" для целевого отношения репликации \"%s.%s\", столбца "
-"\"%s\", в транзакции %u, конечная позиция %X/%X"
+"\"%s\", в транзакции %u, конечная позиция %X/%08X"
 
 #: replication/pgoutput/pgoutput.c:322
 #, c-format
@@ -23900,11 +23900,11 @@ msgstr "Использовать слоты репликации могут то
 
 #: replication/slot.c:1498
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
-msgstr[0] "Позиция restart_lsn %X/%X слота превысила предел на %llu Б."
-msgstr[1] "Позиция restart_lsn %X/%X слота превысила предел на %llu Б."
-msgstr[2] "Позиция restart_lsn %X/%X слота превысила предел на %llu Б."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
+msgstr[0] "Позиция restart_lsn %X/%08X слота превысила предел на %llu Б."
+msgstr[1] "Позиция restart_lsn %X/%08X слота превысила предел на %llu Б."
+msgstr[2] "Позиция restart_lsn %X/%08X слота превысила предел на %llu Б."
 
 #: replication/slot.c:1506
 #, c-format
@@ -24073,9 +24073,9 @@ msgstr "Для этого слота ранее не резервировалс
 
 #: replication/slotfuncs.c:566
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
 msgstr ""
-"продвинуть слот репликации к позиции %X/%X нельзя, минимальная позиция: %X/%X"
+"продвинуть слот репликации к позиции %X/%08X нельзя, минимальная позиция: %X/%08X"
 
 #: replication/slotfuncs.c:673
 #, c-format
@@ -24200,15 +24200,15 @@ msgstr ""
 
 #: replication/walreceiver.c:419
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
 msgstr ""
-"начало передачи журнала с главного сервера, с позиции %X/%X на линии времени "
+"начало передачи журнала с главного сервера, с позиции %X/%08X на линии времени "
 "%u"
 
 #: replication/walreceiver.c:423
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "перезапуск передачи журнала с позиции %X/%X на линии времени %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "перезапуск передачи журнала с позиции %X/%08X на линии времени %u"
 
 #: replication/walreceiver.c:458
 #, c-format
@@ -24222,8 +24222,8 @@ msgstr "репликация прекращена главным серверо
 
 #: replication/walreceiver.c:503
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "На линии времени %u в %X/%X достигнут конец журнала."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "На линии времени %u в %X/%08X достигнут конец журнала."
 
 #: replication/walreceiver.c:593
 #, c-format
@@ -24275,23 +24275,23 @@ msgstr ""
 #: replication/walsender.c:919
 #, c-format
 msgid ""
-"requested starting point %X/%X on timeline %u is not in this server's history"
+"requested starting point %X/%08X on timeline %u is not in this server's history"
 msgstr ""
-"в истории сервера нет запрошенной начальной точки %X/%X на линии времени %u"
+"в истории сервера нет запрошенной начальной точки %X/%08X на линии времени %u"
 
 #: replication/walsender.c:922
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "История этого сервера ответвилась от линии времени %u в %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "История этого сервера ответвилась от линии времени %u в %X/%08X."
 
 #: replication/walsender.c:966
 #, c-format
 msgid ""
-"requested starting point %X/%X is ahead of the WAL flush position of this "
-"server %X/%X"
+"requested starting point %X/%08X is ahead of the WAL flush position of this "
+"server %X/%08X"
 msgstr ""
-"запрошенная начальная точка %X/%X впереди позиции сброшенных данных журнала "
-"на этом сервере (%X/%X)"
+"запрошенная начальная точка %X/%08X впереди позиции сброшенных данных журнала "
+"на этом сервере (%X/%08X)"
 
 #: replication/walsender.c:1160
 #, c-format
@@ -35664,8 +35664,8 @@ msgstr "Используйте для записи спецсимволов си
 #~ msgstr "не удалось выделить память для декодирования записи длины %u"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "длина записи %u в позиции %X/%X слишком велика"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "длина записи %u в позиции %X/%08X слишком велика"
 
 #, c-format
 #~ msgid "parameter \"lc_collate\" must be specified"
@@ -35722,12 +35722,12 @@ msgstr "Используйте для записи спецсимволов си
 #~ msgstr "табличные пространства не поддерживаются на этой платформе"
 
 #, c-format
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "неверное смещение записи: %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "неверное смещение записи: %X/%08X"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "нет записи contrecord в %X/%X"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "нет записи contrecord в %X/%08X"
 
 #, c-format
 #~ msgid "invalid primary checkpoint link in control file"
@@ -36050,10 +36050,10 @@ msgstr "Используйте для записи спецсимволов си
 
 #, c-format
 #~ msgid ""
-#~ "invalidating slot \"%s\" because its restart_lsn %X/%X exceeds "
+#~ "invalidating slot \"%s\" because its restart_lsn %X/%08X exceeds "
 #~ "max_slot_wal_keep_size"
 #~ msgstr ""
-#~ "слот \"%s\" аннулируется, так как его позиция restart_lsn %X/%X превышает "
+#~ "слот \"%s\" аннулируется, так как его позиция restart_lsn %X/%08X превышает "
 #~ "max_slot_wal_keep_size"
 
 #, c-format
@@ -36336,10 +36336,10 @@ msgstr "Используйте для записи спецсимволов си
 #~ "в применяющем процессе логической репликации для подписки \"%s\" "
 #~ "состояние two_phase: %s"
 
-#~ msgid "start skipping logical replication transaction finished at %X/%X"
+#~ msgid "start skipping logical replication transaction finished at %X/%08X"
 #~ msgstr ""
 #~ "в ходе логической репликации начинается пропуск транзакции, завершённой в "
-#~ "%X/%X"
+#~ "%X/%08X"
 
 #~ msgid "unlinked permanent statistics file \"%s\""
 #~ msgstr "постоянный файл статистики \"%s\" удалён"
@@ -36889,8 +36889,8 @@ msgstr "Используйте для записи спецсимволов си
 #~ "Либо установите для wal_level значение \"replica\" на главном сервере, "
 #~ "либо выключите hot_standby здесь."
 
-#~ msgid "checkpoint record is at %X/%X"
-#~ msgstr "запись о контрольной точке по смещению %X/%X"
+#~ msgid "checkpoint record is at %X/%08X"
+#~ msgstr "запись о контрольной точке по смещению %X/%08X"
 
 #~ msgid "initializing for hot standby"
 #~ msgstr "инициализация для горячего резерва"
@@ -36902,9 +36902,9 @@ msgstr "Используйте для записи спецсимволов си
 #~ msgstr ""
 #~ "создание точки перезапуска пропускается, восстановление уже закончилось"
 
-#~ msgid "skipping restartpoint, already performed at %X/%X"
+#~ msgid "skipping restartpoint, already performed at %X/%08X"
 #~ msgstr ""
-#~ "создание точки перезапуска пропускается, она уже создана по смещению %X/%X"
+#~ "создание точки перезапуска пропускается, она уже создана по смещению %X/%08X"
 
 #~ msgid "backup time %s in file \"%s\""
 #~ msgstr "время резервного копирования %s в файле \"%s\""
@@ -38099,8 +38099,8 @@ msgstr "Используйте для записи спецсимволов си
 #~ "Кластер баз данных был инициализирован с XLOG_SEG_SIZE %d, но сервер "
 #~ "скомпилирован с XLOG_SEG_SIZE %d."
 
-#~ msgid "using previous checkpoint record at %X/%X"
-#~ msgstr "используется предыдущая запись контрольной точки по смещению %X/%X"
+#~ msgid "using previous checkpoint record at %X/%08X"
+#~ msgstr "используется предыдущая запись контрольной точки по смещению %X/%08X"
 
 #~ msgid "invalid secondary checkpoint record"
 #~ msgstr "неверная запись вторичной контрольной точки"
@@ -39097,8 +39097,8 @@ msgstr "Используйте для записи спецсимволов си
 #~ msgid "invalid value for recovery parameter \"recovery_target\""
 #~ msgstr "неверное значение параметра \"recovery_target\""
 
-#~ msgid "redo record is at %X/%X; shutdown %s"
-#~ msgstr "запись REDO по смещению %X/%X; выключение: %s"
+#~ msgid "redo record is at %X/%08X; shutdown %s"
+#~ msgstr "запись REDO по смещению %X/%08X; выключение: %s"
 
 #~ msgid "next transaction ID: %u/%u; next OID: %u"
 #~ msgstr "ID следующей транзакции: %u/%u; следующий OID: %u"
@@ -39218,17 +39218,17 @@ msgstr "Используйте для записи спецсимволов си
 #~ msgid "cache lookup failed for tablesample method %u"
 #~ msgstr "ошибка поиска в кеше для метода получения выборки %u"
 
-#~ msgid "invalid xlog switch record at %X/%X"
-#~ msgstr "неверная запись переключения xlog по смещению %X/%X"
+#~ msgid "invalid xlog switch record at %X/%08X"
+#~ msgstr "неверная запись переключения xlog по смещению %X/%08X"
 
-#~ msgid "invalid backup block size in record at %X/%X"
-#~ msgstr "неверный размер блока копии в позиции %X/%X"
+#~ msgid "invalid backup block size in record at %X/%08X"
+#~ msgstr "неверный размер блока копии в позиции %X/%08X"
 
-#~ msgid "incorrect hole size in record at %X/%X"
-#~ msgstr "неправильный размер пропуска в записи по смещению %X/%X"
+#~ msgid "incorrect hole size in record at %X/%08X"
+#~ msgstr "неправильный размер пропуска в записи по смещению %X/%08X"
 
-#~ msgid "incorrect total length in record at %X/%X"
-#~ msgstr "некорректная общая длина в записи по смещению %X/%X"
+#~ msgid "incorrect total length in record at %X/%08X"
+#~ msgstr "некорректная общая длина в записи по смещению %X/%08X"
 
 #~ msgid "=> is deprecated as an operator name"
 #~ msgstr "=> как имя оператора считается устаревшим"
@@ -39371,7 +39371,7 @@ msgstr "Используйте для записи спецсимволов си
 #~ "%d, требовалось: %u)"
 
 #~ msgid ""
-#~ "skipping snapshot at %X/%X while building logical decoding snapshot, xmin "
+#~ "skipping snapshot at %X/%08X while building logical decoding snapshot, xmin "
 #~ "horizon too low"
 #~ msgstr ""
 #~ "при построении снимка логического декодирования пропускается снимок в %X/"
diff --git a/src/backend/po/sv.po b/src/backend/po/sv.po
index db87d04a3c2..0d457eeae1c 100644
--- a/src/backend/po/sv.po
+++ b/src/backend/po/sv.po
@@ -2228,18 +2228,18 @@ msgstr "Misslyckades vid allokering av en WAL-läs-processor."
 
 #: access/transam/twophase.c:1429
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "kunde inte läsa tvåfas-status från WAL vid %X/%X: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "kunde inte läsa tvåfas-status från WAL vid %X/%08X: %s"
 
 #: access/transam/twophase.c:1434
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "kunde inte läsa tvåfas-status från WAL vid %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "kunde inte läsa tvåfas-status från WAL vid %X/%08X"
 
 #: access/transam/twophase.c:1442
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "förväntad tvåfas-statusdata finns inte i WAL vid %X/%X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "förväntad tvåfas-statusdata finns inte i WAL vid %X/%08X"
 
 #: access/transam/twophase.c:1745
 #, c-format
@@ -2295,8 +2295,8 @@ msgstr "kunde inte återställa tvåfas-statusfil för transaktion %u"
 
 #: access/transam/twophase.c:2516
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
-msgstr "Statefil för tvåfas har hittats i WAL-post %X/%X men denna transaktion har redan återställts från disk."
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
+msgstr "Statefil för tvåfas har hittats i WAL-post %X/%08X men denna transaktion har redan återställts från disk."
 
 #: access/transam/twophase.c:2524 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209
 #, c-format
@@ -2464,13 +2464,13 @@ msgstr "kan inte ha mer än 2^32-1 undertransaktioner i en transaktion"
 
 #: access/transam/xlog.c:1542
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "förfrågan att flush:a efter slutet av genererad WAL; efterfrågad %X/%X, aktuell position %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "förfrågan att flush:a efter slutet av genererad WAL; efterfrågad %X/%08X, aktuell position %X/%08X"
 
 #: access/transam/xlog.c:1769
 #, c-format
-msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X"
-msgstr "kan inte läsa efter slutet av genererad WAL; efterfrågad %X/%X, aktuell position %X/%X"
+msgid "cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X"
+msgstr "kan inte läsa efter slutet av genererad WAL; efterfrågad %X/%08X, aktuell position %X/%08X"
 
 #: access/transam/xlog.c:2210 access/transam/xlog.c:4501
 #, c-format
@@ -2781,13 +2781,13 @@ msgstr "checkpoint startar:%s%s%s%s%s%s%s%s"
 
 #: access/transam/xlog.c:6728
 #, c-format
-msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "restartpoint klar: skrev %d buffers (%.1f%%); %d WAL-fil(er) tillagda, %d borttagna, %d recyclade; skriv=%ld.%03d s, synk=%ld.%03d s, totalt=%ld.%03d s; synk-filer=%d, längsta=%ld.%03d s, genomsnitt=%ld.%03d s; distans=%d kB, estimat=%d kB; lsn=%X/%X, redo-lsn=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "restartpoint klar: skrev %d buffers (%.1f%%); %d WAL-fil(er) tillagda, %d borttagna, %d recyclade; skriv=%ld.%03d s, synk=%ld.%03d s, totalt=%ld.%03d s; synk-filer=%d, längsta=%ld.%03d s, genomsnitt=%ld.%03d s; distans=%d kB, estimat=%d kB; lsn=%X/%08X, redo-lsn=%X/%08X"
 
 #: access/transam/xlog.c:6751
 #, c-format
-msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "checkpoint klar: skrev %d buffers (%.1f%%); %d WAL-fil(er) tillagda, %d borttagna, %d recyclade; skriv=%ld.%03d s, synk=%ld.%03d s, totalt=%ld.%03d s; synk-filer=%d, längsta=%ld.%03d s, genomsnitt=%ld.%03d s; distans=%d kB, estimat=%d kB; lsn=%X/%X, redo-lsn=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "checkpoint klar: skrev %d buffers (%.1f%%); %d WAL-fil(er) tillagda, %d borttagna, %d recyclade; skriv=%ld.%03d s, synk=%ld.%03d s, totalt=%ld.%03d s; synk-filer=%d, längsta=%ld.%03d s, genomsnitt=%ld.%03d s; distans=%d kB, estimat=%d kB; lsn=%X/%08X, redo-lsn=%X/%08X"
 
 #: access/transam/xlog.c:7233
 #, c-format
@@ -2796,8 +2796,8 @@ msgstr "samtidig write-ahead-logg-aktivitet när databassystemet stängs ner"
 
 #: access/transam/xlog.c:7818
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "återställningens omstartspunkt vid %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "återställningens omstartspunkt vid %X/%08X"
 
 #: access/transam/xlog.c:7820
 #, c-format
@@ -2806,8 +2806,8 @@ msgstr "Senaste kompletta transaktionen var vid loggtid %s"
 
 #: access/transam/xlog.c:8082
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "återställningspunkt \"%s\" skapad vid %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "återställningspunkt \"%s\" skapad vid %X/%08X"
 
 #: access/transam/xlog.c:8289
 #, c-format
@@ -3068,53 +3068,53 @@ msgstr "\"recovery_prefetch\" stöds inte på plattformar som saknar posix_fadvi
 
 #: access/transam/xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ogiltig postlängd vid %X/%08X: förväntade minst %u, fick %u"
 
 #: access/transam/xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord är begärd vid %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord är begärd vid %X/%08X"
 
 #: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ogiltig postlängd vid %X/%08X: förväntade minst %u, fick %u"
 
 #: access/transam/xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "det finns ingen contrecord-flagga vid %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "det finns ingen contrecord-flagga vid %X/%08X"
 
 #: access/transam/xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "ogiltig contrecord-längd %u (förväntade %lld) vid %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "ogiltig contrecord-längd %u (förväntade %lld) vid %X/%08X"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ogiltigt resurshanterar-ID %u vid %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ogiltigt resurshanterar-ID %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "post med inkorrekt prev-link %X/%X vid %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "post med inkorrekt prev-link %X/%08X vid %X/%08X"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%08X"
 
 #: access/transam/xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "felaktigt magiskt nummer %04X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "felaktigt magiskt nummer %04X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ogiltiga infobitar %04X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ogiltiga infobitar %04X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogreader.c:1274
 #, c-format
@@ -3133,63 +3133,63 @@ msgstr "WAL-fil är från ett annat databassystem: inkorrekt XLOG_BLCKSZ i sidhu
 
 #: access/transam/xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "oväntad sidadress %X/%X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "oväntad sidadress %X/%08X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ej-i-sekvens för tidslinje-ID %u (efter %u) i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ej-i-sekvens för tidslinje-ID %u (efter %u) i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "\"ej i sekvens\"-block_id %u vid %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "\"ej i sekvens\"-block_id %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%08X"
 
 #: access/transam/xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED är satt men blockavbildlängd %u vid %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED är satt men blockavbildlängd %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_COMPRESSED är satt men blockavbildlängd är %u vid %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_COMPRESSED är satt men blockavbildlängd är %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%08X"
 
 #: access/transam/xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "ogiltig block_id %u vid %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "ogiltig block_id %u vid %X/%08X"
 
 #: access/transam/xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "post med ogiltig längd vid %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "post med ogiltig längd vid %X/%08X"
 
 #: access/transam/xlogreader.c:1982
 #, c-format
@@ -3198,38 +3198,38 @@ msgstr "kunde inte hitta backup-block med ID %d i WAL-post"
 
 #: access/transam/xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt block %d angivet"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "kunde inte återställa avbild vid %X/%08X med ogiltigt block %d angivet"
 
 #: access/transam/xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt state, block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X med ogiltigt state, block %d"
 
 #: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med %s stöds inte av bygget, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X, komprimerad med %s stöds inte av bygget, block %d"
 
 #: access/transam/xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med okänd metod, block %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X, komprimerad med okänd metod, block %d"
 
 #: access/transam/xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "kunde inte packa upp avbild vid %X/%X, block %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "kunde inte packa upp avbild vid %X/%08X, block %d"
 
 #: access/transam/xlogrecovery.c:617
 #, c-format
-msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u"
-msgstr "startar backupåterställning med redo LSN %X/%X, checkpoint LSN %X/%X, på tidslinje ID %u"
+msgid "starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u"
+msgstr "startar backupåterställning med redo LSN %X/%08X, checkpoint LSN %X/%08X, på tidslinje ID %u"
 
 #: access/transam/xlogrecovery.c:649
 #, c-format
-msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X"
-msgstr "kunde inte hitta redo-position %X/%X refererad av checkpoint-post vid %X/%X"
+msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
+msgstr "kunde inte hitta redo-position %X/%08X refererad av checkpoint-post vid %X/%08X"
 
 #: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662
 #, c-format
@@ -3245,8 +3245,8 @@ msgstr ""
 
 #: access/transam/xlogrecovery.c:660
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "kunde inte hitta den checkpoint-post som krävs vid %X/%X"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "kunde inte hitta den checkpoint-post som krävs vid %X/%08X"
 
 #: access/transam/xlogrecovery.c:690 commands/tablespace.c:664
 #, c-format
@@ -3270,13 +3270,13 @@ msgstr "Kunde inte döpa om fil \"%s\" till \"%s\": %m"
 
 #: access/transam/xlogrecovery.c:770
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "startar om backupåterställning med redo LSN %X/%X"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "startar om backupåterställning med redo LSN %X/%08X"
 
 #: access/transam/xlogrecovery.c:795
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "kunde inte hitta en giltig checkpoint-post vid %X/%X"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "kunde inte hitta en giltig checkpoint-post vid %X/%08X"
 
 #: access/transam/xlogrecovery.c:806
 #, c-format
@@ -3300,8 +3300,8 @@ msgstr "startar point-in-time-återställning till \"%s\""
 
 #: access/transam/xlogrecovery.c:821
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "startar point-in-time-återställning till WAL-position (LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "startar point-in-time-återställning till WAL-position (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:825
 #, c-format
@@ -3320,13 +3320,13 @@ msgstr "efterfrågad tidslinje %u är inte ett barn till denna servers historik"
 
 #: access/transam/xlogrecovery.c:851
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "Senaste checkpoint är vid %X/%X på tidslinje %u, men i historiken för efterfrågad tidslinje så avvek servern från den tidslinjen vid %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "Senaste checkpoint är vid %X/%08X på tidslinje %u, men i historiken för efterfrågad tidslinje så avvek servern från den tidslinjen vid %X/%08X."
 
 #: access/transam/xlogrecovery.c:865
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "efterfågan tidslinje %u innehåller inte minimal återställningspunkt %X/%X på tidslinje %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "efterfågan tidslinje %u innehåller inte minimal återställningspunkt %X/%08X på tidslinje %u"
 
 #: access/transam/xlogrecovery.c:893
 #, c-format
@@ -3417,18 +3417,18 @@ msgstr "Använd pg_combinebackup för att återskapa en giltig datakatalog."
 
 #: access/transam/xlogrecovery.c:1717
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "oväntad typ på post hittad vid redo-punkt %X/%X"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "oväntad typ på post hittad vid redo-punkt %X/%08X"
 
 #: access/transam/xlogrecovery.c:1740
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "redo startar vid %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "redo startar vid %X/%08X"
 
 #: access/transam/xlogrecovery.c:1753
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "redo pågår, förbrukad tid: %ld.%02d s, nuvarande LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "redo pågår, förbrukad tid: %ld.%02d s, nuvarande LSN: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1843
 #, c-format
@@ -3437,8 +3437,8 @@ msgstr "efterfrågad återställningsstoppunkt är före en konsistent återstä
 
 #: access/transam/xlogrecovery.c:1875
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "redo gjord vid %X/%X systemanvändning: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "redo gjord vid %X/%08X systemanvändning: %s"
 
 #: access/transam/xlogrecovery.c:1881
 #, c-format
@@ -3457,8 +3457,8 @@ msgstr "återställning avslutades innan det konfigurerade återställningsmåle
 
 #: access/transam/xlogrecovery.c:2095
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "lyckades hoppa över saknad contrecord vid %X/%X, överskriven vid %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "lyckades hoppa över saknad contrecord vid %X/%08X, överskriven vid %s"
 
 #: access/transam/xlogrecovery.c:2162
 #, c-format
@@ -3477,19 +3477,19 @@ msgstr "Ta bort dessa kataloger eller sätt \"allow_in_place_tablespaces\" tempo
 
 #: access/transam/xlogrecovery.c:2217
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
-msgstr "slutförde backupåterställning vid redo-LSN %X/%X och slut-LSN %X/%X"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
+msgstr "slutförde backupåterställning vid redo-LSN %X/%08X och slut-LSN %X/%08X"
 
 #: access/transam/xlogrecovery.c:2247
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "konsistent återställningstillstånd uppnått vid %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "konsistent återställningstillstånd uppnått vid %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2285
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "WAL-redo vid %X/%X för %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "WAL-redo vid %X/%08X för %s"
 
 #: access/transam/xlogrecovery.c:2383
 #, c-format
@@ -3503,8 +3503,8 @@ msgstr "oväntad tidslinje-ID %u (efter %u) i checkpoint-post"
 
 #: access/transam/xlogrecovery.c:2408
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "oväntad tidslinje-ID %u i checkpoint-post, innan vi nått minimal återställningspunkt %X/%X på tidslinje %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "oväntad tidslinje-ID %u i checkpoint-post, innan vi nått minimal återställningspunkt %X/%08X på tidslinje %u"
 
 #: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868
 #, c-format
@@ -3513,8 +3513,8 @@ msgstr "återställning stoppad efter att ha uppnått konsistens"
 
 #: access/transam/xlogrecovery.c:2613
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "återställning stoppad före WAL-position (LSN) \"%X/%X\""
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "återställning stoppad före WAL-position (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2703
 #, c-format
@@ -3533,8 +3533,8 @@ msgstr "återställning stoppad vid återställningspunkt \"%s\", tid %s"
 
 #: access/transam/xlogrecovery.c:2781
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "återställning stoppad efter WAL-position (LSN) \"%X/%X\""
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "återställning stoppad efter WAL-position (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2848
 #, c-format
@@ -3568,18 +3568,18 @@ msgstr "Kör pg_wal_replay_resume() för att fortsätta."
 
 #: access/transam/xlogrecovery.c:3205
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "oväntad tidslinje-ID %u i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "oväntad tidslinje-ID %u i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogrecovery.c:3413
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "kunde inte läsa från WAL-segment %s, LSN %X/%X, offset %u: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "kunde inte läsa från WAL-segment %s, LSN %X/%08X, offset %u: %m"
 
 #: access/transam/xlogrecovery.c:3420
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
-msgstr "kunde inte läsa från WAL-segment %s, LSN %X/%X, offset %u, läste %d av %zu"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
+msgstr "kunde inte läsa från WAL-segment %s, LSN %X/%08X, offset %u, läste %d av %zu"
 
 #: access/transam/xlogrecovery.c:4061
 #, c-format
@@ -3613,8 +3613,8 @@ msgstr "ny tidslinje %u är inte ett barn till databasens systemtidslinje %u"
 
 #: access/transam/xlogrecovery.c:4159
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "ny tidslinje %u skapad från aktuella databasens systemtidslinje %u innan nuvarande återställningspunkt %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "ny tidslinje %u skapad från aktuella databasens systemtidslinje %u innan nuvarande återställningspunkt %X/%08X"
 
 #: access/transam/xlogrecovery.c:4178
 #, c-format
@@ -3924,18 +3924,18 @@ msgstr "tidslinje %u hittades i manifest men inte i denna servers historik"
 
 #: backup/basebackup_incremental.c:414
 #, c-format
-msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "manifestet kräver WAL från initiala tidslinjen %u vid start %X/%X men den tidslinjen börjar vid %X/%X"
+msgid "manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "manifestet kräver WAL från initiala tidslinjen %u vid start %X/%08X men den tidslinjen börjar vid %X/%08X"
 
 #: backup/basebackup_incremental.c:424
 #, c-format
-msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "manifestet kräver WAL från tidslinje %u att fortsätta med som startar vid %X/%X men den tidslinjen börjar vid %X/%X"
+msgid "manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "manifestet kräver WAL från tidslinje %u att fortsätta med som startar vid %X/%08X men den tidslinjen börjar vid %X/%08X"
 
 #: backup/basebackup_incremental.c:435
 #, c-format
-msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X"
-msgstr "manifestet kräver WAL från avslutande tidslinje %u som slutar vid %X/%X, men denna backup startar vid %X/%X"
+msgid "manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X"
+msgstr "manifestet kräver WAL från avslutande tidslinje %u som slutar vid %X/%08X, men denna backup startar vid %X/%08X"
 
 #: backup/basebackup_incremental.c:439
 #, c-format
@@ -3944,23 +3944,23 @@ msgstr "Detta kan hända vid inkrementella backuper på en standby om det är li
 
 #: backup/basebackup_incremental.c:446
 #, c-format
-msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X"
-msgstr "manifestet kräver WAL från en icke avslutande tidslinje %u som slutar vid %X/%X men denns server bytte tidslinje vid %X/%X"
+msgid "manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X"
+msgstr "manifestet kräver WAL från en icke avslutande tidslinje %u som slutar vid %X/%08X men denns server bytte tidslinje vid %X/%08X"
 
 #: backup/basebackup_incremental.c:527
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist"
-msgstr "WAL-summering krävs för tidslinje %u från %X/%X till %X/%X men inga summeringar för den tidslinjen och det LSN-intervallet finns"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist"
+msgstr "WAL-summering krävs för tidslinje %u från %X/%08X till %X/%08X men inga summeringar för den tidslinjen och det LSN-intervallet finns"
 
 #: backup/basebackup_incremental.c:534
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete"
-msgstr "WAL-summering krävs för tidslinje %u från %X/%X till %X/%X men summeringar för den tidslinjen och det LSN-intervallet är inkompletta"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete"
+msgstr "WAL-summering krävs för tidslinje %u från %X/%08X till %X/%08X men summeringar för den tidslinjen och det LSN-intervallet är inkompletta"
 
 #: backup/basebackup_incremental.c:538
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
-msgstr "Den första icke summerade LSN i detta intervall är %X/%X."
+msgid "The first unsummarized LSN in this range is %X/%08X."
+msgstr "Den första icke summerade LSN i detta intervall är %X/%08X."
 
 #: backup/basebackup_incremental.c:938
 #, c-format
@@ -10329,8 +10329,8 @@ msgstr "Använd ALTER SUBSCRIPTION ... REFRESH med copy_data = false eller anvä
 
 #: commands/subscriptioncmds.c:1473
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
-msgstr "skip-WAL-position (LSN %X/%X) måste vara större än käll-LSN %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
+msgstr "skip-WAL-position (LSN %X/%08X) måste vara större än käll-LSN %X/%08X"
 
 #: commands/subscriptioncmds.c:1594
 #, c-format
@@ -20483,35 +20483,35 @@ msgstr "WAL-summering avancerar inte"
 
 #: postmaster/walsummarizer.c:741
 #, c-format
-msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory."
-msgstr "Summering krävs till %X/%X men har fastnat vid %X/%X på disk och vid %X/%X i minnet."
+msgid "Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory."
+msgstr "Summering krävs till %X/%08X men har fastnat vid %X/%08X på disk och vid %X/%08X i minnet."
 
 #: postmaster/walsummarizer.c:755
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld second"
-msgid_plural "still waiting for WAL summarization through %X/%X after %ld seconds"
-msgstr[0] "väntar fortfarande på WAL-summering till %X/%X efter %ld sekund"
-msgstr[1] "väntar fortfarande på WAL-summering till %X/%X efter %ld sekunder"
+msgid "still waiting for WAL summarization through %X/%08X after %ld second"
+msgid_plural "still waiting for WAL summarization through %X/%08X after %ld seconds"
+msgstr[0] "väntar fortfarande på WAL-summering till %X/%08X efter %ld sekund"
+msgstr[1] "väntar fortfarande på WAL-summering till %X/%08X efter %ld sekunder"
 
 #: postmaster/walsummarizer.c:760
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
-msgstr "Summering har nått %X/%X på disk och %X/%X i minnet."
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
+msgstr "Summering har nått %X/%08X på disk och %X/%08X i minnet."
 
 #: postmaster/walsummarizer.c:1000
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "kunde inte hitta en giltig post efter %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "kunde inte hitta en giltig post efter %X/%08X"
 
 #: postmaster/walsummarizer.c:1045
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "kunde inte läsa WAL från tidslinje %u vid %X/%X: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "kunde inte läsa WAL från tidslinje %u vid %X/%08X: %s"
 
 #: postmaster/walsummarizer.c:1051
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "kunde inte läsa WAL från tidslinje %u vid %X/%X"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "kunde inte läsa WAL från tidslinje %u vid %X/%08X"
 
 #: regex/regc_pg_locale.c:244
 #, c-format
@@ -20811,13 +20811,13 @@ msgstr "startar logisk avkodning för slot \"%s\""
 
 #: replication/logical/logical.c:630
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Strömmar transaktioner commit:ade efter %X/%X, läser WAL från %X/%X"
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Strömmar transaktioner commit:ade efter %X/%08X, läser WAL från %X/%08X"
 
 #: replication/logical/logical.c:778
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "slot \"%s\", utdata-plugin \"%s\", i callback:en %s, associerad LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "slot \"%s\", utdata-plugin \"%s\", i callback:en %s, associerad LSN %X/%08X"
 
 #: replication/logical/logical.c:784
 #, c-format
@@ -20915,8 +20915,8 @@ msgstr "kunde inte hitta ledig replikeringsplats, öka \"max_replication_slots\"
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "återställde replikeringstillstånd för nod %d till %X/%X"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "återställde replikeringstillstånd för nod %d till %X/%08X"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -21021,8 +21021,8 @@ msgstr "kunde inte synkronisera replikeringsslot \"%s\" då fjärrslotten ligger
 
 #: replication/logical/slotsync.c:217
 #, c-format
-msgid "The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u."
-msgstr "Fjärrslotten har LSN %X/%X och katalog-xmin %u men lokala slotten har LSN %X/%X och katalog-xmin %u."
+msgid "The remote slot has LSN %X/%08X and catalog xmin %u, but the local slot has LSN %X/%08X and catalog xmin %u."
+msgstr "Fjärrslotten har LSN %X/%08X och katalog-xmin %u men lokala slotten har LSN %X/%08X och katalog-xmin %u."
 
 #: replication/logical/slotsync.c:459
 #, c-format
@@ -21036,8 +21036,8 @@ msgstr "kunde inte synkronisera replikeringsslot \"%s\""
 
 #: replication/logical/slotsync.c:580
 #, c-format
-msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X."
-msgstr "Logisk avkodning kunde inte hitta en konsistent punkt från lokala slottens LSN %X/%X"
+msgid "Logical decoding could not find consistent point from local slot's LSN %X/%08X."
+msgstr "Logisk avkodning kunde inte hitta en konsistent punkt från lokala slottens LSN %X/%08X"
 
 #: replication/logical/slotsync.c:589
 #, c-format
@@ -21046,8 +21046,8 @@ msgstr "nyskapad replikeringsslot \"%s\" är redo för synk nu"
 
 #: replication/logical/slotsync.c:628
 #, c-format
-msgid "skipping slot synchronization because the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X"
-msgstr "hoppar över slotsynkronisering då den mottagna slottens synk-LSN %X/%X för slot \"%s\" är längre fram än standby-positionen %X/%X"
+msgid "skipping slot synchronization because the received slot sync LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X"
+msgstr "hoppar över slotsynkronisering då den mottagna slottens synk-LSN %X/%08X för slot \"%s\" är längre fram än standby-positionen %X/%08X"
 
 #: replication/logical/slotsync.c:650
 #, c-format
@@ -21157,8 +21157,8 @@ msgstr[1] "exporterade logisk avkodnings-snapshot: \"%s\" med %u transaktions-ID
 #: replication/logical/snapbuild.c:1404 replication/logical/snapbuild.c:1501
 #: replication/logical/snapbuild.c:2017
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "logisk avkodning hittade konsistent punkt vid %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "logisk avkodning hittade konsistent punkt vid %X/%08X"
 
 #: replication/logical/snapbuild.c:1406
 #, c-format
@@ -21167,8 +21167,8 @@ msgstr "Det finns inga körande transaktioner."
 
 #: replication/logical/snapbuild.c:1453
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "logisk avkodning hittade initial startpunkt vid %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "logisk avkodning hittade initial startpunkt vid %X/%08X"
 
 #: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479
 #, c-format
@@ -21177,8 +21177,8 @@ msgstr "Väntar på att transaktioner (cirka %d) äldre än %u skall gå klart."
 
 #: replication/logical/snapbuild.c:1477
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "logisk avkodning hittade initial konsistent punkt vid %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "logisk avkodning hittade initial konsistent punkt vid %X/%08X"
 
 #: replication/logical/snapbuild.c:1503
 #, c-format
@@ -21367,13 +21367,13 @@ msgstr "prenumeration \"%s\" har avaktiverats på grund av ett fel"
 
 #: replication/logical/worker.c:4806
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "logisk replikering börjar hoppa över transaktion vid LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "logisk replikering börjar hoppa över transaktion vid LSN %X/%08X"
 
 #: replication/logical/worker.c:4820
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "logisk replikering har slutfört överhoppande av transaktionen vid LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "logisk replikering har slutfört överhoppande av transaktionen vid LSN %X/%08X"
 
 #: replication/logical/worker.c:4902
 #, c-format
@@ -21382,8 +21382,8 @@ msgstr "överhoppnings-LSN för logiska prenumerationen \"%s\" har nollställts"
 
 #: replication/logical/worker.c:4903
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
-msgstr "Fjärrtransaktionens slut-WAL-position (LSN) %X/%X matchade inte överhoppnings-LSN %X/%X."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
+msgstr "Fjärrtransaktionens slut-WAL-position (LSN) %X/%08X matchade inte överhoppnings-LSN %X/%08X."
 
 #: replication/logical/worker.c:4940
 #, c-format
@@ -21397,8 +21397,8 @@ msgstr "processar fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"
 
 #: replication/logical/worker.c:4949
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
-msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" i transaktion %u blev klar vid %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" i transaktion %u blev klar vid %X/%08X"
 
 #: replication/logical/worker.c:4960
 #, c-format
@@ -21407,8 +21407,8 @@ msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandet
 
 #: replication/logical/worker.c:4967
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
-msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" i transaktion %u blev klart vid %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
+msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" i transaktion %u blev klart vid %X/%08X"
 
 #: replication/logical/worker.c:4978
 #, c-format
@@ -21417,8 +21417,8 @@ msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandet
 
 #: replication/logical/worker.c:4986
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
-msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" kolumn \"%s\" i transaktion %u blev klart vid %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "processande av fjärrdata för replikeringskälla \"%s\" vid meddelandetyp \"%s\" för replikeringsmålrelation \"%s.%s\" kolumn \"%s\" i transaktion %u blev klart vid %X/%08X"
 
 #: replication/pgoutput/pgoutput.c:322
 #, c-format
@@ -21598,10 +21598,10 @@ msgstr "Bara roller med attributet %s får använda replikeringsslottar."
 
 #: replication/slot.c:1498
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
-msgstr[0] "Slottens restart_lsn %X/%X överskrider gränsen på %llu byte."
-msgstr[1] "Slottens restart_lsn %X/%X överskrider gränsen på %llu bytes."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
+msgstr[0] "Slottens restart_lsn %X/%08X överskrider gränsen på %llu byte."
+msgstr[1] "Slottens restart_lsn %X/%08X överskrider gränsen på %llu bytes."
 
 #: replication/slot.c:1506
 #, c-format
@@ -21739,8 +21739,8 @@ msgstr "Denna slot har aldrig tidigare reserverat WAL eller så har den invalide
 
 #: replication/slotfuncs.c:566
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "kan inte flytta fram replikeringsslot till %X/%X, minimum är %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "kan inte flytta fram replikeringsslot till %X/%08X, minimum är %X/%08X"
 
 #: replication/slotfuncs.c:673
 #, c-format
@@ -21839,13 +21839,13 @@ msgstr "högsta tidslinjen %u i primären är efter återställningstidslinjen %
 
 #: replication/walreceiver.c:419
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "startade strömning av WAL från primären vid %X/%X på tidslinje %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "startade strömning av WAL från primären vid %X/%08X på tidslinje %u"
 
 #: replication/walreceiver.c:423
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "återstartade WAL-strömning vid %X/%X på tidslinje %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "återstartade WAL-strömning vid %X/%08X på tidslinje %u"
 
 #: replication/walreceiver.c:458
 #, c-format
@@ -21859,8 +21859,8 @@ msgstr "replikering avslutad av primär server"
 
 #: replication/walreceiver.c:503
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "Slut på WAL nådd på tidslinje %u vid %X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "Slut på WAL nådd på tidslinje %u vid %X/%08X."
 
 #: replication/walreceiver.c:593
 #, c-format
@@ -21909,18 +21909,18 @@ msgstr "kan inte använda logisk replikeringsslot för fysisk replikering"
 
 #: replication/walsender.c:919
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "efterfrågad startpunkt %X/%X på tidslinje %u finns inte i denna servers historik"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "efterfrågad startpunkt %X/%08X på tidslinje %u finns inte i denna servers historik"
 
 #: replication/walsender.c:922
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "Denna servers historik delade sig från tidslinje %u vid %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "Denna servers historik delade sig från tidslinje %u vid %X/%08X."
 
 #: replication/walsender.c:966
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "efterfrågad startpunkt %X/%X är längre fram än denna servers flush:ade WAL-skrivposition %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "efterfrågad startpunkt %X/%08X är längre fram än denna servers flush:ade WAL-skrivposition %X/%08X"
 
 #: replication/walsender.c:1160
 #, c-format
diff --git a/src/backend/po/tr.po b/src/backend/po/tr.po
index b791e886b9f..f0afc61fe8a 100644
--- a/src/backend/po/tr.po
+++ b/src/backend/po/tr.po
@@ -1450,13 +1450,13 @@ msgstr "WAL reading processor ayırma işlemi sırasında hata oluştu."
 
 #: access/transam/twophase.c:1401
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "%X/%X 'de WAL 'dan two-phase state okunamadı"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "%X/%08X 'de WAL 'dan two-phase state okunamadı"
 
 #: access/transam/twophase.c:1409
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "beklenen two-phase state verisi %X/%X 'de WAL içinde bulunmuyor."
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "beklenen two-phase state verisi %X/%08X 'de WAL içinde bulunmuyor."
 
 #: access/transam/twophase.c:1689
 #, c-format
@@ -1655,8 +1655,8 @@ msgstr "%s kayıt (log) dosyasına yazılamadı, offset %u, uzunluk %zu: %m"
 
 #: access/transam/xlog.c:2782
 #, c-format
-msgid "updated min recovery point to %X/%X on timeline %u"
-msgstr "min yeniden kurtarma noktası %u zaman çizelgesinde (timeline) %X/%X değerine güncellendi"
+msgid "updated min recovery point to %X/%08X on timeline %u"
+msgstr "min yeniden kurtarma noktası %u zaman çizelgesinde (timeline) %X/%08X değerine güncellendi"
 
 #: access/transam/xlog.c:3863 access/transam/xlogutils.c:703 replication/walsender.c:2445
 #, c-format
@@ -1705,8 +1705,8 @@ msgstr "yeni timeline %u veritabanı sistem timeline %u için geçerli bir alt (
 
 #: access/transam/xlog.c:4445
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "yeni %u zaman-çizelgesi (timeline) şimdiki %u veritabanı sistem zaman-çizelgesinden şimdiki %X/%X kurtarma noktasından önce çatallanmıştır"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "yeni %u zaman-çizelgesi (timeline) şimdiki %u veritabanı sistem zaman-çizelgesinden şimdiki %X/%08X kurtarma noktasından önce çatallanmıştır"
 
 #: access/transam/xlog.c:4464
 #, c-format
@@ -1898,8 +1898,8 @@ msgstr "kurtarma işlemi, tutarlı hale (consistency) erişilmesinden sonra duru
 
 #: access/transam/xlog.c:5641
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "kurtarma işlemi , \"%X/%X\" WAL konumundan önce duruyor"
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "kurtarma işlemi , \"%X/%08X\" WAL konumundan önce duruyor"
 
 #: access/transam/xlog.c:5727
 #, c-format
@@ -1918,8 +1918,8 @@ msgstr "kurtarma işlemi, \"%s\" geri yükleme noktasında duruyor, zaman %s"
 
 #: access/transam/xlog.c:5805
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "kurtarma işlemi , \"%X/%X\" WAL konumundan sonra duruyor"
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "kurtarma işlemi , \"%X/%08X\" WAL konumundan sonra duruyor"
 
 #: access/transam/xlog.c:5873
 #, c-format
@@ -2033,8 +2033,8 @@ msgstr "\"%s\"e geri getirme (point-in-time recovery) başlatılıyor"
 
 #: access/transam/xlog.c:6339
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "WAL konumu (LSN) \"%X/%X\"e geri getirme (point-in-time recovery) başlatılıyor"
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "WAL konumu (LSN) \"%X/%08X\"e geri getirme (point-in-time recovery) başlatılıyor"
 
 #: access/transam/xlog.c:6344
 #, c-format
@@ -2048,8 +2048,8 @@ msgstr "arşivden geri getirme başlatılıyor"
 
 #: access/transam/xlog.c:6401 access/transam/xlog.c:6533
 #, c-format
-msgid "checkpoint record is at %X/%X"
-msgstr "checkpoint kaydı %X/%X noktasındadır"
+msgid "checkpoint record is at %X/%08X"
+msgstr "checkpoint kaydı %X/%08X noktasındadır"
 
 #: access/transam/xlog.c:6415
 #, c-format
@@ -2104,13 +2104,13 @@ msgstr "talep edilmiş timeline %u bu sunucunun geçmişi (history) için geçer
 
 #: access/transam/xlog.c:6585
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "En son checkpoint %X/%X 'tedir (%u zaman-çizelgesinde (timeline)), fakat talep edilen zaman çizelgesinin geçmişinde, sunucu o zaman çizelgesinden %X/%X 'te çatallanmıştır."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "En son checkpoint %X/%08X 'tedir (%u zaman-çizelgesinde (timeline)), fakat talep edilen zaman çizelgesinin geçmişinde, sunucu o zaman çizelgesinden %X/%08X 'te çatallanmıştır."
 
 #: access/transam/xlog.c:6601
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "talep edilmiş %u zaman çizelgesi %X/%X asgari kurtarma noktasını içermiyor (%u zaman-çizelgesinde)"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "talep edilmiş %u zaman çizelgesi %X/%08X asgari kurtarma noktasını içermiyor (%u zaman-çizelgesinde)"
 
 #: access/transam/xlog.c:6632
 #, c-format
@@ -2154,8 +2154,8 @@ msgstr "hot standby için ilklendiriyor"
 
 #: access/transam/xlog.c:7036
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "redo başlangıcı %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "redo başlangıcı %X/%08X"
 
 #: access/transam/xlog.c:7260
 #, c-format
@@ -2164,8 +2164,8 @@ msgstr "talep edilen kurtarma durma noktası tutarlı (consistent) kurtarma nokt
 
 #: access/transam/xlog.c:7298
 #, c-format
-msgid "redo done at %X/%X"
-msgstr "redo bitişi %X/%X"
+msgid "redo done at %X/%08X"
+msgstr "redo bitişi %X/%08X"
 
 #: access/transam/xlog.c:7303
 #, c-format
@@ -2204,8 +2204,8 @@ msgstr "seçili yeni timeline ID: %u"
 
 #: access/transam/xlog.c:7878
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "%X/%X 'de tutarlı kurtarma haline ulaşılmıştır"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "%X/%08X 'de tutarlı kurtarma haline ulaşılmıştır"
 
 #: access/transam/xlog.c:8070
 #, c-format
@@ -2279,13 +2279,13 @@ msgstr "restartpoint (yeniden başlama noktası) atlanıyor, kurtarma zaten sona
 
 #: access/transam/xlog.c:9121
 #, c-format
-msgid "skipping restartpoint, already performed at %X/%X"
-msgstr "restartpoint (yeniden başlama noktası) atlanıyor, %X/%X de zaten gerçekleştirildi"
+msgid "skipping restartpoint, already performed at %X/%08X"
+msgstr "restartpoint (yeniden başlama noktası) atlanıyor, %X/%08X de zaten gerçekleştirildi"
 
 #: access/transam/xlog.c:9288
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "kurtarma yeniden başlangıç noktası: %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "kurtarma yeniden başlangıç noktası: %X/%08X"
 
 #: access/transam/xlog.c:9290
 #, c-format
@@ -2294,8 +2294,8 @@ msgstr "Son tamamlanan transaction %s kayıt zamanındaydı."
 
 #: access/transam/xlog.c:9424
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "\"%s\" kurtarma noktası (restore point)  %X/%X de oluşturumuş"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "\"%s\" kurtarma noktası (restore point)  %X/%08X de oluşturumuş"
 
 #: access/transam/xlog.c:9565
 #, c-format
@@ -2309,8 +2309,8 @@ msgstr "checkpoint kaydındaki beklenmeyen timeline ID %u (%u'dan sonra)"
 
 #: access/transam/xlog.c:9590
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "checkpoint kaydındaki beklenmeyen zaman çizelgesi ID'si %u, asgari kurtarma noktası %X/%X'e varmadan önce (%u zaman çizelgesinde)"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "checkpoint kaydındaki beklenmeyen zaman çizelgesi ID'si %u, asgari kurtarma noktası %X/%08X'e varmadan önce (%u zaman çizelgesinde)"
 
 #: access/transam/xlog.c:9666
 #, c-format
@@ -2465,8 +2465,8 @@ msgstr "\"%2$s\" dosyasında yedek zaman çizelgesi (timeline) %1$u"
 #. translator: %s is a WAL record description
 #: access/transam/xlog.c:11427
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "%X/%X 'de %s için WAL redo"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "%X/%08X 'de %s için WAL redo"
 
 #: access/transam/xlog.c:11476
 #, c-format
@@ -2635,48 +2635,48 @@ msgstr "sunucu %d saniye içinde yükseltilemedi (promote)"
 
 #: access/transam/xlogreader.c:299
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "%X/%X adresinde geçersiz kayıt offseti"
+msgid "invalid record offset at %X/%08X"
+msgstr "%X/%08X adresinde geçersiz kayıt offseti"
 
 #: access/transam/xlogreader.c:307
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord %X/%X tarafından talep edilmiştir"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord %X/%08X tarafından talep edilmiştir"
 
 #: access/transam/xlogreader.c:348 access/transam/xlogreader.c:645
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "%X/%X adresinde geçersiz kayıt uzunluğu: istenen %u, alınan %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "%X/%08X adresinde geçersiz kayıt uzunluğu: istenen %u, alınan %u"
 
 #: access/transam/xlogreader.c:372
 #, c-format
-msgid "record length %u at %X/%X too long"
+msgid "record length %u at %X/%08X too long"
 msgstr "%2$X/%3$X adresinde çok büyük kayıt uzunluğu: %1$u "
 
 #: access/transam/xlogreader.c:404
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%X de contrecord bayrağı (flag) bulunmuyor"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08X de contrecord bayrağı (flag) bulunmuyor"
 
 #: access/transam/xlogreader.c:417
 #, c-format
-msgid "invalid contrecord length %u at %X/%X"
-msgstr "%X/%X adresinde geçersiz %u contrecord uzunluğu"
+msgid "invalid contrecord length %u at %X/%08X"
+msgstr "%X/%08X adresinde geçersiz %u contrecord uzunluğu"
 
 #: access/transam/xlogreader.c:653
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "%2$X/%3$X adresinde geçersiz resource manager ID %1$u"
 
 #: access/transam/xlogreader.c:667 access/transam/xlogreader.c:684
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "geçersiz incorrect prev-link olan kayıt: %X/%X at %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "geçersiz incorrect prev-link olan kayıt: %X/%08X at %X/%08X"
 
 #: access/transam/xlogreader.c:721
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "resoource manager data checksum %X/%X kaydında geçersiz"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "resoource manager data checksum %X/%08X kaydında geçersiz"
 
 #: access/transam/xlogreader.c:758
 #, c-format
@@ -2705,8 +2705,8 @@ msgstr "WAL dosyası farklı veritabanı sisteminden: page header'da yanlış XL
 
 #: access/transam/xlogreader.c:842
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "beklenmeyen pageaddr %X/%X: log segmenti %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "beklenmeyen pageaddr %X/%08X: log segmenti %s, offset %u"
 
 #: access/transam/xlogreader.c:867
 #, c-format
@@ -2715,58 +2715,58 @@ msgstr "sıra dışı timeline ID %u (%u'dan sonra), bulunduğu log segmenti %s,
 
 #: access/transam/xlogreader.c:1112
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "%X/%X deki %u block_id değeri bozuk"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "%X/%08X deki %u block_id değeri bozuk"
 
 #: access/transam/xlogreader.c:1135
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA ayarlandı, fakat %X/%X de veri yok"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA ayarlandı, fakat %X/%08X de veri yok"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "BKPBLOCK_HAS_DATA ayarlanmadı, fakat veri uzunluğu %u (%X/%x de)"
 
 #: access/transam/xlogreader.c:1178
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE ayarlandı, fakat hole offset %u uzunluk %u  blok image uzunluğu %u (%X/%X de)"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE ayarlandı, fakat hole offset %u uzunluk %u  blok image uzunluğu %u (%X/%08X de)"
 
 #: access/transam/xlogreader.c:1194
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE  ayarlanmadı, fakat hole offset %u uzunluk %u (%X/%X de)"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE  ayarlanmadı, fakat hole offset %u uzunluk %u (%X/%08X de)"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED ayarlandı, fakat block image uzunluğu %u (%X/%X de)"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED ayarlandı, fakat block image uzunluğu %u (%X/%08X de)"
 
 #: access/transam/xlogreader.c:1224
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE ve BKPIMAGE_IS_COMPRESSED ayarlanmadı, fakat block image uzunluğu %u (%X/%X de)"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE ve BKPIMAGE_IS_COMPRESSED ayarlanmadı, fakat block image uzunluğu %u (%X/%08X de)"
 
 #: access/transam/xlogreader.c:1240
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL ayarlandı fakat %X/%X de önceki rel yok"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL ayarlandı fakat %X/%08X de önceki rel yok"
 
 #: access/transam/xlogreader.c:1252
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "%X/%X adresinde %u  block_id geçersiz"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "%X/%08X adresinde %u  block_id geçersiz"
 
 #: access/transam/xlogreader.c:1341
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "%X/%X adresinde geçersiz uzunlukta kayıt"
+msgid "record with invalid length at %X/%08X"
+msgstr "%X/%08X adresinde geçersiz uzunlukta kayıt"
 
 #: access/transam/xlogreader.c:1430
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "%X/%X adresinde (blok %d), geçersiz compressed image"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "%X/%08X adresinde (blok %d), geçersiz compressed image"
 
 #: access/transam/xlogutils.c:727 replication/walreceiver.c:959 replication/walsender.c:2462
 #, c-format
@@ -17569,12 +17569,12 @@ msgstr "\"%s\" slot'u için mantıksal kod çözme başlatılıyor"
 
 #: replication/logical/logical.c:443
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
 msgstr ""
 
 #: replication/logical/logical.c:593
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
 msgstr ""
 
 #: replication/logical/logical.c:600
@@ -17760,8 +17760,8 @@ msgstr[1] ""
 
 #: replication/logical/snapbuild.c:1270 replication/logical/snapbuild.c:1363 replication/logical/snapbuild.c:1917
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "mantıksal kod çözme (logical decoding) %X/%X de tutarlı nokta buldu"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "mantıksal kod çözme (logical decoding) %X/%08X de tutarlı nokta buldu"
 
 #: replication/logical/snapbuild.c:1272
 #, c-format
@@ -17770,8 +17770,8 @@ msgstr "Çalışan işlem (transaction ) yok."
 
 #: replication/logical/snapbuild.c:1314
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "mantıksal kod çözme (logical decoding) %X/%X de ilk başlangıç noktası buldu"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "mantıksal kod çözme (logical decoding) %X/%08X de ilk başlangıç noktası buldu"
 
 #: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340
 #, c-format
@@ -17780,8 +17780,8 @@ msgstr ""
 
 #: replication/logical/snapbuild.c:1338
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "mantıksal kod çözme (logical decoding) %X/%X de başlangıç için tutarlı nokta buldu"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "mantıksal kod çözme (logical decoding) %X/%08X de başlangıç için tutarlı nokta buldu"
 
 #: replication/logical/snapbuild.c:1365
 #, c-format
@@ -18087,7 +18087,7 @@ msgstr ""
 
 #: replication/slotfuncs.c:564
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
 msgstr ""
 
 #: replication/slotfuncs.c:670
@@ -18183,12 +18183,12 @@ msgstr "talep edilmiş timeline %u veritabanı sistem timeline %u için geçerli
 
 #: replication/walreceiver.c:369
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
 msgstr ""
 
 #: replication/walreceiver.c:374
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
 msgstr "%3$u zaman çielgesinde %1$X/%2$X konumunda WAL streaming yeniden başlatıldı"
 
 #: replication/walreceiver.c:403
@@ -18203,8 +18203,8 @@ msgstr "replikasyon birincil sunucu tarafından sonlandırıldı"
 
 #: replication/walreceiver.c:441
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "%u zaman çizelgesinde %X/%X konumunda WAL sonuna ulaşıldı."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "%u zaman çizelgesinde %X/%08X konumunda WAL sonuna ulaşıldı."
 
 #: replication/walreceiver.c:529
 #, c-format
@@ -18248,17 +18248,17 @@ msgstr "mantıksal replikasyon slot'u fiziksel replikasyon için kullanılamaz"
 
 #: replication/walsender.c:628
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
 msgstr ""
 
 #: replication/walsender.c:632
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
 msgstr ""
 
 #: replication/walsender.c:677
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
 msgstr ""
 
 #. translator: %s is a CREATE_REPLICATION_SLOT statement
@@ -26658,14 +26658,14 @@ msgstr "farklı bir veritabanından snapshot içeri aktarılamaz (import)"
 #~ msgid "removing transaction log backup history file \"%s\""
 #~ msgstr "\"%s\" transaction kayıt yedek dosyası kaldırılıyor"
 
-#~ msgid "incorrect hole size in record at %X/%X"
-#~ msgstr "%X/%X adresinde geçersiz boşluk boyutu"
+#~ msgid "incorrect hole size in record at %X/%08X"
+#~ msgstr "%X/%08X adresinde geçersiz boşluk boyutu"
 
-#~ msgid "incorrect total length in record at %X/%X"
-#~ msgstr "%X/%X adresinde geçersiz toplam uzunluk"
+#~ msgid "incorrect total length in record at %X/%08X"
+#~ msgstr "%X/%08X adresinde geçersiz toplam uzunluk"
 
-#~ msgid "invalid xlog switch record at %X/%X"
-#~ msgstr "%X/%X adresinde geçersiz xlog switch kaydı"
+#~ msgid "invalid xlog switch record at %X/%08X"
+#~ msgstr "%X/%08X adresinde geçersiz xlog switch kaydı"
 
 #~ msgid "there is no contrecord flag in log file %u, segment %u, offset %u"
 #~ msgstr "kayıt dosyası %u, segment %u, offset %u adresinde contrecord bulunamadı"
@@ -26720,8 +26720,8 @@ msgstr "farklı bir veritabanından snapshot içeri aktarılamaz (import)"
 #~ msgid "Lines should have the format parameter = 'value'."
 #~ msgstr "Satırların biçimi şöyle olmalıdır: parametre = 'değer'."
 
-#~ msgid "redo record is at %X/%X; shutdown %s"
-#~ msgstr "redo kaydı %X/%X; kapatma %s"
+#~ msgid "redo record is at %X/%08X; shutdown %s"
+#~ msgstr "redo kaydı %X/%08X; kapatma %s"
 
 #~ msgid "next transaction ID: %u/%u; next OID: %u"
 #~ msgstr "sıradaki transaction ID: %u/%u; sıradaki OID: %u"
@@ -28162,8 +28162,8 @@ msgstr "farklı bir veritabanından snapshot içeri aktarılamaz (import)"
 #~ msgid "invalid secondary checkpoint link in control file"
 #~ msgstr "kontrol dosyasındaki ikincil checkpoint bağlantısı geçersiz"
 
-#~ msgid "using previous checkpoint record at %X/%X"
-#~ msgstr "%X/%X adresindeki eski checkpoint kaydı kullanılıyor"
+#~ msgid "using previous checkpoint record at %X/%08X"
+#~ msgstr "%X/%08X adresindeki eski checkpoint kaydı kullanılıyor"
 
 #~ msgid "The database cluster was initialized with XLOG_SEG_SIZE %d, but the server was compiled with XLOG_SEG_SIZE %d."
 #~ msgstr "Veritabanı clusteri XLOG_SEG_SIZE %d ile ilklendirilmiştir, ancak sunucu  XLOG_SEG_SIZE %d ile derlenmiştir."
diff --git a/src/backend/po/uk.po b/src/backend/po/uk.po
index 6c4c0add9ee..634e833718c 100644
--- a/src/backend/po/uk.po
+++ b/src/backend/po/uk.po
@@ -2199,18 +2199,18 @@ msgstr "Не вдалося розмістити обробник журналу
 
 #: access/transam/twophase.c:1445
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X: %s"
-msgstr "не вдалося прочитати 2-фазовий стан з WAL при %X/%X: %s"
+msgid "could not read two-phase state from WAL at %X/%08X: %s"
+msgstr "не вдалося прочитати 2-фазовий стан з WAL при %X/%08X: %s"
 
 #: access/transam/twophase.c:1450
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "не вдалося прочитати 2-фазовий стан з WAL при %X/%X"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "не вдалося прочитати 2-фазовий стан з WAL при %X/%08X"
 
 #: access/transam/twophase.c:1458
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "очікувані дані 2-фазного стану відсутні в WAL при %X/%X"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "очікувані дані 2-фазного стану відсутні в WAL при %X/%08X"
 
 #: access/transam/twophase.c:1754
 #, c-format
@@ -2268,8 +2268,8 @@ msgstr "не вдалося відновити файл 2-фазового ст
 
 #: access/transam/twophase.c:2525
 #, c-format
-msgid "Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk."
-msgstr "Файл 2-фазового стану був знайдений в запису WAL %X/%X, але ця транзакція вже відновлена з диску."
+msgid "Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk."
+msgstr "Файл 2-фазового стану був знайдений в запису WAL %X/%08X, але ця транзакція вже відновлена з диску."
 
 #: access/transam/twophase.c:2533 storage/file/fd.c:514 utils/fmgr/dfmgr.c:209
 #, c-format
@@ -2433,13 +2433,13 @@ msgstr "в одній транзакції не може бути більше 2
 
 #: access/transam/xlog.c:1541
 #, c-format
-msgid "request to flush past end of generated WAL; request %X/%X, current position %X/%X"
-msgstr "запит на очищення минулого кінця згенерованого WAL; запит %X/%X, поточна позиція %X/%X"
+msgid "request to flush past end of generated WAL; request %X/%08X, current position %X/%08X"
+msgstr "запит на очищення минулого кінця згенерованого WAL; запит %X/%08X, поточна позиція %X/%08X"
 
 #: access/transam/xlog.c:1768
 #, c-format
-msgid "cannot read past end of generated WAL: requested %X/%X, current position %X/%X"
-msgstr "не вдалося прочитати останній кінець згенерованого WAL: запит %X/%X, поточна позиція %X/%X"
+msgid "cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X"
+msgstr "не вдалося прочитати останній кінець згенерованого WAL: запит %X/%08X, поточна позиція %X/%08X"
 
 #: access/transam/xlog.c:2209 access/transam/xlog.c:4500
 #, c-format
@@ -2752,13 +2752,13 @@ msgstr "початок контрольної точки: %s%s%s%s%s%s%s%s"
 
 #: access/transam/xlog.c:6703
 #, c-format
-msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "точка перезапуску завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб; lsn=%X/%X, lsn повтору=%X/%X"
+msgid "restartpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "точка перезапуску завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб; lsn=%X/%08X, lsn повтору=%X/%08X"
 
 #: access/transam/xlog.c:6726
 #, c-format
-msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X"
-msgstr "контрольна точка завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб; lsn=%X/%X, lsn повтору=%X/%X"
+msgid "checkpoint complete: wrote %d buffers (%.1f%%); %d WAL file(s) added, %d removed, %d recycled; write=%ld.%03d s, sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X"
+msgstr "контрольна точка завершена: записано %d буферів (%.1f%%); %d WAL файлів додано, %d видалено, %d перероблених; запис=%ld.%03d сек, синхронізація=%ld.%03d сек, усього=%ld.%03d сек; файли синхронізації=%d, найдовший=%ld.%03d сек, середній=%ld.%03d сек; дистанція=%d кб, приблизно=%d кб; lsn=%X/%08X, lsn повтору=%X/%08X"
 
 #: access/transam/xlog.c:7208
 #, c-format
@@ -2767,8 +2767,8 @@ msgstr "під час того вимкнення БД помічено конк
 
 #: access/transam/xlog.c:7793
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "відновлення збереженої точки %X/%X"
+msgid "recovery restart point at %X/%08X"
+msgstr "відновлення збереженої точки %X/%08X"
 
 #: access/transam/xlog.c:7795
 #, c-format
@@ -2777,8 +2777,8 @@ msgstr "Остання завершена транзакція була в %s."
 
 #: access/transam/xlog.c:8057
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "точка відновлення \"%s\" створена в %X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "точка відновлення \"%s\" створена в %X/%08X"
 
 #: access/transam/xlog.c:8264
 #, c-format
@@ -3041,53 +3041,53 @@ msgstr "\"recovery_prefetch\" не підтримується на платфо
 
 #: access/transam/xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "неприпустиме зміщення запису в %X/%X: очікувалось хоча б %u, отримано %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "неприпустиме зміщення запису в %X/%08X: очікувалось хоча б %u, отримано %u"
 
 #: access/transam/xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "по зсуву %X/%X запитано продовження запису"
+msgid "contrecord is requested by %X/%08X"
+msgstr "по зсуву %X/%08X запитано продовження запису"
 
 #: access/transam/xlogreader.c:669 access/transam/xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "неприпустима довжина запису %X/%X: очікувалась мінімум %u, отримано %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "неприпустима довжина запису %X/%08X: очікувалась мінімум %u, отримано %u"
 
 #: access/transam/xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "немає прапорця contrecord в позиції %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "немає прапорця contrecord в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%08X"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "невірний ID менеджера ресурсів %u в %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "невірний ID менеджера ресурсів %u в %X/%08X"
 
 #: access/transam/xlogreader.c:1155 access/transam/xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "запис з неправильним попереднім посиланням %X/%X на %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "запис з неправильним попереднім посиланням %X/%08X на %X/%08X"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%08X"
 
 #: access/transam/xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "невірне магічне число %04X в сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "невірне магічне число %04X в сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: access/transam/xlogreader.c:1258 access/transam/xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "невірні інформаційні біти %04X в сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "невірні інформаційні біти %04X в сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: access/transam/xlogreader.c:1274
 #, c-format
@@ -3106,63 +3106,63 @@ msgstr "Файл WAL належить іншій системі баз дани
 
 #: access/transam/xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "неочікуваний pageaddr %X/%X у сегменті WAL %s, LSN %X/%X, зміщення %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "неочікуваний pageaddr %X/%08X у сегменті WAL %s, LSN %X/%08X, зміщення %u"
 
 #: access/transam/xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "порушення послідовності ID лінії часу %u (після %u) у сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "порушення послідовності ID лінії часу %u (після %u) у сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: access/transam/xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "ідентифікатор блока %u out-of-order в позиції %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "ідентифікатор блока %u out-of-order в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_COMPRESSED не встановлені, але довжина образу блока дорівнює %u в позиції %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_COMPRESSED не встановлені, але довжина образу блока дорівнює %u в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "невірний ідентифікатор блоку %u в позиції %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "невірний ідентифікатор блоку %u в позиції %X/%08X"
 
 #: access/transam/xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "запис з невірною довжиною на %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "запис з невірною довжиною на %X/%08X"
 
 #: access/transam/xlogreader.c:1982
 #, c-format
@@ -3171,38 +3171,38 @@ msgstr "не вдалося знайти блок резервної копії
 
 #: access/transam/xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "не вдалося відновити зображення %X/%X з недійсним вказаним блоком %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "не вдалося відновити зображення %X/%08X з недійсним вказаним блоком %d"
 
 #: access/transam/xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "не вдалося відновити зображення %X/%X з недійсним станом, блок %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "не вдалося відновити зображення %X/%08X з недійсним станом, блок %d"
 
 #: access/transam/xlogreader.c:2100 access/transam/xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "не вдалося відновити зображення в %X/%X, стиснуте %s, не підтримується збіркою, блок %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "не вдалося відновити зображення в %X/%08X, стиснуте %s, не підтримується збіркою, блок %d"
 
 #: access/transam/xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "не вдалося відновити зображення %X/%X стиснуте з невідомим методом, блок %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "не вдалося відновити зображення %X/%08X стиснуте з невідомим методом, блок %d"
 
 #: access/transam/xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "не вдалося розпакувати зображення на %X/%X, блок %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "не вдалося розпакувати зображення на %X/%08X, блок %d"
 
 #: access/transam/xlogrecovery.c:617
 #, c-format
-msgid "starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u"
-msgstr "стартуємо відновлення резервної копії з LSN повторення %X/%X, LSN контрольної точки %X/%X, на часовій шкалі з ID %u"
+msgid "starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u"
+msgstr "стартуємо відновлення резервної копії з LSN повторення %X/%08X, LSN контрольної точки %X/%08X, на часовій шкалі з ID %u"
 
 #: access/transam/xlogrecovery.c:649
 #, c-format
-msgid "could not find redo location %X/%X referenced by checkpoint record at %X/%X"
-msgstr "не вдалося знайти положення REDO %X/%X, вказане записом контрольної точки в %X/%X"
+msgid "could not find redo location %X/%08X referenced by checkpoint record at %X/%08X"
+msgstr "не вдалося знайти положення REDO %X/%08X, вказане записом контрольної точки в %X/%08X"
 
 #: access/transam/xlogrecovery.c:651 access/transam/xlogrecovery.c:662
 #, c-format
@@ -3215,8 +3215,8 @@ msgstr "Якщо ви відновлюєтеся з резервної копі
 
 #: access/transam/xlogrecovery.c:660
 #, c-format
-msgid "could not locate required checkpoint record at %X/%X"
-msgstr "не вдалося знайти запис необхідної контрольної точки в %X/%X"
+msgid "could not locate required checkpoint record at %X/%08X"
+msgstr "не вдалося знайти запис необхідної контрольної точки в %X/%08X"
 
 #: access/transam/xlogrecovery.c:690 commands/tablespace.c:664
 #, c-format
@@ -3240,13 +3240,13 @@ msgstr "Неможливо перейменувати файл \"%s\" на \"%s\
 
 #: access/transam/xlogrecovery.c:770
 #, c-format
-msgid "restarting backup recovery with redo LSN %X/%X"
-msgstr "перезапуск відновлення резервної копії на LSN %X/%X"
+msgid "restarting backup recovery with redo LSN %X/%08X"
+msgstr "перезапуск відновлення резервної копії на LSN %X/%08X"
 
 #: access/transam/xlogrecovery.c:795
 #, c-format
-msgid "could not locate a valid checkpoint record at %X/%X"
-msgstr "не вдалося знайти запис допустимої контрольної точки в %X/%X"
+msgid "could not locate a valid checkpoint record at %X/%08X"
+msgstr "не вдалося знайти запис допустимої контрольної точки в %X/%08X"
 
 #: access/transam/xlogrecovery.c:806
 #, c-format
@@ -3270,8 +3270,8 @@ msgstr "починається відновлення точки в часі д
 
 #: access/transam/xlogrecovery.c:821
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "починається відновлення точки в часі до локації WAL (LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "починається відновлення точки в часі до локації WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:825
 #, c-format
@@ -3290,13 +3290,13 @@ msgstr "запитувана лінія часу %u не є відгалужен
 
 #: access/transam/xlogrecovery.c:851
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "Остання контрольна точка %X/%X на лінії часу %u, але в історії запитуваної лінії часу сервер відгалузився з цієї лінії в %X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "Остання контрольна точка %X/%08X на лінії часу %u, але в історії запитуваної лінії часу сервер відгалузився з цієї лінії в %X/%08X."
 
 #: access/transam/xlogrecovery.c:865
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "запитувана лінія часу %u не містить мінімальну точку відновлення %X/%X на лінії часу %u"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "запитувана лінія часу %u не містить мінімальну точку відновлення %X/%08X на лінії часу %u"
 
 #: access/transam/xlogrecovery.c:893
 #, c-format
@@ -3387,18 +3387,18 @@ msgstr "Використовуйте pg_combinebackup для відновлен
 
 #: access/transam/xlogrecovery.c:1717
 #, c-format
-msgid "unexpected record type found at redo point %X/%X"
-msgstr "знайдено неочікуваний тип запису в точці повторення %X/%X"
+msgid "unexpected record type found at redo point %X/%08X"
+msgstr "знайдено неочікуваний тип запису в точці повторення %X/%08X"
 
 #: access/transam/xlogrecovery.c:1740
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "запис REDO починається з %X/%X"
+msgid "redo starts at %X/%08X"
+msgstr "запис REDO починається з %X/%08X"
 
 #: access/transam/xlogrecovery.c:1753
 #, c-format
-msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X"
-msgstr "запис REDO триває, минуло часу: %ld.%02d s, поточний LSN: %X/%X"
+msgid "redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X"
+msgstr "запис REDO триває, минуло часу: %ld.%02d s, поточний LSN: %X/%08X"
 
 #: access/transam/xlogrecovery.c:1843
 #, c-format
@@ -3407,8 +3407,8 @@ msgstr "запитувана точка відновлення передує у
 
 #: access/transam/xlogrecovery.c:1875
 #, c-format
-msgid "redo done at %X/%X system usage: %s"
-msgstr "повторно виконано через %X/%X системне використання: %s"
+msgid "redo done at %X/%08X system usage: %s"
+msgstr "повторно виконано через %X/%08X системне використання: %s"
 
 #: access/transam/xlogrecovery.c:1881
 #, c-format
@@ -3427,8 +3427,8 @@ msgstr "відновлення завершилось до досягення н
 
 #: access/transam/xlogrecovery.c:2095
 #, c-format
-msgid "successfully skipped missing contrecord at %X/%X, overwritten at %s"
-msgstr "успішно пропущений відсутній contrecord при %X/%X, перезаписано на %s"
+msgid "successfully skipped missing contrecord at %X/%08X, overwritten at %s"
+msgstr "успішно пропущений відсутній contrecord при %X/%08X, перезаписано на %s"
 
 #: access/transam/xlogrecovery.c:2162
 #, c-format
@@ -3447,19 +3447,19 @@ msgstr "Видаліть ті каталоги, або тимчасово вст
 
 #: access/transam/xlogrecovery.c:2217
 #, c-format
-msgid "completed backup recovery with redo LSN %X/%X and end LSN %X/%X"
-msgstr "завершено відновлення резервної копії з LSN повторення %X/%X і LSN закінчення %X/%X"
+msgid "completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X"
+msgstr "завершено відновлення резервної копії з LSN повторення %X/%08X і LSN закінчення %X/%08X"
 
 #: access/transam/xlogrecovery.c:2247
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "узгоджений стан відновлення досягнутий %X/%X"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "узгоджений стан відновлення досягнутий %X/%08X"
 
 #. translator: %s is a WAL record description
 #: access/transam/xlogrecovery.c:2285
 #, c-format
-msgid "WAL redo at %X/%X for %s"
-msgstr "запис REDO в WAL в позиції %X/%X для %s"
+msgid "WAL redo at %X/%08X for %s"
+msgstr "запис REDO в WAL в позиції %X/%08X для %s"
 
 #: access/transam/xlogrecovery.c:2383
 #, c-format
@@ -3473,8 +3473,8 @@ msgstr "неочікуваний ID лінії часу %u (після %u) в з
 
 #: access/transam/xlogrecovery.c:2408
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
-msgstr "неочікуваний ID лінії часу %u в записі контрольної точки, до досягнення мінімальної точки відновлення %X/%X на лінії часу %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
+msgstr "неочікуваний ID лінії часу %u в записі контрольної точки, до досягнення мінімальної точки відновлення %X/%08X на лінії часу %u"
 
 #: access/transam/xlogrecovery.c:2592 access/transam/xlogrecovery.c:2868
 #, c-format
@@ -3483,8 +3483,8 @@ msgstr "відновлення зупиняється після досягне
 
 #: access/transam/xlogrecovery.c:2613
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "відновлення зупиняється перед позицією WAL (LSN) \"%X/%X\""
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "відновлення зупиняється перед позицією WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2703
 #, c-format
@@ -3503,8 +3503,8 @@ msgstr "відновлення припиняється в точці відно
 
 #: access/transam/xlogrecovery.c:2781
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "відновлення припиняється пісня локації WAL (LSN) \"%X/%X\""
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "відновлення припиняється пісня локації WAL (LSN) \"%X/%08X\""
 
 #: access/transam/xlogrecovery.c:2848
 #, c-format
@@ -3538,18 +3538,18 @@ msgstr "Виконайте pg_wal_replay_resume(), щоб продовжити."
 
 #: access/transam/xlogrecovery.c:3205
 #, c-format
-msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "неочікуваний ID лінії часу %u в сегменті WAL %s, LSN %X/%X, offset %u"
+msgid "unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "неочікуваний ID лінії часу %u в сегменті WAL %s, LSN %X/%08X, offset %u"
 
 #: access/transam/xlogrecovery.c:3413
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: %m"
-msgstr "не вдалося прочитати сегмент журналу %s, LSN %X/%X, зсув %u: %m"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: %m"
+msgstr "не вдалося прочитати сегмент журналу %s, LSN %X/%08X, зсув %u: %m"
 
 #: access/transam/xlogrecovery.c:3420
 #, c-format
-msgid "could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu"
-msgstr "не вдалося прочитати сегмент WAL %s, LSN %X/%X, зсув %u: прочитано %d з %zu"
+msgid "could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu"
+msgstr "не вдалося прочитати сегмент WAL %s, LSN %X/%08X, зсув %u: прочитано %d з %zu"
 
 #: access/transam/xlogrecovery.c:4060
 #, c-format
@@ -3583,8 +3583,8 @@ msgstr "нова лінія часу %u не є дочірньою для лін
 
 #: access/transam/xlogrecovery.c:4158
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
-msgstr "нова лінія часу %u відгалузилась від поточної лінії часу бази даних %u до поточної точки відновлення %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
+msgstr "нова лінія часу %u відгалузилась від поточної лінії часу бази даних %u до поточної точки відновлення %X/%08X"
 
 #: access/transam/xlogrecovery.c:4177
 #, c-format
@@ -3898,18 +3898,18 @@ msgstr "часову шкалу %u знайдено в маніфесті, ал
 
 #: backup/basebackup_incremental.c:414
 #, c-format
-msgid "manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "маніфест вимагає WAL з початкової шкали %u, починаючи з %X/%X, але ця шкала починається з %X/%X"
+msgid "manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "маніфест вимагає WAL з початкової шкали %u, починаючи з %X/%08X, але ця шкала починається з %X/%08X"
 
 #: backup/basebackup_incremental.c:424
 #, c-format
-msgid "manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X"
-msgstr "маніфест вимагає WAL зі шкали продовження %u, починаючи з %X/%X, але ця шкала починається з %X/%X"
+msgid "manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X"
+msgstr "маніфест вимагає WAL зі шкали продовження %u, починаючи з %X/%08X, але ця шкала починається з %X/%08X"
 
 #: backup/basebackup_incremental.c:435
 #, c-format
-msgid "manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X"
-msgstr "маніфест вимагає WAL з кінцевої шкали часу %u, що закінчується на %X/%X, але ця резервна копія починається з %X/%X"
+msgid "manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X"
+msgstr "маніфест вимагає WAL з кінцевої шкали часу %u, що закінчується на %X/%08X, але ця резервна копія починається з %X/%08X"
 
 #: backup/basebackup_incremental.c:439
 #, c-format
@@ -3918,23 +3918,23 @@ msgstr "Це може статися з інкрементними резерв
 
 #: backup/basebackup_incremental.c:446
 #, c-format
-msgid "manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X"
-msgstr "маніфест вимагає WAL з не фінальної лінійки %u, що закінчується на %X/%X, але цей сервер перемкнув лінійки на %X/%X"
+msgid "manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X"
+msgstr "маніфест вимагає WAL з не фінальної лінійки %u, що закінчується на %X/%08X, але цей сервер перемкнув лінійки на %X/%08X"
 
 #: backup/basebackup_incremental.c:527
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist"
-msgstr "Зведення WAL потрібні на часовій шкалі %u від %X/%X до %X/%X, але зведень для цієї шкали та діапазону LSN не існує"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist"
+msgstr "Зведення WAL потрібні на часовій шкалі %u від %X/%08X до %X/%08X, але зведень для цієї шкали та діапазону LSN не існує"
 
 #: backup/basebackup_incremental.c:534
 #, c-format
-msgid "WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete"
-msgstr "Зведення WAL потрібні на часовій шкалі %u від %X/%X до %X/%X, але зведення для цієї часової шкали та діапазону LSN є неповними"
+msgid "WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete"
+msgstr "Зведення WAL потрібні на часовій шкалі %u від %X/%08X до %X/%08X, але зведення для цієї часової шкали та діапазону LSN є неповними"
 
 #: backup/basebackup_incremental.c:538
 #, c-format
-msgid "The first unsummarized LSN in this range is %X/%X."
-msgstr "Перший не підсумований LSN у цьому діапазоні - %X/%X."
+msgid "The first unsummarized LSN in this range is %X/%08X."
+msgstr "Перший не підсумований LSN у цьому діапазоні - %X/%08X."
 
 #: backup/basebackup_incremental.c:938
 #, c-format
@@ -10322,8 +10322,8 @@ msgstr "Використайте ALTER SUBSCRIPTION ... REFRESH з параме
 
 #: commands/subscriptioncmds.c:1473
 #, c-format
-msgid "skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X"
-msgstr "пропустити розташування WAL (LSN %X/%X) повинно бути більше, ніж origin LSN %X/%X"
+msgid "skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X"
+msgstr "пропустити розташування WAL (LSN %X/%08X) повинно бути більше, ніж origin LSN %X/%08X"
 
 #: commands/subscriptioncmds.c:1594
 #, c-format
@@ -19950,37 +19950,37 @@ msgstr "Підбиття підсумків WAL не просувається"
 
 #: postmaster/walsummarizer.c:741
 #, c-format
-msgid "Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory."
-msgstr "Підсумовування потрібне через %X/%X, але воно застрягло на %X/%X на диску та %X/%X у пам'яті."
+msgid "Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory."
+msgstr "Підсумовування потрібне через %X/%08X, але воно застрягло на %X/%08X на диску та %X/%08X у пам'яті."
 
 #: postmaster/walsummarizer.c:755
 #, c-format
-msgid "still waiting for WAL summarization through %X/%X after %ld second"
-msgid_plural "still waiting for WAL summarization through %X/%X after %ld seconds"
-msgstr[0] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунду"
-msgstr[1] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунди"
-msgstr[2] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунд"
-msgstr[3] "все ще чекає на підбиття підсумків WAL через %X/%X через %ld секунд"
+msgid "still waiting for WAL summarization through %X/%08X after %ld second"
+msgid_plural "still waiting for WAL summarization through %X/%08X after %ld seconds"
+msgstr[0] "все ще чекає на підбиття підсумків WAL через %X/%08X через %ld секунду"
+msgstr[1] "все ще чекає на підбиття підсумків WAL через %X/%08X через %ld секунди"
+msgstr[2] "все ще чекає на підбиття підсумків WAL через %X/%08X через %ld секунд"
+msgstr[3] "все ще чекає на підбиття підсумків WAL через %X/%08X через %ld секунд"
 
 #: postmaster/walsummarizer.c:760
 #, c-format
-msgid "Summarization has reached %X/%X on disk and %X/%X in memory."
-msgstr "Підсумок досягнув %X/%X на диску та %X/%X у пам'яті."
+msgid "Summarization has reached %X/%08X on disk and %X/%08X in memory."
+msgstr "Підсумок досягнув %X/%08X на диску та %X/%08X у пам'яті."
 
 #: postmaster/walsummarizer.c:1000
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "не вдалося знайти припустимий запис після %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "не вдалося знайти припустимий запис після %X/%08X"
 
 #: postmaster/walsummarizer.c:1045
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X: %s"
-msgstr "не вдалося прочитати WAL з часової шкали %u за адресою %X/%X: %s"
+msgid "could not read WAL from timeline %u at %X/%08X: %s"
+msgstr "не вдалося прочитати WAL з часової шкали %u за адресою %X/%08X: %s"
 
 #: postmaster/walsummarizer.c:1051
 #, c-format
-msgid "could not read WAL from timeline %u at %X/%X"
-msgstr "не вдалося прочитати WAL з часової шкали %u на %X/%X"
+msgid "could not read WAL from timeline %u at %X/%08X"
+msgstr "не вдалося прочитати WAL з часової шкали %u на %X/%08X"
 
 #: regex/regc_pg_locale.c:244
 #, c-format
@@ -20271,13 +20271,13 @@ msgstr "початок логічного декодування для слот
 
 #: replication/logical/logical.c:630
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "Потокове передавання транзакцій, що затверджені, після %X/%X, читання WAL з %X/%X."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "Потокове передавання транзакцій, що затверджені, після %X/%08X, читання WAL з %X/%08X."
 
 #: replication/logical/logical.c:778
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "слот \"%s\", плагін виходу \"%s\", у зворотньому виклику %s, пов'язаний номер LSN %X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "слот \"%s\", плагін виходу \"%s\", у зворотньому виклику %s, пов'язаний номер LSN %X/%08X"
 
 #: replication/logical/logical.c:784
 #, c-format
@@ -20375,8 +20375,8 @@ msgstr "не вдалося знайти вільний слот для стан
 
 #: replication/logical/origin.c:806
 #, c-format
-msgid "recovered replication state of node %d to %X/%X"
-msgstr "відновлений стан реплікації вузла %d в %X/%X"
+msgid "recovered replication state of node %d to %X/%08X"
+msgstr "відновлений стан реплікації вузла %d в %X/%08X"
 
 #: replication/logical/origin.c:816
 #, c-format
@@ -20483,8 +20483,8 @@ msgstr "не вдалося синхронізувати слот репліка
 
 #: replication/logical/slotsync.c:217
 #, c-format
-msgid "The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u."
-msgstr "Віддалений слот має LSN %X/%X і каталог xmin %u, а локальний слот має LSN %X/%X і каталог xmin %u."
+msgid "The remote slot has LSN %X/%08X and catalog xmin %u, but the local slot has LSN %X/%08X and catalog xmin %u."
+msgstr "Віддалений слот має LSN %X/%08X і каталог xmin %u, а локальний слот має LSN %X/%08X і каталог xmin %u."
 
 #: replication/logical/slotsync.c:459
 #, c-format
@@ -20498,8 +20498,8 @@ msgstr "не вдалося синхронізувати слот репліка
 
 #: replication/logical/slotsync.c:580
 #, c-format
-msgid "Logical decoding could not find consistent point from local slot's LSN %X/%X."
-msgstr "Логічне декодування не може знайти стійку точку з локальних LSN %X/%X."
+msgid "Logical decoding could not find consistent point from local slot's LSN %X/%08X."
+msgstr "Логічне декодування не може знайти стійку точку з локальних LSN %X/%08X."
 
 #: replication/logical/slotsync.c:589
 #, c-format
@@ -20508,8 +20508,8 @@ msgstr "новостворений слот реплікації \"%s\" гото
 
 #: replication/logical/slotsync.c:628
 #, c-format
-msgid "skipping slot synchronization because the received slot sync LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X"
-msgstr "пропуск синхронізації слотів, оскільки отримана синхронізація слотів LSN %X/%X для слота \"%s\" випереджає позицію очікування %X/%X"
+msgid "skipping slot synchronization because the received slot sync LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X"
+msgstr "пропуск синхронізації слотів, оскільки отримана синхронізація слотів LSN %X/%08X для слота \"%s\" випереджає позицію очікування %X/%08X"
 
 #: replication/logical/slotsync.c:650
 #, c-format
@@ -20621,8 +20621,8 @@ msgstr[3] "експортовано знімок логічного декоду
 #: replication/logical/snapbuild.c:1404 replication/logical/snapbuild.c:1501
 #: replication/logical/snapbuild.c:2017
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "узгодження процесу логічного кодування знайдено в точці %X/%X"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "узгодження процесу логічного кодування знайдено в точці %X/%08X"
 
 #: replication/logical/snapbuild.c:1406
 #, c-format
@@ -20631,8 +20631,8 @@ msgstr "Більше активних транзакцій немає."
 
 #: replication/logical/snapbuild.c:1453
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "початкова стартова точка процесу логічного декодування знайдена в точці %X/%X"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "початкова стартова точка процесу логічного декодування знайдена в точці %X/%08X"
 
 #: replication/logical/snapbuild.c:1455 replication/logical/snapbuild.c:1479
 #, c-format
@@ -20641,8 +20641,8 @@ msgstr "Очікування транзакцій (приблизно %d) ста
 
 #: replication/logical/snapbuild.c:1477
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "початкова точка узгодження процесу логічного кодування знайдена в точці %X/%X"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "початкова точка узгодження процесу логічного кодування знайдена в точці %X/%08X"
 
 #: replication/logical/snapbuild.c:1503
 #, c-format
@@ -20831,13 +20831,13 @@ msgstr "підписка \"%s\" була відключена через пом
 
 #: replication/logical/worker.c:4806
 #, c-format
-msgid "logical replication starts skipping transaction at LSN %X/%X"
-msgstr "логічна реплікація починає пропускати транзакцію в LSN %X/%X"
+msgid "logical replication starts skipping transaction at LSN %X/%08X"
+msgstr "логічна реплікація починає пропускати транзакцію в LSN %X/%08X"
 
 #: replication/logical/worker.c:4820
 #, c-format
-msgid "logical replication completed skipping transaction at LSN %X/%X"
-msgstr "логічна реплікація завершила пропускати транзакцію в LSN %X/%X"
+msgid "logical replication completed skipping transaction at LSN %X/%08X"
+msgstr "логічна реплікація завершила пропускати транзакцію в LSN %X/%08X"
 
 #: replication/logical/worker.c:4902
 #, c-format
@@ -20846,8 +20846,8 @@ msgstr "очищено LSN пропуску підписки \"%s\""
 
 #: replication/logical/worker.c:4903
 #, c-format
-msgid "Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X."
-msgstr "Кінцеве розташування WAL віддаленої транзакції (LSN) %X/%X не відповідає skip-LSN %X/%X."
+msgid "Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X."
+msgstr "Кінцеве розташування WAL віддаленої транзакції (LSN) %X/%08X не відповідає skip-LSN %X/%08X."
 
 #: replication/logical/worker.c:4940
 #, c-format
@@ -20861,8 +20861,8 @@ msgstr "обробка віддалених даних для джерела р
 
 #: replication/logical/worker.c:4949
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X"
-msgstr "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" у транзакції %u завершено о %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" у транзакції %u завершено о %X/%08X"
 
 #: replication/logical/worker.c:4960
 #, c-format
@@ -20871,8 +20871,8 @@ msgstr "обробка віддалених даних для джерела р
 
 #: replication/logical/worker.c:4967
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X"
-msgstr "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" в транзакції %u завершено о %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X"
+msgstr "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" в транзакції %u завершено о %X/%08X"
 
 #: replication/logical/worker.c:4978
 #, c-format
@@ -20881,8 +20881,8 @@ msgstr "обробка віддалених даних для джерела р
 
 #: replication/logical/worker.c:4986
 #, c-format
-msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X"
-msgstr "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" стовпчик \"%s\" у транзакції %u завершено о %X/%X"
+msgid "processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X"
+msgstr "обробку віддалених даних для джерела реплікації \"%s\" під час повідомлення типу \"%s\" для цільового відношення реплікації \"%s.%s\" стовпчик \"%s\" у транзакції %u завершено о %X/%08X"
 
 #: replication/pgoutput/pgoutput.c:315
 #, c-format
@@ -21062,12 +21062,12 @@ msgstr "Тільки ролі з атрибутом %s можуть викори
 
 #: replication/slot.c:1498
 #, c-format
-msgid "The slot's restart_lsn %X/%X exceeds the limit by %llu byte."
-msgid_plural "The slot's restart_lsn %X/%X exceeds the limit by %llu bytes."
-msgstr[0] "Значення restart_lsn слота %X/%X перевищує ліміт на %llu байт."
-msgstr[1] "Значення restart_lsn слота %X/%X перевищує ліміт на %llu байта."
-msgstr[2] "Значення restart_lsn слота %X/%X перевищує ліміт на %llu байтів."
-msgstr[3] "Значення restart_lsn слота %X/%X перевищує ліміт на %llu байтів."
+msgid "The slot's restart_lsn %X/%08X exceeds the limit by %llu byte."
+msgid_plural "The slot's restart_lsn %X/%08X exceeds the limit by %llu bytes."
+msgstr[0] "Значення restart_lsn слота %X/%08X перевищує ліміт на %llu байт."
+msgstr[1] "Значення restart_lsn слота %X/%08X перевищує ліміт на %llu байта."
+msgstr[2] "Значення restart_lsn слота %X/%08X перевищує ліміт на %llu байтів."
+msgstr[3] "Значення restart_lsn слота %X/%08X перевищує ліміт на %llu байтів."
 
 #: replication/slot.c:1506
 #, c-format
@@ -21205,8 +21205,8 @@ msgstr "Цей слот ніколи раніше не резервував WAL,
 
 #: replication/slotfuncs.c:566
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "просунути слот реплікації до позиції %X/%X не можна, мінімальна позиція %X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "просунути слот реплікації до позиції %X/%08X не можна, мінімальна позиція %X/%08X"
 
 #: replication/slotfuncs.c:673
 #, c-format
@@ -21305,13 +21305,13 @@ msgstr "остання часова шкала %u на основному сер
 
 #: replication/walreceiver.c:419
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "запущено потокове передавання WAL з основного серверу з позиції %X/%X на часовій шкалі %u"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "запущено потокове передавання WAL з основного серверу з позиції %X/%08X на часовій шкалі %u"
 
 #: replication/walreceiver.c:423
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "перезапуска потокового передавання WAL з позиції %X/%X на часовій шкалі %u"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "перезапуска потокового передавання WAL з позиції %X/%08X на часовій шкалі %u"
 
 #: replication/walreceiver.c:458
 #, c-format
@@ -21325,8 +21325,8 @@ msgstr "реплікація завершена основним серверо
 
 #: replication/walreceiver.c:503
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "На часовій шкалі %u в позиції %X/%X WAL досяг кінця."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "На часовій шкалі %u в позиції %X/%08X WAL досяг кінця."
 
 #: replication/walreceiver.c:593
 #, c-format
@@ -21375,18 +21375,18 @@ msgstr "використовувати логічний слот репліка
 
 #: replication/walsender.c:919
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "в історії серверу немає запитаної початкової точки %X/%X на часовій шкалі %u"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "в історії серверу немає запитаної початкової точки %X/%08X на часовій шкалі %u"
 
 #: replication/walsender.c:922
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "Історія цього серверу відгалузилась від часової шкали %u в позиції %X/%X."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "Історія цього серверу відгалузилась від часової шкали %u в позиції %X/%08X."
 
 #: replication/walsender.c:966
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "запитана початкова точка %X/%X попереду позиція очищених даних WAL на цьому сервері %X/%X"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "запитана початкова точка %X/%08X попереду позиція очищених даних WAL на цьому сервері %X/%08X"
 
 #: replication/walsender.c:1160
 #, c-format
diff --git a/src/backend/po/zh_CN.po b/src/backend/po/zh_CN.po
index 574684d7757..8d0a1a2ff1e 100644
--- a/src/backend/po/zh_CN.po
+++ b/src/backend/po/zh_CN.po
@@ -1530,13 +1530,13 @@ msgstr "分配WAL读取处理器失败."
 
 #: access/transam/twophase.c:1401
 #, c-format
-msgid "could not read two-phase state from WAL at %X/%X"
-msgstr "无法从 %X/%X 位置的 WAL 读取两阶段状态"
+msgid "could not read two-phase state from WAL at %X/%08X"
+msgstr "无法从 %X/%08X 位置的 WAL 读取两阶段状态"
 
 #: access/transam/twophase.c:1409
 #, c-format
-msgid "expected two-phase state data is not present in WAL at %X/%X"
-msgstr "预期的两阶段状态数据没有出现在 WAL 的 %X/%X 位置上"
+msgid "expected two-phase state data is not present in WAL at %X/%08X"
+msgstr "预期的两阶段状态数据没有出现在 WAL 的 %X/%08X 位置上"
 
 #: access/transam/twophase.c:1689
 #, c-format
@@ -1737,7 +1737,7 @@ msgstr "无法在偏移量 %2$u,长度 %3$zu写入日志文件%1$s: %4$m"
 
 #: access/transam/xlog.c:2783
 #, c-format
-msgid "updated min recovery point to %X/%X on timeline %u"
+msgid "updated min recovery point to %X/%08X on timeline %u"
 msgstr "在时间点%3$u上将最小恢复点更新到%1$X/%2$X"
 
 #: access/transam/xlog.c:3864 access/transam/xlogutils.c:703
@@ -1788,7 +1788,7 @@ msgstr "新的时间线%u不附属于数据库系统时间线%u"
 
 #: access/transam/xlog.c:4446
 #, c-format
-msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%X"
+msgid "new timeline %u forked off current database system timeline %u before current recovery point %X/%08X"
 msgstr "在当前恢复点%3$X/%4$X之前, 新的时间点%1$u脱离了当前茅的数据库系统时间点%2$u"
 
 #: access/transam/xlog.c:4465
@@ -1993,8 +1993,8 @@ msgstr "达到一致性前恢复停止"
 
 #: access/transam/xlog.c:5635
 #, c-format
-msgid "recovery stopping before WAL location (LSN) \"%X/%X\""
-msgstr "恢复停止在WAL位置(LSN) \"%X/%X\"之前"
+msgid "recovery stopping before WAL location (LSN) \"%X/%08X\""
+msgstr "恢复停止在WAL位置(LSN) \"%X/%08X\"之前"
 
 #: access/transam/xlog.c:5721
 #, c-format
@@ -2013,8 +2013,8 @@ msgstr "恢复停止在恢复点 \"%s\", 时间 %s"
 
 #: access/transam/xlog.c:5792
 #, c-format
-msgid "recovery stopping after WAL location (LSN) \"%X/%X\""
-msgstr "恢复停止在WAL位置(LSN) \"%X/%X\"之后"
+msgid "recovery stopping after WAL location (LSN) \"%X/%08X\""
+msgstr "恢复停止在WAL位置(LSN) \"%X/%08X\"之后"
 
 #: access/transam/xlog.c:5860
 #, c-format
@@ -2128,8 +2128,8 @@ msgstr "开始执行到基于时间点恢复的时间点\"%s\""
 
 #: access/transam/xlog.c:6322
 #, c-format
-msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%X\""
-msgstr "开始执行到基于时间点恢复到WAL位置(LSN) \"%X/%X\""
+msgid "starting point-in-time recovery to WAL location (LSN) \"%X/%08X\""
+msgstr "开始执行到基于时间点恢复到WAL位置(LSN) \"%X/%08X\""
 
 #: access/transam/xlog.c:6327
 #, c-format
@@ -2143,8 +2143,8 @@ msgstr "开始归档恢复"
 
 #: access/transam/xlog.c:6384 access/transam/xlog.c:6516
 #, c-format
-msgid "checkpoint record is at %X/%X"
-msgstr "checkpoint 记录位置在 %X/%X"
+msgid "checkpoint record is at %X/%08X"
+msgstr "checkpoint 记录位置在 %X/%08X"
 
 #: access/transam/xlog.c:6398
 #, c-format
@@ -2199,13 +2199,13 @@ msgstr "所要求的时间线%u不在服务器的历史时间线里"
 
 #: access/transam/xlog.c:6568
 #, c-format
-msgid "Latest checkpoint is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X."
-msgstr "最近的检查点位于%X/%X,时间点为%u, 但是在请求的历史时间点中,服务器端在那个时间点会产生分支%X/%X."
+msgid "Latest checkpoint is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X."
+msgstr "最近的检查点位于%X/%08X,时间点为%u, 但是在请求的历史时间点中,服务器端在那个时间点会产生分支%X/%08X."
 
 #: access/transam/xlog.c:6584
 #, c-format
-msgid "requested timeline %u does not contain minimum recovery point %X/%X on timeline %u"
-msgstr "所要求的时间线%u不包含最小恢复点%X/%X,在时间线%u处"
+msgid "requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u"
+msgstr "所要求的时间线%u不包含最小恢复点%X/%08X,在时间线%u处"
 
 #: access/transam/xlog.c:6615
 #, c-format
@@ -2249,8 +2249,8 @@ msgstr "正在为热备进行初始化"
 
 #: access/transam/xlog.c:7019
 #, c-format
-msgid "redo starts at %X/%X"
-msgstr "redo 在 %X/%X 开始"
+msgid "redo starts at %X/%08X"
+msgstr "redo 在 %X/%08X 开始"
 
 #: access/transam/xlog.c:7243
 #, c-format
@@ -2259,8 +2259,8 @@ msgstr "所要求的恢复停止点在一致性恢复点之前"
 
 #: access/transam/xlog.c:7281
 #, c-format
-msgid "redo done at %X/%X"
-msgstr "redo 在 %X/%X 完成"
+msgid "redo done at %X/%08X"
+msgstr "redo 在 %X/%08X 完成"
 
 #: access/transam/xlog.c:7286
 #, c-format
@@ -2299,8 +2299,8 @@ msgstr "已选择的新时间线ID:%u"
 
 #: access/transam/xlog.c:7849
 #, c-format
-msgid "consistent recovery state reached at %X/%X"
-msgstr "在%X/%X上已到达一致性恢复状态"
+msgid "consistent recovery state reached at %X/%08X"
+msgstr "在%X/%08X上已到达一致性恢复状态"
 
 #: access/transam/xlog.c:8041
 #, c-format
@@ -2374,13 +2374,13 @@ msgstr "正在跳过重新启动点, 恢复已经结束"
 
 #: access/transam/xlog.c:9092
 #, c-format
-msgid "skipping restartpoint, already performed at %X/%X"
-msgstr "跳过重新启动点,它已经在%X/%X上执行了."
+msgid "skipping restartpoint, already performed at %X/%08X"
+msgstr "跳过重新启动点,它已经在%X/%08X上执行了."
 
 #: access/transam/xlog.c:9259
 #, c-format
-msgid "recovery restart point at %X/%X"
-msgstr "恢复得重新启动点是在%X/%X开始"
+msgid "recovery restart point at %X/%08X"
+msgstr "恢复得重新启动点是在%X/%08X开始"
 
 #: access/transam/xlog.c:9261
 #, c-format
@@ -2389,8 +2389,8 @@ msgstr "上一次完成事务是在日志时间%s完成的."
 
 #: access/transam/xlog.c:9395
 #, c-format
-msgid "restore point \"%s\" created at %X/%X"
-msgstr "恢复点\"%s\",创建于%X/%X"
+msgid "restore point \"%s\" created at %X/%08X"
+msgstr "恢复点\"%s\",创建于%X/%08X"
 
 #: access/transam/xlog.c:9536
 #, c-format
@@ -2404,7 +2404,7 @@ msgstr "在检查点记录中出现未期望的时间线ID%u(在%u之后)"
 
 #: access/transam/xlog.c:9561
 #, c-format
-msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u"
+msgid "unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u"
 msgstr "在达到最小恢复点%2$X/%3$X之前,时间点%4$u处,在检查点记录中出现意外的时间点ID %1$u"
 
 #: access/transam/xlog.c:9637
@@ -2572,7 +2572,7 @@ msgstr "文件\"%2$s\"中的备份时间线%1$u"
 #. translator: %s is a WAL record description
 #: access/transam/xlog.c:11398
 #, c-format
-msgid "WAL redo at %X/%X for %s"
+msgid "WAL redo at %X/%08X for %s"
 msgstr "%3$s WAL 重做在 %1$X/%2$X 位置"
 
 #: access/transam/xlog.c:11447
@@ -2769,48 +2769,48 @@ msgstr "服务器在%d秒内未升级"
 
 #: access/transam/xlogreader.c:299
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "%X/%X处有无效记录偏移量"
+msgid "invalid record offset at %X/%08X"
+msgstr "%X/%08X处有无效记录偏移量"
 
 #: access/transam/xlogreader.c:307
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%X位置处要求继续记录"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08X位置处要求继续记录"
 
 #: access/transam/xlogreader.c:348 access/transam/xlogreader.c:645
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "%X/%X 处的记录长度不合法:想要 %u,但得到的是 %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "%X/%08X 处的记录长度不合法:想要 %u,但得到的是 %u"
 
 #: access/transam/xlogreader.c:372
 #, c-format
-msgid "record length %u at %X/%X too long"
+msgid "record length %u at %X/%08X too long"
 msgstr "%2$X/%3$X处的记录长度%1$u太长"
 
 #: access/transam/xlogreader.c:404
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "在%X/%X处没有继续记录标志"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "在%X/%08X处没有继续记录标志"
 
 #: access/transam/xlogreader.c:417
 #, c-format
-msgid "invalid contrecord length %u at %X/%X"
+msgid "invalid contrecord length %u at %X/%08X"
 msgstr "在%2$X/%3$X处的继续记录长度%1$u不合法"
 
 #: access/transam/xlogreader.c:653
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "在%2$X/%3$X处的资源管理器ID%1$u不合法"
 
 #: access/transam/xlogreader.c:667 access/transam/xlogreader.c:684
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "具有不正确向前链接%X/%X的记录出现在%X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "具有不正确向前链接%X/%08X的记录出现在%X/%08X"
 
 #: access/transam/xlogreader.c:721
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "在%X/%X处的记录中的资源管理器数据校验和不正确"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "在%X/%08X处的记录中的资源管理器数据校验和不正确"
 
 #: access/transam/xlogreader.c:758
 #, c-format
@@ -2839,7 +2839,7 @@ msgstr "WAL文件来自于不同的数据库系统:页头部中的XLOG_BLCKSZ
 
 #: access/transam/xlogreader.c:842
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
 msgstr "日志段%3$s、偏移%4$u出现意外的pageaddr %1$X/%2$X"
 
 #: access/transam/xlogreader.c:867
@@ -2849,58 +2849,58 @@ msgstr "日志段%3$s、偏移%4$u出现失序的时间线ID %1$u(在%2$u之
 
 #: access/transam/xlogreader.c:1112
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "乱序的block_id %u位于%X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "乱序的block_id %u位于%X/%08X"
 
 #: access/transam/xlogreader.c:1135
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA已设置,但是在%X/%X没有包括数据"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA已设置,但是在%X/%08X没有包括数据"
 
 #: access/transam/xlogreader.c:1142
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA没有被设置,但是数据长度为%u,它位于%X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA没有被设置,但是数据长度为%u,它位于%X/%08X"
 
 #: access/transam/xlogreader.c:1178
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE被设置,但是洞偏移为%u,长度为%u,块映像长度为%u,它位于%X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE被设置,但是洞偏移为%u,长度为%u,块映像长度为%u,它位于%X/%08X"
 
 #: access/transam/xlogreader.c:1194
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE没有被设置,但是洞偏移为%u,长度为%u,它位于%X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE没有被设置,但是洞偏移为%u,长度为%u,它位于%X/%08X"
 
 #: access/transam/xlogreader.c:1209
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED被设置,但是块映像长度是%u,它位于%X/%X"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED被设置,但是块映像长度是%u,它位于%X/%08X"
 
 #: access/transam/xlogreader.c:1224
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "既没有设置BKPIMAGE_HAS_HOLE也没有设置BKPIMAGE_IS_COMPRESSED,但是块映像长度是%u,它位于%X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "既没有设置BKPIMAGE_HAS_HOLE也没有设置BKPIMAGE_IS_COMPRESSED,但是块映像长度是%u,它位于%X/%08X"
 
 #: access/transam/xlogreader.c:1240
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "设置了BKPBLOCK_SAME_REL,但是在%X/%X位置没有记录先前的关系"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "设置了BKPBLOCK_SAME_REL,但是在%X/%08X位置没有记录先前的关系"
 
 #: access/transam/xlogreader.c:1252
 #, c-format
-msgid "invalid block_id %u at %X/%X"
+msgid "invalid block_id %u at %X/%08X"
 msgstr "%2$X/%3$X处的block_id %1$u无效"
 
 #: access/transam/xlogreader.c:1341
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "在%X/%X处的记录的长度无效"
+msgid "record with invalid length at %X/%08X"
+msgstr "在%X/%08X处的记录的长度无效"
 
 #: access/transam/xlogreader.c:1430
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "在%X/%X、块%d处有无效压缩映像"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "在%X/%08X、块%d处有无效压缩映像"
 
 #: access/transam/xlogutils.c:727 replication/walreceiver.c:959
 #: replication/walsender.c:2462
@@ -17867,13 +17867,13 @@ msgstr "开始为槽\"%s\"进行逻辑解码"
 
 #: replication/logical/logical.c:443
 #, c-format
-msgid "Streaming transactions committing after %X/%X, reading WAL from %X/%X."
-msgstr "流事务在%X/%X后提交,从%X/%X位置读."
+msgid "Streaming transactions committing after %X/%08X, reading WAL from %X/%08X."
+msgstr "流事务在%X/%08X后提交,从%X/%08X位置读."
 
 #: replication/logical/logical.c:593
 #, c-format
-msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X"
-msgstr "槽 \"%s\", 输出插件 \"%s\", 在 %s 回调, 关联的 LSN 地址为%X/%X"
+msgid "slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X"
+msgstr "槽 \"%s\", 输出插件 \"%s\", 在 %s 回调, 关联的 LSN 地址为%X/%08X"
 
 #: replication/logical/logical.c:600
 #, c-format
@@ -18054,8 +18054,8 @@ msgstr[0] "导出逻辑解码快照: \"%s\" 带有 %u 个事务 ID"
 #: replication/logical/snapbuild.c:1270 replication/logical/snapbuild.c:1363
 #: replication/logical/snapbuild.c:1917
 #, c-format
-msgid "logical decoding found consistent point at %X/%X"
-msgstr "在 %X/%X处,逻辑解码发现一致点"
+msgid "logical decoding found consistent point at %X/%08X"
+msgstr "在 %X/%08X处,逻辑解码发现一致点"
 
 #: replication/logical/snapbuild.c:1272
 #, c-format
@@ -18064,8 +18064,8 @@ msgstr "没有正运行的事务."
 
 #: replication/logical/snapbuild.c:1314
 #, c-format
-msgid "logical decoding found initial starting point at %X/%X"
-msgstr "逻辑解码在 %X/%X发现初始化的起始点"
+msgid "logical decoding found initial starting point at %X/%08X"
+msgstr "逻辑解码在 %X/%08X发现初始化的起始点"
 
 #: replication/logical/snapbuild.c:1316 replication/logical/snapbuild.c:1340
 #, c-format
@@ -18074,8 +18074,8 @@ msgstr "等待超过%2$u的事务(大约%1$d)结束."
 
 #: replication/logical/snapbuild.c:1338
 #, c-format
-msgid "logical decoding found initial consistent point at %X/%X"
-msgstr "在 %X/%X处,逻辑解码发现初始一致点"
+msgid "logical decoding found initial consistent point at %X/%08X"
+msgstr "在 %X/%08X处,逻辑解码发现初始一致点"
 
 #: replication/logical/snapbuild.c:1365
 #, c-format
@@ -18379,8 +18379,8 @@ msgstr "无法前进以前没有保留的WAL的复制槽"
 
 #: replication/slotfuncs.c:564
 #, c-format
-msgid "cannot advance replication slot to %X/%X, minimum is %X/%X"
-msgstr "无法将复制槽前进到%X/%X,最小值为%X/%X"
+msgid "cannot advance replication slot to %X/%08X, minimum is %X/%08X"
+msgstr "无法将复制槽前进到%X/%08X,最小值为%X/%08X"
 
 #: replication/slotfuncs.c:670
 #, c-format
@@ -18474,13 +18474,13 @@ msgstr "主服务器上的最高时间线%u还在恢复时间线%u的后边"
 
 #: replication/walreceiver.c:369
 #, c-format
-msgid "started streaming WAL from primary at %X/%X on timeline %u"
-msgstr "在时间点: %X/%X (时间安排%u)启动日志的流操作"
+msgid "started streaming WAL from primary at %X/%08X on timeline %u"
+msgstr "在时间点: %X/%08X (时间安排%u)启动日志的流操作"
 
 #: replication/walreceiver.c:374
 #, c-format
-msgid "restarted WAL streaming at %X/%X on timeline %u"
-msgstr "在%X/%X处时间线%u上重启WAL流操作"
+msgid "restarted WAL streaming at %X/%08X on timeline %u"
+msgstr "在%X/%08X处时间线%u上重启WAL流操作"
 
 #: replication/walreceiver.c:403
 #, c-format
@@ -18494,8 +18494,8 @@ msgstr "复制由主用服务器终止"
 
 #: replication/walreceiver.c:441
 #, c-format
-msgid "End of WAL reached on timeline %u at %X/%X."
-msgstr "WAL结束时,到了时间线%u和地址%X/%X."
+msgid "End of WAL reached on timeline %u at %X/%08X."
+msgstr "WAL结束时,到了时间线%u和地址%X/%08X."
 
 #: replication/walreceiver.c:529
 #, c-format
@@ -18539,18 +18539,18 @@ msgstr "物理复制操作不能使用逻辑复制槽"
 
 #: replication/walsender.c:628
 #, c-format
-msgid "requested starting point %X/%X on timeline %u is not in this server's history"
-msgstr "请求的起始点%X/%X, 时间线%u,不在该服务器的时间线历史记录里"
+msgid "requested starting point %X/%08X on timeline %u is not in this server's history"
+msgstr "请求的起始点%X/%08X, 时间线%u,不在该服务器的时间线历史记录里"
 
 #: replication/walsender.c:632
 #, c-format
-msgid "This server's history forked from timeline %u at %X/%X."
-msgstr "服务器的历史时间线在时间线%u,地址%X/%X处产生了分支."
+msgid "This server's history forked from timeline %u at %X/%08X."
+msgstr "服务器的历史时间线在时间线%u,地址%X/%08X处产生了分支."
 
 #: replication/walsender.c:677
 #, c-format
-msgid "requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X"
-msgstr "请求的起始点 %X/%X 位于该服务器的WAL刷新位置%X/%X之前"
+msgid "requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X"
+msgstr "请求的起始点 %X/%08X 位于该服务器的WAL刷新位置%X/%08X之前"
 
 #: replication/walsender.c:907
 #, c-format
diff --git a/src/backend/postmaster/walsummarizer.c b/src/backend/postmaster/walsummarizer.c
index 0fec4f1f871..f5b5af3414a 100644
--- a/src/backend/postmaster/walsummarizer.c
+++ b/src/backend/postmaster/walsummarizer.c
@@ -385,7 +385,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
 
 			switch_lsn = tliSwitchPoint(current_tli, tles, &switch_tli);
 			ereport(DEBUG1,
-					errmsg_internal("switch point from TLI %u to TLI %u is at %X/%X",
+					errmsg_internal("switch point from TLI %u to TLI %u is at %X/%08X",
 									current_tli, switch_tli, LSN_FORMAT_ARGS(switch_lsn)));
 		}
 
@@ -741,7 +741,7 @@ WaitForWalSummarization(XLogRecPtr lsn)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 						 errmsg("WAL summarization is not progressing"),
-						 errdetail("Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory.",
+						 errdetail("Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory.",
 								   LSN_FORMAT_ARGS(lsn),
 								   LSN_FORMAT_ARGS(summarized_lsn),
 								   LSN_FORMAT_ARGS(pending_lsn))));
@@ -755,12 +755,12 @@ WaitForWalSummarization(XLogRecPtr lsn)
 												current_time) / 1000;
 			ereport(WARNING,
 					(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-					 errmsg_plural("still waiting for WAL summarization through %X/%X after %ld second",
-								   "still waiting for WAL summarization through %X/%X after %ld seconds",
+					 errmsg_plural("still waiting for WAL summarization through %X/%08X after %ld second",
+								   "still waiting for WAL summarization through %X/%08X after %ld seconds",
 								   elapsed_seconds,
 								   LSN_FORMAT_ARGS(lsn),
 								   elapsed_seconds),
-					 errdetail("Summarization has reached %X/%X on disk and %X/%X in memory.",
+					 errdetail("Summarization has reached %X/%08X on disk and %X/%08X in memory.",
 							   LSN_FORMAT_ARGS(summarized_lsn),
 							   LSN_FORMAT_ARGS(pending_lsn))));
 		}
@@ -981,7 +981,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			if (private_data->end_of_wal)
 			{
 				ereport(DEBUG1,
-						errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X",
+						errmsg_internal("could not read WAL from timeline %u at %X/%08X: end of WAL at %X/%08X",
 										tli,
 										LSN_FORMAT_ARGS(start_lsn),
 										LSN_FORMAT_ARGS(private_data->read_upto)));
@@ -1000,7 +1000,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			}
 			else
 				ereport(ERROR,
-						(errmsg("could not find a valid record after %X/%X",
+						(errmsg("could not find a valid record after %X/%08X",
 								LSN_FORMAT_ARGS(start_lsn))));
 		}
 
@@ -1034,7 +1034,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 				 * able to read a complete record.
 				 */
 				ereport(DEBUG1,
-						errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X",
+						errmsg_internal("could not read WAL from timeline %u at %X/%08X: end of WAL at %X/%08X",
 										tli,
 										LSN_FORMAT_ARGS(xlogreader->EndRecPtr),
 										LSN_FORMAT_ARGS(private_data->read_upto)));
@@ -1045,13 +1045,13 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			if (errormsg)
 				ereport(ERROR,
 						(errcode_for_file_access(),
-						 errmsg("could not read WAL from timeline %u at %X/%X: %s",
+						 errmsg("could not read WAL from timeline %u at %X/%08X: %s",
 								tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr),
 								errormsg)));
 			else
 				ereport(ERROR,
 						(errcode_for_file_access(),
-						 errmsg("could not read WAL from timeline %u at %X/%X",
+						 errmsg("could not read WAL from timeline %u at %X/%08X",
 								tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 		}
 
@@ -1222,7 +1222,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 
 		/* Tell the user what we did. */
 		ereport(DEBUG1,
-				errmsg_internal("summarized WAL on TLI %u from %X/%X to %X/%X",
+				errmsg_internal("summarized WAL on TLI %u from %X/%08X to %X/%08X",
 								tli,
 								LSN_FORMAT_ARGS(summary_start_lsn),
 								LSN_FORMAT_ARGS(summary_end_lsn)));
@@ -1234,7 +1234,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 	/* If we skipped a non-zero amount of WAL, log a debug message. */
 	if (summary_end_lsn > summary_start_lsn && fast_forward)
 		ereport(DEBUG1,
-				errmsg_internal("skipped summarizing WAL on TLI %u from %X/%X to %X/%X",
+				errmsg_internal("skipped summarizing WAL on TLI %u from %X/%08X to %X/%08X",
 								tli,
 								LSN_FORMAT_ARGS(summary_start_lsn),
 								LSN_FORMAT_ARGS(summary_end_lsn)));
@@ -1580,7 +1580,7 @@ summarizer_read_local_xlog_page(XLogReaderState *state,
 
 					/* Debugging output. */
 					ereport(DEBUG1,
-							errmsg_internal("timeline %u became historic, can read up to %X/%X",
+							errmsg_internal("timeline %u became historic, can read up to %X/%08X",
 											private_data->tli, LSN_FORMAT_ARGS(private_data->read_upto)));
 				}
 
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 7b4ddf7a8f5..f7b5d093681 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -534,7 +534,7 @@ libpqrcv_startstreaming(WalReceiverConn *conn,
 	if (options->logical)
 		appendStringInfoString(&cmd, " LOGICAL");
 
-	appendStringInfo(&cmd, " %X/%X", LSN_FORMAT_ARGS(options->startpoint));
+	appendStringInfo(&cmd, " %X/%08X", LSN_FORMAT_ARGS(options->startpoint));
 
 	/*
 	 * Additional options are different depending on if we are doing logical
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index f1eb798f3e9..7e363a7c05b 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -567,7 +567,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 		 * kinds of client errors; so the client may wish to check that
 		 * confirmed_flush_lsn matches its expectations.
 		 */
-		elog(LOG, "%X/%X has been already streamed, forwarding to %X/%X",
+		elog(LOG, "%X/%08X has been already streamed, forwarding to %X/%08X",
 			 LSN_FORMAT_ARGS(start_lsn),
 			 LSN_FORMAT_ARGS(slot->data.confirmed_flush));
 
@@ -610,7 +610,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 	ereport(LOG,
 			(errmsg("starting logical decoding for slot \"%s\"",
 					NameStr(slot->data.name)),
-			 errdetail("Streaming transactions committing after %X/%X, reading WAL from %X/%X.",
+			 errdetail("Streaming transactions committing after %X/%08X, reading WAL from %X/%08X.",
 					   LSN_FORMAT_ARGS(slot->data.confirmed_flush),
 					   LSN_FORMAT_ARGS(slot->data.restart_lsn))));
 
@@ -637,7 +637,7 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx)
 	/* Initialize from where to start reading WAL. */
 	XLogBeginRead(ctx->reader, slot->data.restart_lsn);
 
-	elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%X",
+	elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%08X",
 		 LSN_FORMAT_ARGS(slot->data.restart_lsn));
 
 	/* Wait for a consistent starting point */
@@ -758,7 +758,7 @@ output_plugin_error_callback(void *arg)
 
 	/* not all callbacks have an associated LSN  */
 	if (state->report_location != InvalidXLogRecPtr)
-		errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X",
+		errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X",
 				   NameStr(state->ctx->slot->data.name),
 				   NameStr(state->ctx->slot->data.plugin),
 				   state->callback_name,
@@ -1725,7 +1725,7 @@ LogicalIncreaseXminForSlot(XLogRecPtr current_lsn, TransactionId xmin)
 	SpinLockRelease(&slot->mutex);
 
 	if (got_new_xmin)
-		elog(DEBUG1, "got new catalog xmin %u at %X/%X", xmin,
+		elog(DEBUG1, "got new catalog xmin %u at %X/%08X", xmin,
 			 LSN_FORMAT_ARGS(current_lsn));
 
 	/* candidate already valid with the current flush position, apply */
@@ -1785,7 +1785,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
 		slot->candidate_restart_lsn = restart_lsn;
 		SpinLockRelease(&slot->mutex);
 
-		elog(DEBUG1, "got new restart lsn %X/%X at %X/%X",
+		elog(DEBUG1, "got new restart lsn %X/%08X at %X/%08X",
 			 LSN_FORMAT_ARGS(restart_lsn),
 			 LSN_FORMAT_ARGS(current_lsn));
 	}
@@ -1800,7 +1800,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
 		confirmed_flush = slot->data.confirmed_flush;
 		SpinLockRelease(&slot->mutex);
 
-		elog(DEBUG1, "failed to increase restart lsn: proposed %X/%X, after %X/%X, current candidate %X/%X, current after %X/%X, flushed up to %X/%X",
+		elog(DEBUG1, "failed to increase restart lsn: proposed %X/%08X, after %X/%08X, current candidate %X/%08X, current after %X/%08X, flushed up to %X/%08X",
 			 LSN_FORMAT_ARGS(restart_lsn),
 			 LSN_FORMAT_ARGS(current_lsn),
 			 LSN_FORMAT_ARGS(candidate_restart_lsn),
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index a17bacf88e7..8e75d3bb47b 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -826,7 +826,7 @@ StartupReplicationOrigin(void)
 		last_state++;
 
 		ereport(LOG,
-				(errmsg("recovered replication state of node %d to %X/%X",
+				(errmsg("recovered replication state of node %d to %X/%08X",
 						disk_state.roident,
 						LSN_FORMAT_ARGS(disk_state.remote_lsn))));
 	}
diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c
index 3ec3abfa3da..2f0c08b8fbd 100644
--- a/src/backend/replication/logical/slotsync.c
+++ b/src/backend/replication/logical/slotsync.c
@@ -213,7 +213,7 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid,
 		ereport(slot->data.persistency == RS_TEMPORARY ? LOG : DEBUG1,
 				errmsg("could not synchronize replication slot \"%s\"",
 					   remote_slot->name),
-				errdetail("Synchronization could lead to data loss, because the remote slot needs WAL at LSN %X/%X and catalog xmin %u, but the standby has LSN %X/%X and catalog xmin %u.",
+				errdetail("Synchronization could lead to data loss, because the remote slot needs WAL at LSN %X/%08X and catalog xmin %u, but the standby has LSN %X/%08X and catalog xmin %u.",
 						  LSN_FORMAT_ARGS(remote_slot->restart_lsn),
 						  remote_slot->catalog_xmin,
 						  LSN_FORMAT_ARGS(slot->data.restart_lsn),
@@ -275,7 +275,7 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid,
 				ereport(ERROR,
 						errmsg_internal("synchronized confirmed_flush for slot \"%s\" differs from remote slot",
 										remote_slot->name),
-						errdetail_internal("Remote slot has LSN %X/%X but local slot has LSN %X/%X.",
+						errdetail_internal("Remote slot has LSN %X/%08X but local slot has LSN %X/%08X.",
 										   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
 										   LSN_FORMAT_ARGS(slot->data.confirmed_flush)));
 		}
@@ -593,7 +593,7 @@ update_and_persist_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 	{
 		ereport(LOG,
 				errmsg("could not synchronize replication slot \"%s\"", remote_slot->name),
-				errdetail("Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN %X/%X.",
+				errdetail("Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN %X/%08X.",
 						  LSN_FORMAT_ARGS(slot->data.restart_lsn)));
 
 		return false;
@@ -642,7 +642,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 		ereport(AmLogicalSlotSyncWorkerProcess() ? LOG : ERROR,
 				errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				errmsg("skipping slot synchronization because the received slot sync"
-					   " LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X",
+					   " LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X",
 					   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
 					   remote_slot->name,
 					   LSN_FORMAT_ARGS(latestFlushPtr)));
@@ -733,7 +733,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 				ereport(ERROR,
 						errmsg_internal("cannot synchronize local slot \"%s\"",
 										remote_slot->name),
-						errdetail_internal("Local slot's start streaming location LSN(%X/%X) is ahead of remote slot's LSN(%X/%X).",
+						errdetail_internal("Local slot's start streaming location LSN(%X/%08X) is ahead of remote slot's LSN(%X/%08X).",
 										   LSN_FORMAT_ARGS(slot->data.confirmed_flush),
 										   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn)));
 
diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index adf18c397db..90d037ad802 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -774,7 +774,7 @@ SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, XLogRecPtr lsn, Transact
 		if (rbtxn_is_prepared(txn))
 			continue;
 
-		elog(DEBUG2, "adding a new snapshot and invalidations to %u at %X/%X",
+		elog(DEBUG2, "adding a new snapshot and invalidations to %u at %X/%08X",
 			 txn->xid, LSN_FORMAT_ARGS(lsn));
 
 		/*
@@ -1271,7 +1271,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 									builder->initial_xmin_horizon))
 	{
 		ereport(DEBUG1,
-				(errmsg_internal("skipping snapshot at %X/%X while building logical decoding snapshot, xmin horizon too low",
+				(errmsg_internal("skipping snapshot at %X/%08X while building logical decoding snapshot, xmin horizon too low",
 								 LSN_FORMAT_ARGS(lsn)),
 				 errdetail_internal("initial xmin horizon of %u vs the snapshot's %u",
 									builder->initial_xmin_horizon, running->oldestRunningXid)));
@@ -1310,7 +1310,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = InvalidTransactionId;
 
 		ereport(LOG,
-				(errmsg("logical decoding found consistent point at %X/%X",
+				(errmsg("logical decoding found consistent point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("There are no running transactions.")));
 
@@ -1359,7 +1359,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		Assert(TransactionIdIsNormal(builder->xmax));
 
 		ereport(LOG,
-				(errmsg("logical decoding found initial starting point at %X/%X",
+				(errmsg("logical decoding found initial starting point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("Waiting for transactions (approximately %d) older than %u to end.",
 						   running->xcnt, running->nextXid)));
@@ -1383,7 +1383,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = running->nextXid;
 
 		ereport(LOG,
-				(errmsg("logical decoding found initial consistent point at %X/%X",
+				(errmsg("logical decoding found initial consistent point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("Waiting for transactions (approximately %d) older than %u to end.",
 						   running->xcnt, running->nextXid)));
@@ -1407,7 +1407,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = InvalidTransactionId;
 
 		ereport(LOG,
-				(errmsg("logical decoding found consistent point at %X/%X",
+				(errmsg("logical decoding found consistent point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("There are no old transactions anymore.")));
 	}
@@ -1913,7 +1913,7 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
 	Assert(builder->state == SNAPBUILD_CONSISTENT);
 
 	ereport(LOG,
-			(errmsg("logical decoding found consistent point at %X/%X",
+			(errmsg("logical decoding found consistent point at %X/%08X",
 					LSN_FORMAT_ARGS(lsn)),
 			 errdetail("Logical decoding will begin using saved snapshot.")));
 	return true;
diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index c90f23ee5b0..e4fd6347fd1 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -1553,7 +1553,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos)
 copy_table_done:
 
 	elog(DEBUG1,
-		 "LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%X",
+		 "LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%08X",
 		 originname, LSN_FORMAT_ARGS(*origin_startpos));
 
 	/*
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index fd11805a44c..d470d624055 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -1016,7 +1016,7 @@ apply_handle_commit(StringInfo s)
 	if (commit_data.commit_lsn != remote_final_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_PROTOCOL_VIOLATION),
-				 errmsg_internal("incorrect commit LSN %X/%X in commit message (expected %X/%X)",
+				 errmsg_internal("incorrect commit LSN %X/%08X in commit message (expected %X/%08X)",
 								 LSN_FORMAT_ARGS(commit_data.commit_lsn),
 								 LSN_FORMAT_ARGS(remote_final_lsn))));
 
@@ -1108,7 +1108,7 @@ apply_handle_prepare(StringInfo s)
 	if (prepare_data.prepare_lsn != remote_final_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_PROTOCOL_VIOLATION),
-				 errmsg_internal("incorrect prepare LSN %X/%X in prepare message (expected %X/%X)",
+				 errmsg_internal("incorrect prepare LSN %X/%08X in prepare message (expected %X/%08X)",
 								 LSN_FORMAT_ARGS(prepare_data.prepare_lsn),
 								 LSN_FORMAT_ARGS(remote_final_lsn))));
 
@@ -3903,7 +3903,7 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply)
 	pq_sendint64(reply_message, now);	/* sendTime */
 	pq_sendbyte(reply_message, requestReply);	/* replyRequested */
 
-	elog(DEBUG2, "sending feedback (force %d) to recv %X/%X, write %X/%X, flush %X/%X",
+	elog(DEBUG2, "sending feedback (force %d) to recv %X/%08X, write %X/%08X, flush %X/%08X",
 		 force,
 		 LSN_FORMAT_ARGS(recvpos),
 		 LSN_FORMAT_ARGS(writepos),
@@ -4909,7 +4909,7 @@ maybe_start_skipping_changes(XLogRecPtr finish_lsn)
 	skip_xact_finish_lsn = finish_lsn;
 
 	ereport(LOG,
-			errmsg("logical replication starts skipping transaction at LSN %X/%X",
+			errmsg("logical replication starts skipping transaction at LSN %X/%08X",
 				   LSN_FORMAT_ARGS(skip_xact_finish_lsn)));
 }
 
@@ -4923,7 +4923,7 @@ stop_skipping_changes(void)
 		return;
 
 	ereport(LOG,
-			(errmsg("logical replication completed skipping transaction at LSN %X/%X",
+			(errmsg("logical replication completed skipping transaction at LSN %X/%08X",
 					LSN_FORMAT_ARGS(skip_xact_finish_lsn))));
 
 	/* Stop skipping changes */
@@ -5012,7 +5012,7 @@ clear_subscription_skip_lsn(XLogRecPtr finish_lsn)
 		if (myskiplsn != finish_lsn)
 			ereport(WARNING,
 					errmsg("skip-LSN of subscription \"%s\" cleared", MySubscription->name),
-					errdetail("Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X.",
+					errdetail("Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X.",
 							  LSN_FORMAT_ARGS(finish_lsn),
 							  LSN_FORMAT_ARGS(myskiplsn)));
 	}
@@ -5049,7 +5049,7 @@ apply_error_callback(void *arg)
 					   logicalrep_message_type(errarg->command),
 					   errarg->remote_xid);
 		else
-			errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X",
+			errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X",
 					   errarg->origin_name,
 					   logicalrep_message_type(errarg->command),
 					   errarg->remote_xid,
@@ -5067,7 +5067,7 @@ apply_error_callback(void *arg)
 						   errarg->rel->remoterel.relname,
 						   errarg->remote_xid);
 			else
-				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X",
+				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X",
 						   errarg->origin_name,
 						   logicalrep_message_type(errarg->command),
 						   errarg->rel->remoterel.nspname,
@@ -5086,7 +5086,7 @@ apply_error_callback(void *arg)
 						   errarg->rel->remoterel.attnames[errarg->remote_attnum],
 						   errarg->remote_xid);
 			else
-				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X",
+				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X",
 						   errarg->origin_name,
 						   logicalrep_message_type(errarg->command),
 						   errarg->rel->remoterel.nspname,
diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y
index 7440aae5a1a..8a649199ec6 100644
--- a/src/backend/replication/repl_gram.y
+++ b/src/backend/replication/repl_gram.y
@@ -279,7 +279,7 @@ alter_replication_slot:
 			;
 
 /*
- * START_REPLICATION [SLOT slot] [PHYSICAL] %X/%X [TIMELINE %u]
+ * START_REPLICATION [SLOT slot] [PHYSICAL] %X/%08X [TIMELINE %u]
  */
 start_replication:
 			K_START_REPLICATION opt_slot opt_physical RECPTR opt_timeline
@@ -295,7 +295,7 @@ start_replication:
 				}
 			;
 
-/* START_REPLICATION SLOT slot LOGICAL %X/%X options */
+/* START_REPLICATION SLOT slot LOGICAL %X/%08X options */
 start_logical_replication:
 			K_START_REPLICATION K_SLOT IDENT K_LOGICAL RECPTR plugin_options
 				{
diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l
index 014ea8d25c6..b6930e28659 100644
--- a/src/backend/replication/repl_scanner.l
+++ b/src/backend/replication/repl_scanner.l
@@ -155,7 +155,7 @@ UPLOAD_MANIFEST		{ return K_UPLOAD_MANIFEST; }
 {hexdigit}+\/{hexdigit}+		{
 					uint32	hi,
 							lo;
-					if (sscanf(yytext, "%X/%X", &hi, &lo) != 2)
+					if (sscanf(yytext, "%X/%08X", &hi, &lo) != 2)
 						replication_yyerror(NULL, yyscanner, "invalid streaming start location");
 					yylval->recptr = ((uint64) hi) << 32 | lo;
 					return RECPTR;
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index f9fec50ae88..f369fce2485 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -1591,8 +1591,8 @@ ReportSlotInvalidation(ReplicationSlotInvalidationCause cause,
 				uint64		ex = oldestLSN - restart_lsn;
 
 				appendStringInfo(&err_detail,
-								 ngettext("The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " byte.",
-										  "The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " bytes.",
+								 ngettext("The slot's restart_lsn %X/%08X exceeds the limit by %" PRIu64 " byte.",
+										  "The slot's restart_lsn %X/%08X exceeds the limit by %" PRIu64 " bytes.",
 										  ex),
 								 LSN_FORMAT_ARGS(restart_lsn),
 								 ex);
diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c
index 36cc2ed4e44..69f4c6157c5 100644
--- a/src/backend/replication/slotfuncs.c
+++ b/src/backend/replication/slotfuncs.c
@@ -566,7 +566,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
 	if (moveto < minlsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-				 errmsg("cannot advance replication slot to %X/%X, minimum is %X/%X",
+				 errmsg("cannot advance replication slot to %X/%08X, minimum is %X/%08X",
 						LSN_FORMAT_ARGS(moveto), LSN_FORMAT_ARGS(minlsn))));
 
 	/* Do the actual slot update, depending on the slot type */
diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index cc35984ad00..32cf3a48b89 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -258,7 +258,7 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
 	{
 		char		buffer[32];
 
-		sprintf(buffer, "waiting for %X/%X", LSN_FORMAT_ARGS(lsn));
+		sprintf(buffer, "waiting for %X/%08X", LSN_FORMAT_ARGS(lsn));
 		set_ps_display_suffix(buffer);
 	}
 
@@ -566,7 +566,7 @@ SyncRepReleaseWaiters(void)
 
 	LWLockRelease(SyncRepLock);
 
-	elog(DEBUG3, "released %d procs up to write %X/%X, %d procs up to flush %X/%X, %d procs up to apply %X/%X",
+	elog(DEBUG3, "released %d procs up to write %X/%08X, %d procs up to flush %X/%08X, %d procs up to apply %X/%08X",
 		 numwrite, LSN_FORMAT_ARGS(writePtr),
 		 numflush, LSN_FORMAT_ARGS(flushPtr),
 		 numapply, LSN_FORMAT_ARGS(applyPtr));
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 8c4d0fd9aed..33aece08de2 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -386,11 +386,11 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
 		{
 			if (first_stream)
 				ereport(LOG,
-						(errmsg("started streaming WAL from primary at %X/%X on timeline %u",
+						(errmsg("started streaming WAL from primary at %X/%08X on timeline %u",
 								LSN_FORMAT_ARGS(startpoint), startpointTLI)));
 			else
 				ereport(LOG,
-						(errmsg("restarted WAL streaming at %X/%X on timeline %u",
+						(errmsg("restarted WAL streaming at %X/%08X on timeline %u",
 								LSN_FORMAT_ARGS(startpoint), startpointTLI)));
 			first_stream = false;
 
@@ -470,7 +470,7 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
 						{
 							ereport(LOG,
 									(errmsg("replication terminated by primary server"),
-									 errdetail("End of WAL reached on timeline %u at %X/%X.",
+									 errdetail("End of WAL reached on timeline %u at %X/%08X.",
 											   startpointTLI,
 											   LSN_FORMAT_ARGS(LogstreamResult.Write))));
 							endofwal = true;
@@ -711,7 +711,7 @@ WalRcvWaitForStartPosition(XLogRecPtr *startpoint, TimeLineID *startpointTLI)
 	{
 		char		activitymsg[50];
 
-		snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%X",
+		snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%08X",
 				 LSN_FORMAT_ARGS(*startpoint));
 		set_ps_display(activitymsg);
 	}
@@ -1014,7 +1014,7 @@ XLogWalRcvFlush(bool dying, TimeLineID tli)
 		{
 			char		activitymsg[50];
 
-			snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
+			snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%08X",
 					 LSN_FORMAT_ARGS(LogstreamResult.Write));
 			set_ps_display(activitymsg);
 		}
@@ -1138,7 +1138,7 @@ XLogWalRcvSendReply(bool force, bool requestReply)
 	pq_sendbyte(&reply_message, requestReply ? 1 : 0);
 
 	/* Send it */
-	elog(DEBUG2, "sending write %X/%X flush %X/%X apply %X/%X%s",
+	elog(DEBUG2, "sending write %X/%08X flush %X/%08X apply %X/%08X%s",
 		 LSN_FORMAT_ARGS(writePtr),
 		 LSN_FORMAT_ARGS(flushPtr),
 		 LSN_FORMAT_ARGS(applyPtr),
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index f2c33250e8b..486ebe01c8b 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -408,7 +408,7 @@ IdentifySystem(void)
 	else
 		logptr = GetFlushRecPtr(&currTLI);
 
-	snprintf(xloc, sizeof(xloc), "%X/%X", LSN_FORMAT_ARGS(logptr));
+	snprintf(xloc, sizeof(xloc), "%X/%08X", LSN_FORMAT_ARGS(logptr));
 
 	if (MyDatabaseId != InvalidOid)
 	{
@@ -515,7 +515,7 @@ ReadReplicationSlot(ReadReplicationSlotCmd *cmd)
 		{
 			char		xloc[64];
 
-			snprintf(xloc, sizeof(xloc), "%X/%X",
+			snprintf(xloc, sizeof(xloc), "%X/%08X",
 					 LSN_FORMAT_ARGS(slot_contents.data.restart_lsn));
 			values[i] = CStringGetTextDatum(xloc);
 			nulls[i] = false;
@@ -892,10 +892,10 @@ StartReplication(StartReplicationCmd *cmd)
 				switchpoint < cmd->startpoint)
 			{
 				ereport(ERROR,
-						(errmsg("requested starting point %X/%X on timeline %u is not in this server's history",
+						(errmsg("requested starting point %X/%08X on timeline %u is not in this server's history",
 								LSN_FORMAT_ARGS(cmd->startpoint),
 								cmd->timeline),
-						 errdetail("This server's history forked from timeline %u at %X/%X.",
+						 errdetail("This server's history forked from timeline %u at %X/%08X.",
 								   cmd->timeline,
 								   LSN_FORMAT_ARGS(switchpoint))));
 			}
@@ -939,7 +939,7 @@ StartReplication(StartReplicationCmd *cmd)
 		if (FlushPtr < cmd->startpoint)
 		{
 			ereport(ERROR,
-					(errmsg("requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X",
+					(errmsg("requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X",
 							LSN_FORMAT_ARGS(cmd->startpoint),
 							LSN_FORMAT_ARGS(FlushPtr))));
 		}
@@ -983,7 +983,7 @@ StartReplication(StartReplicationCmd *cmd)
 		Datum		values[2];
 		bool		nulls[2] = {0};
 
-		snprintf(startpos_str, sizeof(startpos_str), "%X/%X",
+		snprintf(startpos_str, sizeof(startpos_str), "%X/%08X",
 				 LSN_FORMAT_ARGS(sendTimeLineValidUpto));
 
 		dest = CreateDestReceiver(DestRemoteSimple);
@@ -1324,7 +1324,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
 			ReplicationSlotPersist();
 	}
 
-	snprintf(xloc, sizeof(xloc), "%X/%X",
+	snprintf(xloc, sizeof(xloc), "%X/%08X",
 			 LSN_FORMAT_ARGS(MyReplicationSlot->data.confirmed_flush));
 
 	dest = CreateDestReceiver(DestRemoteSimple);
@@ -2429,7 +2429,7 @@ ProcessStandbyReplyMessage(void)
 		/* Copy because timestamptz_to_str returns a static buffer */
 		replyTimeStr = pstrdup(timestamptz_to_str(replyTime));
 
-		elog(DEBUG2, "write %X/%X flush %X/%X apply %X/%X%s reply_time %s",
+		elog(DEBUG2, "write %X/%08X flush %X/%08X apply %X/%08X%s reply_time %s",
 			 LSN_FORMAT_ARGS(writePtr),
 			 LSN_FORMAT_ARGS(flushPtr),
 			 LSN_FORMAT_ARGS(applyPtr),
@@ -3251,7 +3251,7 @@ XLogSendPhysical(void)
 
 		WalSndCaughtUp = true;
 
-		elog(DEBUG1, "walsender reached end of timeline at %X/%X (sent up to %X/%X)",
+		elog(DEBUG1, "walsender reached end of timeline at %X/%08X (sent up to %X/%08X)",
 			 LSN_FORMAT_ARGS(sendTimeLineValidUpto),
 			 LSN_FORMAT_ARGS(sentPtr));
 		return;
@@ -3392,7 +3392,7 @@ retry:
 	{
 		char		activitymsg[50];
 
-		snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
+		snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%08X",
 				 LSN_FORMAT_ARGS(sentPtr));
 		set_ps_display(activitymsg);
 	}
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c
index 7fa8d9247e0..4222bdab078 100644
--- a/src/backend/storage/ipc/standby.c
+++ b/src/backend/storage/ipc/standby.c
@@ -1376,7 +1376,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
 
 	if (xlrec.subxid_overflow)
 		elog(DEBUG2,
-			 "snapshot of %d running transactions overflowed (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
+			 "snapshot of %d running transactions overflowed (lsn %X/%08X oldest xid %u latest complete %u next xid %u)",
 			 CurrRunningXacts->xcnt,
 			 LSN_FORMAT_ARGS(recptr),
 			 CurrRunningXacts->oldestRunningXid,
@@ -1384,7 +1384,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
 			 CurrRunningXacts->nextXid);
 	else
 		elog(DEBUG2,
-			 "snapshot of %d+%d running transaction ids (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
+			 "snapshot of %d+%d running transaction ids (lsn %X/%08X oldest xid %u latest complete %u next xid %u)",
 			 CurrRunningXacts->xcnt, CurrRunningXacts->subxcnt,
 			 LSN_FORMAT_ARGS(recptr),
 			 CurrRunningXacts->oldestRunningXid,
diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index 16311590a14..12de2446f5b 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -83,7 +83,7 @@ pg_lsn_out(PG_FUNCTION_ARGS)
 	char		buf[MAXPG_LSNLEN + 1];
 	char	   *result;
 
-	snprintf(buf, sizeof buf, "%X/%X", LSN_FORMAT_ARGS(lsn));
+	snprintf(buf, sizeof buf, "%X/%08X", LSN_FORMAT_ARGS(lsn));
 	result = pstrdup(buf);
 	PG_RETURN_CSTRING(result);
 }
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index eb7354200bc..55621f35fb6 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -487,7 +487,7 @@ reached_end_position(XLogRecPtr segendpos, uint32 timeline,
 			if (r < 0)
 				pg_fatal("could not read from ready pipe: %m");
 
-			if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2)
+			if (sscanf(xlogend, "%X/%08X", &hi, &lo) != 2)
 				pg_fatal("could not parse write-ahead log location \"%s\"",
 						 xlogend);
 			xlogendptr = ((uint64) hi) << 32 | lo;
@@ -629,7 +629,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier,
 	param->wal_compress_level = wal_compress_level;
 
 	/* Convert the starting position */
-	if (sscanf(startpos, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(startpos, "%X/%08X", &hi, &lo) != 2)
 		pg_fatal("could not parse write-ahead log location \"%s\"",
 				 startpos);
 	param->startptr = ((uint64) hi) << 32 | lo;
@@ -2255,7 +2255,7 @@ BaseBackup(char *compression_algorithm, char *compression_detail,
 		 * value directly in the variable, and then set the flag that says
 		 * it's there.
 		 */
-		if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2)
+		if (sscanf(xlogend, "%X/%08X", &hi, &lo) != 2)
 			pg_fatal("could not parse write-ahead log location \"%s\"",
 					 xlogend);
 		xlogendptr = ((uint64) hi) << 32 | lo;
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index 11f71c03801..025b893a41e 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -1262,7 +1262,7 @@ setup_recovery(const struct LogicalRepInfo *dbinfo, const char *datadir, const c
 	{
 		appendPQExpBufferStr(recoveryconfcontents, "# dry run mode");
 		appendPQExpBuffer(recoveryconfcontents,
-						  "recovery_target_lsn = '%X/%X'\n",
+						  "recovery_target_lsn = '%X/%08X'\n",
 						  LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
 	}
 	else
@@ -1876,7 +1876,7 @@ set_replication_progress(PGconn *conn, const struct LogicalRepInfo *dbinfo, cons
 	if (dry_run)
 	{
 		suboid = InvalidOid;
-		lsnstr = psprintf("%X/%X", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
+		lsnstr = psprintf("%X/%08X", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
 	}
 	else
 	{
diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c
index e816cf58101..289ca14dcfe 100644
--- a/src/bin/pg_basebackup/pg_receivewal.c
+++ b/src/bin/pg_basebackup/pg_receivewal.c
@@ -188,14 +188,14 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
 
 	/* we assume that we get called once at the end of each segment */
 	if (verbose && segment_finished)
-		pg_log_info("finished segment at %X/%X (timeline %u)",
+		pg_log_info("finished segment at %X/%08X (timeline %u)",
 					LSN_FORMAT_ARGS(xlogpos),
 					timeline);
 
 	if (!XLogRecPtrIsInvalid(endpos) && endpos < xlogpos)
 	{
 		if (verbose)
-			pg_log_info("stopped log streaming at %X/%X (timeline %u)",
+			pg_log_info("stopped log streaming at %X/%08X (timeline %u)",
 						LSN_FORMAT_ARGS(xlogpos),
 						timeline);
 		time_to_stop = true;
@@ -211,7 +211,7 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
 	 * timeline, but it's close enough for reporting purposes.
 	 */
 	if (verbose && prevtimeline != 0 && prevtimeline != timeline)
-		pg_log_info("switched to timeline %u at %X/%X",
+		pg_log_info("switched to timeline %u at %X/%08X",
 					timeline,
 					LSN_FORMAT_ARGS(prevpos));
 
@@ -575,7 +575,7 @@ StreamLog(void)
 	 * Start the replication
 	 */
 	if (verbose)
-		pg_log_info("starting log streaming at %X/%X (timeline %u)",
+		pg_log_info("starting log streaming at %X/%08X (timeline %u)",
 					LSN_FORMAT_ARGS(stream.startpos),
 					stream.timeline);
 
@@ -689,7 +689,7 @@ main(int argc, char **argv)
 				basedir = pg_strdup(optarg);
 				break;
 			case 'E':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2)
 					pg_fatal("could not parse end position \"%s\"", optarg);
 				endpos = ((uint64) hi) << 32 | lo;
 				break;
diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c
index fb7a6a1d05d..8a5dd24e6c9 100644
--- a/src/bin/pg_basebackup/pg_recvlogical.c
+++ b/src/bin/pg_basebackup/pg_recvlogical.c
@@ -144,7 +144,7 @@ sendFeedback(PGconn *conn, TimestampTz now, bool force, bool replyRequested)
 		return true;
 
 	if (verbose)
-		pg_log_info("confirming write up to %X/%X, flush to %X/%X (slot %s)",
+		pg_log_info("confirming write up to %X/%08X, flush to %X/%08X (slot %s)",
 					LSN_FORMAT_ARGS(output_written_lsn),
 					LSN_FORMAT_ARGS(output_fsync_lsn),
 					replication_slot);
@@ -238,13 +238,13 @@ StreamLogicalLog(void)
 	 * Start the replication
 	 */
 	if (verbose)
-		pg_log_info("starting log streaming at %X/%X (slot %s)",
+		pg_log_info("starting log streaming at %X/%08X (slot %s)",
 					LSN_FORMAT_ARGS(startpos),
 					replication_slot);
 
 	/* Initiate the replication stream at specified location */
 	query = createPQExpBuffer();
-	appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%X",
+	appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%08X",
 					  replication_slot, LSN_FORMAT_ARGS(startpos));
 
 	/* print options if there are any */
@@ -800,12 +800,12 @@ main(int argc, char **argv)
 				break;
 /* replication options */
 			case 'I':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2)
 					pg_fatal("could not parse start position \"%s\"", optarg);
 				startpos = ((uint64) hi) << 32 | lo;
 				break;
 			case 'E':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2)
 					pg_fatal("could not parse end position \"%s\"", optarg);
 				endpos = ((uint64) hi) << 32 | lo;
 				break;
@@ -1075,12 +1075,12 @@ prepareToTerminate(PGconn *conn, XLogRecPtr endpos, StreamStopReason reason,
 				pg_log_info("received interrupt signal, exiting");
 				break;
 			case STREAM_STOP_KEEPALIVE:
-				pg_log_info("end position %X/%X reached by keepalive",
+				pg_log_info("end position %X/%08X reached by keepalive",
 							LSN_FORMAT_ARGS(endpos));
 				break;
 			case STREAM_STOP_END_OF_WAL:
 				Assert(!XLogRecPtrIsInvalid(lsn));
-				pg_log_info("end position %X/%X reached by WAL record at %X/%X",
+				pg_log_info("end position %X/%08X reached by WAL record at %X/%08X",
 							LSN_FORMAT_ARGS(endpos), LSN_FORMAT_ARGS(lsn));
 				break;
 			case STREAM_STOP_NONE:
diff --git a/src/bin/pg_basebackup/po/cs.po b/src/bin/pg_basebackup/po/cs.po
index f74b659741b..332ab103dfb 100644
--- a/src/bin/pg_basebackup/po/cs.po
+++ b/src/bin/pg_basebackup/po/cs.po
@@ -970,18 +970,18 @@ msgstr "      --drop-slot        odstraní replikační slot (pro jméno slotu v
 
 #: pg_receivewal.c:117
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "dokončen segment na %X/%X (timeline %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "dokončen segment na %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:124
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "končím streamování logu na %X/%X (timeline %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "končím streamování logu na %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:140
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "přepnuto na timeline %u v %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "přepnuto na timeline %u v %X/%08X"
 
 #: pg_receivewal.c:150
 #, c-format
@@ -1025,8 +1025,8 @@ msgstr "komprimovaný segment soubor \"%s\" má po dekompresi neplatnou velikost
 
 #: pg_receivewal.c:422
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "začínám streamování logu na %X/%X (timeline %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "začínám streamování logu na %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:537 pg_recvlogical.c:762
 #, c-format
@@ -1144,8 +1144,8 @@ msgstr "  -d, --dbname=DBNAME    databáze ke které se připojit\n"
 
 #: pg_recvlogical.c:133
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "potvrzuji zápis až do %X/%X, flush do %X/%X (slot %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "potvrzuji zápis až do %X/%08X, flush do %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:157 receivelog.c:343
 #, c-format
@@ -1154,8 +1154,8 @@ msgstr "nelze zaslat packet se zpětnou vazbou: %s"
 
 #: pg_recvlogical.c:230
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "začínám streamování logu na %X/%X (slot %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "začínám streamování logu na %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:271
 #, c-format
@@ -1254,13 +1254,13 @@ msgstr "nelze otevřít database-specific replikační spojení"
 
 #: pg_recvlogical.c:1047
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "koncová pozice %X/%X dosažena keepalive"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "koncová pozice %X/%08X dosažena keepalive"
 
 #: pg_recvlogical.c:1050
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "koncová pozice %X/%X doražena WAL záznamem na %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "koncová pozice %X/%08X doražena WAL záznamem na %X/%08X"
 
 #: receivelog.c:69
 #, c-format
@@ -1362,8 +1362,8 @@ msgstr "server ohlásil neočekávanou další timeline %u, následující timel
 
 #: receivelog.c:619
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "server přestal streamovat timeline %u at %X/%X, ale začátek další timelineoznámil %u na %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "server přestal streamovat timeline %u at %X/%08X, ale začátek další timelineoznámil %u na %X/%08X"
 
 #: receivelog.c:659
 #, c-format
diff --git a/src/bin/pg_basebackup/po/de.po b/src/bin/pg_basebackup/po/de.po
index 0afd145285c..365939f3977 100644
--- a/src/bin/pg_basebackup/po/de.po
+++ b/src/bin/pg_basebackup/po/de.po
@@ -2101,18 +2101,18 @@ msgstr "      --drop-slot        Replikations-Slot löschen (Slot-Name siehe --s
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "Segment bei %X/%X abgeschlossen (Zeitleiste %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "Segment bei %X/%08X abgeschlossen (Zeitleiste %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "Log-Streaming gestoppt bei %X/%X (Zeitleiste %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "Log-Streaming gestoppt bei %X/%08X (Zeitleiste %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "auf Zeitleiste %u umgeschaltet bei %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "auf Zeitleiste %u umgeschaltet bei %X/%08X"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1073
 #, c-format
@@ -2181,8 +2181,8 @@ msgstr "kann Datei »%s« nicht prüfen: Komprimierung mit %s wird von dieser In
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "starte Log-Streaming bei %X/%X (Zeitleiste %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "starte Log-Streaming bei %X/%08X (Zeitleiste %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:807
 #, c-format
@@ -2324,8 +2324,8 @@ msgstr "  -d, --dbname=DBNAME    Datenbank, mit der verbunden werden soll\n"
 
 #: pg_recvlogical.c:146
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "bestätige Schreiben bis %X/%X, Flush bis %X/%X (Slot %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "bestätige Schreiben bis %X/%08X, Flush bis %X/%08X (Slot %s)"
 
 #: pg_recvlogical.c:170 receivelog.c:359
 #, c-format
@@ -2334,8 +2334,8 @@ msgstr "konnte Rückmeldungspaket nicht senden: %s"
 
 #: pg_recvlogical.c:240
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "starte Log-Streaming bei %X/%X (Slot %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "starte Log-Streaming bei %X/%08X (Slot %s)"
 
 #: pg_recvlogical.c:282
 #, c-format
@@ -2440,13 +2440,13 @@ msgstr "konnte keine datenbankspezifische Replikationsverbindung herstellen"
 
 #: pg_recvlogical.c:1076
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "Endposition %X/%X durch Keepalive erreicht"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "Endposition %X/%08X durch Keepalive erreicht"
 
 #: pg_recvlogical.c:1081
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "Endposition %X/%X erreicht durch WAL-Eintrag bei %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "Endposition %X/%08X erreicht durch WAL-Eintrag bei %X/%08X"
 
 #: receivelog.c:65
 #, c-format
@@ -2542,8 +2542,8 @@ msgstr "Server berichtete unerwartete nächste Zeitleiste %u, folgend auf Zeitle
 
 #: receivelog.c:631
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%X, aber gab an, dass nächste Zeitleiste %u bei %X/%X beginnt"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "Server beendete Streaming von Zeitleiste %u bei %X/%08X, aber gab an, dass nächste Zeitleiste %u bei %X/%08X beginnt"
 
 #: receivelog.c:671
 #, c-format
diff --git a/src/bin/pg_basebackup/po/el.po b/src/bin/pg_basebackup/po/el.po
index f4fd4d66a75..18233150c0a 100644
--- a/src/bin/pg_basebackup/po/el.po
+++ b/src/bin/pg_basebackup/po/el.po
@@ -1219,18 +1219,18 @@ msgstr "      --drop-slot        εγκατάληψη της υποδοχής α
 
 #: pg_receivewal.c:252
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "τελείωσε το τμήμα σε %X/%X (χρονογραμμή %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "τελείωσε το τμήμα σε %X/%08X (χρονογραμμή %u)"
 
 #: pg_receivewal.c:259
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "διακοπή ροής αρχείων καταγραφής σε %X/%X (χρονογραμμή %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "διακοπή ροής αρχείων καταγραφής σε %X/%08X (χρονογραμμή %u)"
 
 #: pg_receivewal.c:275
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "μεταπήδησε στη χρονογραμμή %u στο %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "μεταπήδησε στη χρονογραμμή %u στο %X/%08X"
 
 #: pg_receivewal.c:285
 #, c-format
@@ -1304,8 +1304,8 @@ msgstr "δεν είναι δυνατός ο έλεγχος του αρχείου
 
 #: pg_receivewal.c:641
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "έναρξη ροής αρχείων καταγραφής σε %X/%X (χρονογραμμή %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "έναρξη ροής αρχείων καταγραφής σε %X/%08X (χρονογραμμή %u)"
 
 #: pg_receivewal.c:783 pg_recvlogical.c:785
 #, c-format
@@ -1433,8 +1433,8 @@ msgstr "  -d, --dbname=DBNAME    βάση δεδομένων για να συν
 
 #: pg_recvlogical.c:137
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "επιβεβαίωση εγγραφής έως %X/%X, flush σε %X/%X (υποδοχή %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "επιβεβαίωση εγγραφής έως %X/%08X, flush σε %X/%08X (υποδοχή %s)"
 
 #: pg_recvlogical.c:161 receivelog.c:366
 #, c-format
@@ -1443,8 +1443,8 @@ msgstr "δεν ήταν δυνατή η αποστολή πακέτου σχολ
 
 #: pg_recvlogical.c:229
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "έναρξη ροής αρχείων καταγραφής σε %X/%X (υποδοχή %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "έναρξη ροής αρχείων καταγραφής σε %X/%08X (υποδοχή %s)"
 
 #: pg_recvlogical.c:271
 #, c-format
@@ -1544,13 +1544,13 @@ msgstr "δεν ήταν δυνατή η δημιουργία σύνδεσης α
 
 #: pg_recvlogical.c:1033
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "τελική θέση %X/%X που επιτεύχθηκε από keepalive"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "τελική θέση %X/%08X που επιτεύχθηκε από keepalive"
 
 #: pg_recvlogical.c:1036
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "τελική θέση %X/%X που επιτεύχθηκε από εγγραφή WAL στο %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "τελική θέση %X/%08X που επιτεύχθηκε από εγγραφή WAL στο %X/%08X"
 
 #: receivelog.c:68
 #, c-format
@@ -1651,8 +1651,8 @@ msgstr "ο διακομιστής ανέφερε απροσδόκητη επόμ
 
 #: receivelog.c:638
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "ο διακομιστής σταμάτησε τη ροή χρονογραμμής %u στο %X/%X, αλλά ανέφερε ότι η επόμενη χρονογραμμή %u να ξεκινήσει από το %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "ο διακομιστής σταμάτησε τη ροή χρονογραμμής %u στο %X/%08X, αλλά ανέφερε ότι η επόμενη χρονογραμμή %u να ξεκινήσει από το %X/%08X"
 
 #: receivelog.c:678
 #, c-format
diff --git a/src/bin/pg_basebackup/po/es.po b/src/bin/pg_basebackup/po/es.po
index b637026541f..0418cdde272 100644
--- a/src/bin/pg_basebackup/po/es.po
+++ b/src/bin/pg_basebackup/po/es.po
@@ -2025,18 +2025,18 @@ msgstr "      --drop-slot        eliminar un slot de replicación (para el nombr
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "terminó el segmento en %X/%X (timeline %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "terminó el segmento en %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "detenido el flujo de log en %X/%X (timeline %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "detenido el flujo de log en %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "cambiado al timeline %u en %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "cambiado al timeline %u en %X/%08X"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1053
 #, c-format
@@ -2105,8 +2105,8 @@ msgstr "no se puede verificar el archivo «%s»: la compresión con %s no está
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "iniciando el flujo de log en %X/%X (timeline %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "iniciando el flujo de log en %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:801
 #, c-format
@@ -2234,8 +2234,8 @@ msgstr "  -d, --dbname=BASE      base de datos a la cual conectarse\n"
 
 #: pg_recvlogical.c:145
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "confirmando escritura hasta %X/%X, fsync hasta %X/%X (slot %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "confirmando escritura hasta %X/%08X, fsync hasta %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:169 receivelog.c:360
 #, c-format
@@ -2244,8 +2244,8 @@ msgstr "no se pudo enviar el paquete de retroalimentación: %s"
 
 #: pg_recvlogical.c:239
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "iniciando el flujo de log en %X/%X (slot %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "iniciando el flujo de log en %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:281
 #, c-format
@@ -2345,13 +2345,13 @@ msgstr "no se pudo establecer una conexión de replicación específica a una ba
 
 #: pg_recvlogical.c:1056
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "ubicación de término %X/%X alcanzado por «keep-alive»"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "ubicación de término %X/%08X alcanzado por «keep-alive»"
 
 #: pg_recvlogical.c:1061
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "ubicación de término %X/%X alcanzado por registro WAL en %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "ubicación de término %X/%08X alcanzado por registro WAL en %X/%08X"
 
 #: receivelog.c:66
 #, c-format
@@ -2447,8 +2447,8 @@ msgstr "el servidor reportó un timeline siguiente %u inesperado, a continuació
 
 #: receivelog.c:632
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "el servidor paró la transmisión del timeline %u en %X/%X, pero reportó que el siguiente timeline %u comienza en %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "el servidor paró la transmisión del timeline %u en %X/%08X, pero reportó que el siguiente timeline %u comienza en %X/%08X"
 
 #: receivelog.c:672
 #, c-format
diff --git a/src/bin/pg_basebackup/po/fr.po b/src/bin/pg_basebackup/po/fr.po
index ae370d26a6c..d70334129a5 100644
--- a/src/bin/pg_basebackup/po/fr.po
+++ b/src/bin/pg_basebackup/po/fr.po
@@ -2041,18 +2041,18 @@ msgstr ""
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "segment terminé à %X/%X (timeline %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "segment terminé à %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "arrêt du flux streaming à %X/%X (timeline %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "arrêt du flux streaming à %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "a basculé sur la timeline %u à %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "a basculé sur la timeline %u à %X/%08X"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1053
 #, c-format
@@ -2121,8 +2121,8 @@ msgstr "ne peut pas vérifier le fichier « %s » : la compression avec %s n'a p
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "commence le flux des journaux à %X/%X (timeline %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "commence le flux des journaux à %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:801
 #, c-format
@@ -2257,8 +2257,8 @@ msgstr "  -d, --dbname=BASE              base de données de connexion\n"
 
 #: pg_recvlogical.c:145
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "confirmation d'écriture jusqu'à %X/%X et de synchronisation jusqu'à %X/%X (slot %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "confirmation d'écriture jusqu'à %X/%08X et de synchronisation jusqu'à %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:169 receivelog.c:360
 #, c-format
@@ -2267,8 +2267,8 @@ msgstr "n'a pas pu envoyer le paquet d'informations en retour : %s"
 
 #: pg_recvlogical.c:239
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "commence le flux des journaux à %X/%X (slot %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "commence le flux des journaux à %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:281
 #, c-format
@@ -2368,13 +2368,13 @@ msgstr "n'a pas pu établir une connexion de réplication spécifique à la base
 
 #: pg_recvlogical.c:1056
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "position finale %X/%X atteinte par keepalive"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "position finale %X/%08X atteinte par keepalive"
 
 #: pg_recvlogical.c:1061
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "position finale %X/%X atteinte à l'enregistrement WAL %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "position finale %X/%08X atteinte à l'enregistrement WAL %X/%08X"
 
 #: receivelog.c:66
 #, c-format
@@ -2470,8 +2470,8 @@ msgstr "le serveur a renvoyé une timeline suivante %u inattendue, après la tim
 
 #: receivelog.c:632
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "le serveur a arrêté l'envoi de la timeline %u à %X/%X, mais a indiqué que la timeline suivante, %u, commence à %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "le serveur a arrêté l'envoi de la timeline %u à %X/%08X, mais a indiqué que la timeline suivante, %u, commence à %X/%08X"
 
 #: receivelog.c:672
 #, c-format
diff --git a/src/bin/pg_basebackup/po/he.po b/src/bin/pg_basebackup/po/he.po
index 7bdd08ee487..c88c10bd36b 100644
--- a/src/bin/pg_basebackup/po/he.po
+++ b/src/bin/pg_basebackup/po/he.po
@@ -922,14 +922,14 @@ msgstr ""
 
 #: pg_receivewal.c:111
 #, c-format
-msgid "%s: finished segment at %X/%X (timeline %u)\n"
-msgstr "תכנית %s: מסיים מקטע  %X/%X  (ציר זמן %u)\n"
+msgid "%s: finished segment at %X/%08X (timeline %u)\n"
+msgstr "תכנית %s: מסיים מקטע  %X/%08X  (ציר זמן %u)\n"
 
 #: pg_receivewal.c:124
 #, c-format
-msgid "%s: switched to timeline %u at %X/%X\n"
+msgid "%s: switched to timeline %u at %X/%08X\n"
 msgstr ""
-"תכנית %s: החלפת ציר הזמן %u ב %X/%X\n"
+"תכנית %s: החלפת ציר הזמן %u ב %X/%08X\n"
 "\n"
 
 #: pg_receivewal.c:133
@@ -969,8 +969,8 @@ msgstr "תכנית %s: לקובץ קטע דחוס \"%s\" יש גודל לא דח
 
 #: pg_receivewal.c:407
 #, c-format
-msgid "%s: starting log streaming at %X/%X (timeline %u)\n"
-msgstr "תכנית %s: החל יומן בכתובת %X/%X (ציר זמן %u)\n"
+msgid "%s: starting log streaming at %X/%08X (timeline %u)\n"
+msgstr "תכנית %s: החל יומן בכתובת %X/%08X (ציר זמן %u)\n"
 
 #: pg_receivewal.c:519 pg_recvlogical.c:762
 #, c-format
@@ -1110,8 +1110,8 @@ msgstr ""
 
 #: pg_recvlogical.c:135
 #, c-format
-msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n"
-msgstr "תכנית %s: מאשר לכתוב עד % X/%X, סומק ל %X/%X (חריץ %s)\n"
+msgid "%s: confirming write up to %X/%08X, flush to %X/%08X (slot %s)\n"
+msgstr "תכנית %s: מאשר לכתוב עד % X/%X, סומק ל %X/%08X (חריץ %s)\n"
 
 #: pg_recvlogical.c:160 receivelog.c:349
 #, c-format
@@ -1125,8 +1125,8 @@ msgstr "תכנית %s: לא ניתן להעביר תוכן הקובץ יומן (
 
 #: pg_recvlogical.c:238
 #, c-format
-msgid "%s: starting log streaming at %X/%X (slot %s)\n"
-msgstr "תכנית %s: החל הזרמת היומן בכתובת %X/%X (חריץ %s)\n"
+msgid "%s: starting log streaming at %X/%08X (slot %s)\n"
+msgstr "תכנית %s: החל הזרמת היומן בכתובת %X/%08X (חריץ %s)\n"
 
 #: pg_recvlogical.c:280
 #, c-format
@@ -1332,8 +1332,8 @@ msgstr "תכנתי %s: שרת דיווח ציר הזמן הבא לא צפוי %u
 
 #: receivelog.c:653
 #, c-format
-msgid "%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n"
-msgstr "תכנית %s: שרת הפסיק הזרמת ציר הזמן %u ב- %X/%X, אך דיווח ציר הזמן הבא  %u שתתחיל ב %X/%X\n"
+msgid "%s: server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X\n"
+msgstr "תכנית %s: שרת הפסיק הזרמת ציר הזמן %u ב- %X/%08X, אך דיווח ציר הזמן הבא  %u שתתחיל ב %X/%08X\n"
 
 #: receivelog.c:694
 #, c-format
diff --git a/src/bin/pg_basebackup/po/it.po b/src/bin/pg_basebackup/po/it.po
index 37892c7f527..b4787227ccb 100644
--- a/src/bin/pg_basebackup/po/it.po
+++ b/src/bin/pg_basebackup/po/it.po
@@ -1227,18 +1227,18 @@ msgstr "      --drop-slot        elimina lo slot di replica (per il nome vedi --
 
 #: pg_receivewal.c:252
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "segmento finito alle %X/%X (timeline %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "segmento finito alle %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:259
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "flusso di log interrotto alle %X/%X (timeline %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "flusso di log interrotto alle %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:275
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "passato alla sequenza temporale %u alle %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "passato alla sequenza temporale %u alle %X/%08X"
 
 #: pg_receivewal.c:285
 #, c-format
@@ -1312,8 +1312,8 @@ msgstr "impossibile controllare il file \"%s\": compressione con %s non supporta
 
 #: pg_receivewal.c:641
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "avvio del flusso di log alle %X/%X (timeline %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "avvio del flusso di log alle %X/%08X (timeline %u)"
 
 #: pg_receivewal.c:783 pg_recvlogical.c:785
 #, c-format
@@ -1441,8 +1441,8 @@ msgstr "  -d, --dbname=NOMEDB    database a cui connettersi\n"
 
 #: pg_recvlogical.c:137
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "conferma scrittura fino a %X/%X, svuota fino a %X/%X (slot %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "conferma scrittura fino a %X/%08X, svuota fino a %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:161 receivelog.c:366
 #, c-format
@@ -1451,8 +1451,8 @@ msgstr "impossibile inviare il pacchetto di feedback: %s"
 
 #: pg_recvlogical.c:229
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "avvio dello streaming del registro a %X/%X (slot %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "avvio dello streaming del registro a %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:271
 #, c-format
@@ -1552,13 +1552,13 @@ msgstr "non è stato possibile stabilire una connessione di replica specifica de
 
 #: pg_recvlogical.c:1033
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "posizione finale %X/%X raggiunta da keepalive"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "posizione finale %X/%08X raggiunta da keepalive"
 
 #: pg_recvlogical.c:1036
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "posizione finale %X/%X raggiunta dal record WAL a %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "posizione finale %X/%08X raggiunta dal record WAL a %X/%08X"
 
 #: receivelog.c:68
 #, c-format
@@ -1659,8 +1659,8 @@ msgstr "il server ha segnalato la sequenza temporale successiva inaspettata %u,
 
 #: receivelog.c:638
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "il server ha interrotto lo streaming della sequenza temporale %u alle %X/%X, ma ha segnalato che la sequenza temporale successiva %u inizia alle %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "il server ha interrotto lo streaming della sequenza temporale %u alle %X/%08X, ma ha segnalato che la sequenza temporale successiva %u inizia alle %X/%08X"
 
 #: receivelog.c:678
 #, c-format
diff --git a/src/bin/pg_basebackup/po/ja.po b/src/bin/pg_basebackup/po/ja.po
index d85ecc42ae0..508297ca349 100644
--- a/src/bin/pg_basebackup/po/ja.po
+++ b/src/bin/pg_basebackup/po/ja.po
@@ -2099,17 +2099,17 @@ msgstr ""
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "%X/%X (タイムライン %u)でセグメントが完了"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "%X/%08X (タイムライン %u)でセグメントが完了"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "%X/%X (タイムライン %u)でログのストリーミングを停止しました"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "%X/%08X (タイムライン %u)でログのストリーミングを停止しました"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
+msgid "switched to timeline %u at %X/%08X"
 msgstr "%3$X/%2$Xで タイムライン%1$uに切り替えました"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1073
@@ -2179,8 +2179,8 @@ msgstr "ファイル\"%s\"の確認ができません: %sによる圧縮はこ
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "%X/%X (タイムライン %u)からログのストリーミングを開始"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "%X/%08X (タイムライン %u)からログのストリーミングを開始"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:807
 #, c-format
@@ -2319,8 +2319,8 @@ msgstr "  -d, --dbname=DBNAME    接続先データベース\n"
 
 #: pg_recvlogical.c:146
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "PrecPpg%X/%Xまでの書き込みと、%X/%X (スロット %s)までのフラッシュを確認しています"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "PrecPpg%X/%08Xまでの書き込みと、%X/%08X (スロット %s)までのフラッシュを確認しています"
 
 #: pg_recvlogical.c:170 receivelog.c:359
 #, c-format
@@ -2329,8 +2329,8 @@ msgstr "フィードバックパケットを送信できませんでした: %s"
 
 #: pg_recvlogical.c:240
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "%X/%X (スロット %s)からログのストリーミングを開始します"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "%X/%08X (スロット %s)からログのストリーミングを開始します"
 
 #: pg_recvlogical.c:282
 #, c-format
@@ -2435,13 +2435,13 @@ msgstr "データベース指定のレプリケーション接続が確立でき
 
 #: pg_recvlogical.c:1076
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "キープアライブで終了位置 %X/%X に到達しました "
+msgid "end position %X/%08X reached by keepalive"
+msgstr "キープアライブで終了位置 %X/%08X に到達しました "
 
 #: pg_recvlogical.c:1081
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "%X/%X のWALレコードで終了位置 %X/%X に到達しました"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "%X/%08X のWALレコードで終了位置 %X/%08X に到達しました"
 
 #: receivelog.c:65
 #, c-format
@@ -2536,8 +2536,8 @@ msgstr "サーバーがタイムライン%2$uに続いて想定外のタイム
 
 #: receivelog.c:631
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "サーバーはタイムライン%uのストリーミングを%X/%Xで停止しました、しかし次のタイムライン%uが%X/%Xから開始すると通知してきています"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "サーバーはタイムライン%uのストリーミングを%X/%08Xで停止しました、しかし次のタイムライン%uが%X/%08Xから開始すると通知してきています"
 
 #: receivelog.c:671
 #, c-format
diff --git a/src/bin/pg_basebackup/po/ka.po b/src/bin/pg_basebackup/po/ka.po
index b42019dcab6..ef8eb0496d4 100644
--- a/src/bin/pg_basebackup/po/ka.po
+++ b/src/bin/pg_basebackup/po/ka.po
@@ -2085,18 +2085,18 @@ msgstr "      --drop-slot        რეპლიკაციის სლოტ
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "სეგმენტის დასრულების მისამართია %X/%X (დროის ხაზი %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "სეგმენტის დასრულების მისამართია %X/%08X (დროის ხაზი %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "ჟურნალის ნაკადი შეჩერდა მისამართზე %X/%X (დროის ხაზი %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "ჟურნალის ნაკადი შეჩერდა მისამართზე %X/%08X (დროის ხაზი %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "გადავერთე %u-ე დროის ხაზზე მისამართით %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "გადავერთე %u-ე დროის ხაზზე მისამართით %X/%08X"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1073
 #, c-format
@@ -2165,8 +2165,8 @@ msgstr "ფაილის (%s) შემოწმება შეუძლე
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "ჟურნალის ნაკადი დაიწყო მისამართზე %X/%X (დროის ხაზი %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "ჟურნალის ნაკადი დაიწყო მისამართზე %X/%08X (დროის ხაზი %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:807
 #, c-format
@@ -2307,8 +2307,8 @@ msgstr "  -d, --dbname=DBNAME    მისაერთებელი ბაზ
 
 #: pg_recvlogical.c:146
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "ჩაწერის დადასტურება %X/%X-მდე, %X/%X-მდე მოცილება (სლოტი %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "ჩაწერის დადასტურება %X/%08X-მდე, %X/%08X-მდე მოცილება (სლოტი %s)"
 
 #: pg_recvlogical.c:170 receivelog.c:359
 #, c-format
@@ -2317,8 +2317,8 @@ msgstr "უკუკავშირის პაკეტის გაგზა
 
 #: pg_recvlogical.c:240
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "ჟურნალის ნაკადის დაწყება მისამართზე %X/%X (სლოტი %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "ჟურნალის ნაკადის დაწყება მისამართზე %X/%08X (სლოტი %s)"
 
 #: pg_recvlogical.c:282
 #, c-format
@@ -2424,13 +2424,13 @@ msgstr "ბაზაზე-დამოკიდებული რეპლი
 
 #: pg_recvlogical.c:1076
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "ბოლო მდებარეობა %X/%X keepalive-ის მიერ მიღწეული"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "ბოლო მდებარეობა %X/%08X keepalive-ის მიერ მიღწეული"
 
 #: pg_recvlogical.c:1081
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "ბოლო მდებარეობა %X/%X WAL ჩანაწერის მიერ მიღწეულია მისამართზე %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "ბოლო მდებარეობა %X/%08X WAL ჩანაწერის მიერ მიღწეულია მისამართზე %X/%08X"
 
 #: receivelog.c:65
 #, c-format
@@ -2526,8 +2526,8 @@ msgstr "სერვერის პასუხში მოულოდნე
 
 #: receivelog.c:631
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "სერვერმა შეწყვიტა დროის ხაზის %u ნაკადი მისამართზე %X/%X, მაგრამ მოიწერა, რომ შემდეგი დროის ხაზი %u მისამართზე %X/%X იწყება"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "სერვერმა შეწყვიტა დროის ხაზის %u ნაკადი მისამართზე %X/%08X, მაგრამ მოიწერა, რომ შემდეგი დროის ხაზი %u მისამართზე %X/%08X იწყება"
 
 #: receivelog.c:671
 #, c-format
diff --git a/src/bin/pg_basebackup/po/ko.po b/src/bin/pg_basebackup/po/ko.po
index 08861d1022c..fabecc2b87c 100644
--- a/src/bin/pg_basebackup/po/ko.po
+++ b/src/bin/pg_basebackup/po/ko.po
@@ -2101,18 +2101,18 @@ msgstr ""
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "마무리된 세그먼트 위치: %X/%X (타임라인 %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "마무리된 세그먼트 위치: %X/%08X (타임라인 %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "로그 스트리밍 중지된 위치: %X/%X (타임라인 %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "로그 스트리밍 중지된 위치: %X/%08X (타임라인 %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "전환됨: 타임라인 %u, 위치 %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "전환됨: 타임라인 %u, 위치 %X/%08X"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1053
 #, c-format
@@ -2184,8 +2184,8 @@ msgstr "\"%s\" 파일 검사 실패: %s 압축을 지원 안하게 빌드되었
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "로그 스트리밍 시작 위치: %X/%X (타임라인 %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "로그 스트리밍 시작 위치: %X/%08X (타임라인 %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:801
 #, c-format
@@ -2325,8 +2325,8 @@ msgstr "  -d, --dbname=디비이름  접속할 데이터베이스\n"
 
 #: pg_recvlogical.c:145
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "쓰기 확인 위치: %X/%X, 플러시 위치 %X/%X (슬롯 %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "쓰기 확인 위치: %X/%08X, 플러시 위치 %X/%08X (슬롯 %s)"
 
 #: pg_recvlogical.c:169 receivelog.c:360
 #, c-format
@@ -2335,8 +2335,8 @@ msgstr "피드백 패킷을 보낼 수 없음: %s"
 
 #: pg_recvlogical.c:239
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "로그 스트리밍 시작 함, 위치: %X/%X (슬롯 %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "로그 스트리밍 시작 함, 위치: %X/%08X (슬롯 %s)"
 
 #: pg_recvlogical.c:281
 #, c-format
@@ -2438,13 +2438,13 @@ msgstr "데이터베이스 의존적인 복제 연결을 할 수 없음"
 
 #: pg_recvlogical.c:1056
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "keepalive에 의해서 %X/%X 마지막 위치에 도달했음"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "keepalive에 의해서 %X/%08X 마지막 위치에 도달했음"
 
 #: pg_recvlogical.c:1061
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "%X/%X 마지막 위치가 WAL 레코드 %X/%X 위치에서 도달했음"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "%X/%08X 마지막 위치가 WAL 레코드 %X/%08X 위치에서 도달했음"
 
 #: receivelog.c:66
 #, c-format
@@ -2554,11 +2554,11 @@ msgstr "서버가 잘못된 다음 타임라인 번호 %u 보고함, 이전 타
 #: receivelog.c:632
 #, c-format
 msgid ""
-"server stopped streaming timeline %u at %X/%X, but reported next timeline %u "
-"to begin at %X/%X"
+"server stopped streaming timeline %u at %X/%08X, but reported next timeline %u "
+"to begin at %X/%08X"
 msgstr ""
-"서버의 중지 위치: 타임라인 %u, 위치 %X/%X, 하지만 보고 받은 위치: 타임라인 "
-"%u 위치 %X/%X"
+"서버의 중지 위치: 타임라인 %u, 위치 %X/%08X, 하지만 보고 받은 위치: 타임라인 "
+"%u 위치 %X/%08X"
 
 #: receivelog.c:672
 #, c-format
diff --git a/src/bin/pg_basebackup/po/pl.po b/src/bin/pg_basebackup/po/pl.po
index b0e647b9417..8c3f0e3512d 100644
--- a/src/bin/pg_basebackup/po/pl.po
+++ b/src/bin/pg_basebackup/po/pl.po
@@ -849,13 +849,13 @@ msgstr "      --drop-slot        usuwa gniazdo replikacji (nazwa gniazda patrz "
 
 #: pg_receivewal.c:111
 #, c-format
-msgid "%s: finished segment at %X/%X (timeline %u)\n"
-msgstr "%s: zakończono segment na %X/%X (oś czasu %u)\n"
+msgid "%s: finished segment at %X/%08X (timeline %u)\n"
+msgstr "%s: zakończono segment na %X/%08X (oś czasu %u)\n"
 
 #: pg_receivewal.c:124
 #, c-format
-msgid "%s: switched to timeline %u at %X/%X\n"
-msgstr "%s: przełączono na linię czasu %u na %X/%X\n"
+msgid "%s: switched to timeline %u at %X/%08X\n"
+msgstr "%s: przełączono na linię czasu %u na %X/%08X\n"
 
 #: pg_receivewal.c:133
 #, c-format
@@ -895,8 +895,8 @@ msgstr "%s: spakowany plik segmentu \"%s\" ma niepoprawny rozmiar po rozpakowani
 
 #: pg_receivewal.c:407
 #, c-format
-msgid "%s: starting log streaming at %X/%X (timeline %u)\n"
-msgstr "%s: rozpoczęto przesyłanie dziennika na %X/%X (oś czasu %u)\n"
+msgid "%s: starting log streaming at %X/%08X (timeline %u)\n"
+msgstr "%s: rozpoczęto przesyłanie dziennika na %X/%08X (oś czasu %u)\n"
 
 #: pg_receivewal.c:518 pg_recvlogical.c:762
 #, c-format
@@ -1021,8 +1021,8 @@ msgstr "  -d, --dbname=NAZWADB         baza danych do połączenia\n"
 
 #: pg_recvlogical.c:135
 #, c-format
-msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n"
-msgstr "%s: potwierdzenie zapisu aż do %X/%X, zrzut do %X/%X (gniazdo %s)\n"
+msgid "%s: confirming write up to %X/%08X, flush to %X/%08X (slot %s)\n"
+msgstr "%s: potwierdzenie zapisu aż do %X/%08X, zrzut do %X/%08X (gniazdo %s)\n"
 
 #: pg_recvlogical.c:160 receivelog.c:345
 #, c-format
@@ -1036,8 +1036,8 @@ msgstr "%s: nie można wykonać fsync na pliku dziennika \"%s\": %s\n"
 
 #: pg_recvlogical.c:238
 #, c-format
-msgid "%s: starting log streaming at %X/%X (slot %s)\n"
-msgstr "%s: rozpoczęto przesyłanie dziennika na %X/%X (gniazdo %s)\n"
+msgid "%s: starting log streaming at %X/%08X (slot %s)\n"
+msgstr "%s: rozpoczęto przesyłanie dziennika na %X/%08X (gniazdo %s)\n"
 
 #: pg_recvlogical.c:280
 #, c-format
@@ -1237,9 +1237,9 @@ msgstr "%s: serwer zgłosił nieoczekiwaną kolejną linię czasu %u, za linią
 
 #: receivelog.c:642
 #, c-format
-msgid "%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n"
-msgstr "%s: serwer zakończył przepływ linii czasu %u na %X/%X, ale zgłosił kolejną "
-"linię czasu %u o początku %X/%X\n"
+msgid "%s: server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X\n"
+msgstr "%s: serwer zakończył przepływ linii czasu %u na %X/%08X, ale zgłosił kolejną "
+"linię czasu %u o początku %X/%08X\n"
 
 #: receivelog.c:683
 #, c-format
diff --git a/src/bin/pg_basebackup/po/pt_BR.po b/src/bin/pg_basebackup/po/pt_BR.po
index 60ca723adf3..3fbcd75e492 100644
--- a/src/bin/pg_basebackup/po/pt_BR.po
+++ b/src/bin/pg_basebackup/po/pt_BR.po
@@ -697,13 +697,13 @@ msgstr "      --drop-slot        remove a entrada de replicação (para nome da
 
 #: pg_receivexlog.c:100
 #, c-format
-msgid "%s: finished segment at %X/%X (timeline %u)\n"
-msgstr "%s: terminou o segmento em %X/%X (linha do tempo %u)\n"
+msgid "%s: finished segment at %X/%08X (timeline %u)\n"
+msgstr "%s: terminou o segmento em %X/%08X (linha do tempo %u)\n"
 
 #: pg_receivexlog.c:113
 #, c-format
-msgid "%s: switched to timeline %u at %X/%X\n"
-msgstr "%s: passou para linha do tempo %u em %X/%X\n"
+msgid "%s: switched to timeline %u at %X/%08X\n"
+msgstr "%s: passou para linha do tempo %u em %X/%08X\n"
 
 #: pg_receivexlog.c:122
 #, c-format
@@ -737,8 +737,8 @@ msgstr "%s: não pôde ler diretório \"%s\": %s\n"
 
 #: pg_receivexlog.c:331
 #, c-format
-msgid "%s: starting log streaming at %X/%X (timeline %u)\n"
-msgstr "%s: iniciando fluxo de log em %X/%X (linha do tempo %u)\n"
+msgid "%s: starting log streaming at %X/%08X (timeline %u)\n"
+msgstr "%s: iniciando fluxo de log em %X/%08X (linha do tempo %u)\n"
 
 #: pg_receivexlog.c:420 pg_recvlogical.c:699
 #, c-format
@@ -852,8 +852,8 @@ msgstr "  -d, --dbname=NOMEBD    banco de dados ao qual quer se conectar\n"
 
 #: pg_recvlogical.c:126
 #, c-format
-msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n"
-msgstr "%s: confirmando escrita até %X/%X, escrita no disco até %X/%X (entrada %s)\n"
+msgid "%s: confirming write up to %X/%08X, flush to %X/%08X (slot %s)\n"
+msgstr "%s: confirmando escrita até %X/%08X, escrita no disco até %X/%08X (entrada %s)\n"
 
 #: pg_recvlogical.c:151 receivelog.c:415
 #, c-format
@@ -867,8 +867,8 @@ msgstr "%s: não pôde executar fsync no arquivo de log \"%s\": %s\n"
 
 #: pg_recvlogical.c:229
 #, c-format
-msgid "%s: starting log streaming at %X/%X (slot %s)\n"
-msgstr "%s: iniciando fluxo de log em %X/%X (entrada %s)\n"
+msgid "%s: starting log streaming at %X/%08X (slot %s)\n"
+msgstr "%s: iniciando fluxo de log em %X/%08X (entrada %s)\n"
 
 #: pg_recvlogical.c:271
 #, c-format
@@ -1069,8 +1069,8 @@ msgstr "%s: servidor relatou próxima linha do tempo %u inesperada, seguindo lin
 
 #: receivelog.c:695
 #, c-format
-msgid "%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n"
-msgstr "%s: servidor parou de enviar linha do tempo %u em %X/%X, mas relatou próxima linha do tempo %u começando em %X/%X\n"
+msgid "%s: server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X\n"
+msgstr "%s: servidor parou de enviar linha do tempo %u em %X/%08X, mas relatou próxima linha do tempo %u começando em %X/%08X\n"
 
 #: receivelog.c:736
 #, c-format
diff --git a/src/bin/pg_basebackup/po/ru.po b/src/bin/pg_basebackup/po/ru.po
index 94912f27c90..25e371308a9 100644
--- a/src/bin/pg_basebackup/po/ru.po
+++ b/src/bin/pg_basebackup/po/ru.po
@@ -2176,18 +2176,18 @@ msgstr ""
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "завершён сегмент %X/%X (линия времени %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "завершён сегмент %X/%08X (линия времени %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "завершена передача журнала с позиции %X/%X (линия времени %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "завершена передача журнала с позиции %X/%08X (линия времени %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "переключение на линию времени %u (позиция %X/%X)"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "переключение на линию времени %u (позиция %X/%08X)"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1053
 #, c-format
@@ -2265,8 +2265,8 @@ msgstr ""
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "начало передачи журнала с позиции %X/%X (линия времени %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "начало передачи журнала с позиции %X/%08X (линия времени %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:801
 #, c-format
@@ -2415,8 +2415,8 @@ msgstr "  -d, --dbname=ИМЯ_БД    целевая база данных\n"
 
 #: pg_recvlogical.c:145
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "подтверждается запись до %X/%X, синхронизация с ФС до %X/%X (слот %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "подтверждается запись до %X/%08X, синхронизация с ФС до %X/%08X (слот %s)"
 
 #: pg_recvlogical.c:169 receivelog.c:360
 #, c-format
@@ -2425,8 +2425,8 @@ msgstr "не удалось отправить пакет ответа: %s"
 
 #: pg_recvlogical.c:239
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "начало передачи журнала с позиции %X/%X (слот %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "начало передачи журнала с позиции %X/%08X (слот %s)"
 
 #: pg_recvlogical.c:281
 #, c-format
@@ -2527,13 +2527,13 @@ msgstr ""
 
 #: pg_recvlogical.c:1056
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "конечная позиция %X/%X достигнута при обработке keepalive"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "конечная позиция %X/%08X достигнута при обработке keepalive"
 
 #: pg_recvlogical.c:1061
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "конечная позиция %X/%X достигнута при обработке записи WAL %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "конечная позиция %X/%08X достигнута при обработке записи WAL %X/%08X"
 
 #: receivelog.c:66
 #, c-format
@@ -2650,11 +2650,11 @@ msgstr "сервер неожиданно сообщил линию времен
 #: receivelog.c:632
 #, c-format
 msgid ""
-"server stopped streaming timeline %u at %X/%X, but reported next timeline %u "
-"to begin at %X/%X"
+"server stopped streaming timeline %u at %X/%08X, but reported next timeline %u "
+"to begin at %X/%08X"
 msgstr ""
-"сервер прекратил передачу линии времени %u в %X/%X, но сообщил, что "
-"следующая линии времени %u начнётся в %X/%X"
+"сервер прекратил передачу линии времени %u в %X/%08X, но сообщил, что "
+"следующая линии времени %u начнётся в %X/%08X"
 
 #: receivelog.c:672
 #, c-format
diff --git a/src/bin/pg_basebackup/po/sv.po b/src/bin/pg_basebackup/po/sv.po
index e93dab66b4c..f6a828de38a 100644
--- a/src/bin/pg_basebackup/po/sv.po
+++ b/src/bin/pg_basebackup/po/sv.po
@@ -2011,18 +2011,18 @@ msgstr "      --drop-slot        släng replikeringsslot (angående slot:ens nam
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "slutförde segment vid %X/%X (tidslinje %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "slutförde segment vid %X/%08X (tidslinje %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "stoppade logg-strömning vid %X/%X (tidslinje %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "stoppade logg-strömning vid %X/%08X (tidslinje %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "bytte till tidslinje %u vid %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "bytte till tidslinje %u vid %X/%08X"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1053
 #, c-format
@@ -2091,8 +2091,8 @@ msgstr "kan inte kontrollera filen \"%s\": komprimering med %s stöds inte av de
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "startar logg-strömning vid %X/%X (tidslinje %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "startar logg-strömning vid %X/%08X (tidslinje %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:801
 #, c-format
@@ -2220,8 +2220,8 @@ msgstr "  -d, --dbname=DBNAMN    databas att ansluta till\n"
 
 #: pg_recvlogical.c:145
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "bekräftar skrivning fram till %X/%X, flush till %X/%X (slot %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "bekräftar skrivning fram till %X/%08X, flush till %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:169 receivelog.c:360
 #, c-format
@@ -2230,8 +2230,8 @@ msgstr "kunde inte skicka feedback-paket: %s"
 
 #: pg_recvlogical.c:239
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "startar logg-strömning vid %X/%X (slot %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "startar logg-strömning vid %X/%08X (slot %s)"
 
 #: pg_recvlogical.c:281
 #, c-format
@@ -2331,13 +2331,13 @@ msgstr "kunde inte upprätta databasspecifik replikeringsanslutning"
 
 #: pg_recvlogical.c:1056
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "slutposition %X/%X nådd av keepalive"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "slutposition %X/%08X nådd av keepalive"
 
 #: pg_recvlogical.c:1061
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "slutposition %X/%X nådd av WAL-post vid %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "slutposition %X/%08X nådd av WAL-post vid %X/%08X"
 
 #: receivelog.c:66
 #, c-format
@@ -2433,8 +2433,8 @@ msgstr "servern rapporterade oväntad nästa tidslinje %u, följer på tidslinje
 
 #: receivelog.c:632
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "servern stoppade strömning av tidslinje %u vid %X/%X men rapporterade nästa tidslinje %u skulle börja vid %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "servern stoppade strömning av tidslinje %u vid %X/%08X men rapporterade nästa tidslinje %u skulle börja vid %X/%08X"
 
 #: receivelog.c:672
 #, c-format
diff --git a/src/bin/pg_basebackup/po/tr.po b/src/bin/pg_basebackup/po/tr.po
index 92e0513da04..ba6c1b95715 100644
--- a/src/bin/pg_basebackup/po/tr.po
+++ b/src/bin/pg_basebackup/po/tr.po
@@ -894,17 +894,17 @@ msgstr "      --drop-slot        replikasyon slotunu sil (slotun adı için bkz.
 
 #: pg_receivewal.c:118
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "segment %X/%X de bitirildi (zaman çizelgesi %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "segment %X/%08X de bitirildi (zaman çizelgesi %u)"
 
 #: pg_receivewal.c:125
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "log streaming %X/%X de durduruldu (zaman çizelgesi %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "log streaming %X/%08X de durduruldu (zaman çizelgesi %u)"
 
 #: pg_receivewal.c:141
 #, c-format
-msgid "switched to timeline %u at %X/%X"
+msgid "switched to timeline %u at %X/%08X"
 msgstr "%2$X/%3$X konumunda%1$u zaman çizelgesine geçildi"
 
 #: pg_receivewal.c:151
@@ -949,8 +949,8 @@ msgstr "%s sıkıştırılmış segment dosyasının sıkıştırılmamış boyu
 
 #: pg_receivewal.c:423
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "%X/%X de log streaming başlatılıyor (zaman çizelgesi %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "%X/%08X de log streaming başlatılıyor (zaman çizelgesi %u)"
 
 #: pg_receivewal.c:538 pg_recvlogical.c:738
 #, c-format
@@ -1073,8 +1073,8 @@ msgstr "  -d, --dbname=VERITABANI_ADI    bağlanılacak veritabanı adı\n"
 
 #: pg_recvlogical.c:135
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "%X/%X e kadar yazma, %X/%X'e kadar boşaltma (flush) için onaylama (slot %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "%X/%08X e kadar yazma, %X/%08X'e kadar boşaltma (flush) için onaylama (slot %s)"
 
 #: pg_recvlogical.c:159 receivelog.c:346
 #, c-format
@@ -1083,8 +1083,8 @@ msgstr "geribesleme (feedback) paketi gönderilemedi: %s"
 
 #: pg_recvlogical.c:232
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "%X/%X de log streaming işlemi başlatılıyor (slot %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "%X/%08X de log streaming işlemi başlatılıyor (slot %s)"
 
 #: pg_recvlogical.c:273
 #, c-format
@@ -1183,12 +1183,12 @@ msgstr "veritabanına özel replikasyon bağlantısı kurulamadı"
 
 #: pg_recvlogical.c:1023
 #, c-format
-msgid "endpos %X/%X reached by keepalive"
-msgstr "keepalive tarafından endpos %X/%X'a ulaşıldı"
+msgid "endpos %X/%08X reached by keepalive"
+msgstr "keepalive tarafından endpos %X/%08X'a ulaşıldı"
 
 #: pg_recvlogical.c:1026
 #, c-format
-msgid "endpos %X/%X reached by record at %X/%X"
+msgid "endpos %X/%08X reached by record at %X/%08X"
 msgstr "%3$X/%4$X deki kayıt tarafından endpos %1$X/%2$X'e ulaşıldı"
 
 #: receivelog.c:72
@@ -1289,8 +1289,8 @@ msgstr "sunucu %2$u zaman çizelgesini takiben beklenmedik sonraki zaman çizelg
 
 #: receivelog.c:622
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "sunucu %u streaming zaman çizelgesini %X/%X de durdurdu, fakat sonraki %u zaman çizelgesinin %X/%X de başlayacağını bildirdi"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "sunucu %u streaming zaman çizelgesini %X/%08X de durdurdu, fakat sonraki %u zaman çizelgesinin %X/%08X de başlayacağını bildirdi"
 
 #: receivelog.c:662
 #, c-format
diff --git a/src/bin/pg_basebackup/po/uk.po b/src/bin/pg_basebackup/po/uk.po
index 09cd1a552dd..46fd7e0de56 100644
--- a/src/bin/pg_basebackup/po/uk.po
+++ b/src/bin/pg_basebackup/po/uk.po
@@ -1956,18 +1956,18 @@ msgstr "      --drop-slot        видалити слот реплікації
 
 #: pg_receivewal.c:191
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "завершено сегмент в позиції %X/%X (часова шкала %u)"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "завершено сегмент в позиції %X/%08X (часова шкала %u)"
 
 #: pg_receivewal.c:198
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "зупинено потокове передавання журналу в позиції %X/%X (часова шкала %u)"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "зупинено потокове передавання журналу в позиції %X/%08X (часова шкала %u)"
 
 #: pg_receivewal.c:214
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "переключено на часову шкалу %u в позиції %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "переключено на часову шкалу %u в позиції %X/%08X"
 
 #: pg_receivewal.c:224 pg_recvlogical.c:1053
 #, c-format
@@ -2036,8 +2036,8 @@ msgstr "неможливо перевірити файл \"%s\": стиснен
 
 #: pg_receivewal.c:578
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "початок потокового передавання журналу в позиції %X/%X (часова шкала %u)"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "початок потокового передавання журналу в позиції %X/%08X (часова шкала %u)"
 
 #: pg_receivewal.c:693 pg_recvlogical.c:801
 #, c-format
@@ -2155,8 +2155,8 @@ msgstr "  -d, --dbname=DBNAME    бази даних для підключенн
 
 #: pg_recvlogical.c:145
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "підтвердження запису до %X/%X, очищення до %X/%X (слот %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "підтвердження запису до %X/%08X, очищення до %X/%08X (слот %s)"
 
 #: pg_recvlogical.c:169 receivelog.c:360
 #, c-format
@@ -2165,8 +2165,8 @@ msgstr "не вдалося відправити пакет зворотньог
 
 #: pg_recvlogical.c:239
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "початок потокового передавання журналу в позиції %X/%X (слот %s)"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "початок потокового передавання журналу в позиції %X/%08X (слот %s)"
 
 #: pg_recvlogical.c:281
 #, c-format
@@ -2266,13 +2266,13 @@ msgstr "не вдалося встановити підключення для 
 
 #: pg_recvlogical.c:1056
 #, c-format
-msgid "end position %X/%X reached by keepalive"
-msgstr "кінцева позиція %X/%X досягнута наживо"
+msgid "end position %X/%08X reached by keepalive"
+msgstr "кінцева позиція %X/%08X досягнута наживо"
 
 #: pg_recvlogical.c:1061
 #, c-format
-msgid "end position %X/%X reached by WAL record at %X/%X"
-msgstr "кінцева позиція %X/%X досягнута WAL записом %X/%X"
+msgid "end position %X/%08X reached by WAL record at %X/%08X"
+msgstr "кінцева позиція %X/%08X досягнута WAL записом %X/%08X"
 
 #: receivelog.c:66
 #, c-format
@@ -2370,8 +2370,8 @@ msgstr "сервер неочікувано повідомив наступну
 
 #: receivelog.c:632
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
-msgstr "сервер зупинив потокове передавання часової шкали %u в позиції %X/%X, але повідомив, що наступна часова шкала %u почнеться в позиції %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
+msgstr "сервер зупинив потокове передавання часової шкали %u в позиції %X/%08X, але повідомив, що наступна часова шкала %u почнеться в позиції %X/%08X"
 
 #: receivelog.c:672
 #, c-format
diff --git a/src/bin/pg_basebackup/po/vi.po b/src/bin/pg_basebackup/po/vi.po
index 19fcce3c253..1bb507c6ad4 100644
--- a/src/bin/pg_basebackup/po/vi.po
+++ b/src/bin/pg_basebackup/po/vi.po
@@ -926,18 +926,18 @@ msgstr ""
 
 #: pg_receivewal.c:116
 #, c-format
-msgid "%s: finished segment at %X/%X (timeline %u)\n"
-msgstr "%s: kết thúc phân đoạn tại %X/%X (timeline %u)\n"
+msgid "%s: finished segment at %X/%08X (timeline %u)\n"
+msgstr "%s: kết thúc phân đoạn tại %X/%08X (timeline %u)\n"
 
 #: pg_receivewal.c:123
 #, c-format
-msgid "%s: stopped streaming at %X/%X (timeline %u)\n"
-msgstr "%s: kết thúc truyền tại %X/%X (timeline %u)\n"
+msgid "%s: stopped streaming at %X/%08X (timeline %u)\n"
+msgstr "%s: kết thúc truyền tại %X/%08X (timeline %u)\n"
 
 #: pg_receivewal.c:139
 #, c-format
-msgid "%s: switched to timeline %u at %X/%X\n"
-msgstr "%s: chuyển qua timeline %u tại %X/%X\n"
+msgid "%s: switched to timeline %u at %X/%08X\n"
+msgstr "%s: chuyển qua timeline %u tại %X/%08X\n"
 
 #: pg_receivewal.c:149
 #, c-format
@@ -979,8 +979,8 @@ msgstr ""
 
 #: pg_receivewal.c:423
 #, c-format
-msgid "%s: starting log streaming at %X/%X (timeline %u)\n"
-msgstr "%s: bắt đầu truyền log tại %X/%X (timeline %u)\n"
+msgid "%s: starting log streaming at %X/%08X (timeline %u)\n"
+msgstr "%s: bắt đầu truyền log tại %X/%08X (timeline %u)\n"
 
 #: pg_receivewal.c:538 pg_recvlogical.c:763
 #, c-format
@@ -1117,8 +1117,8 @@ msgstr "  -d, --dbname=DBNAME    cở sở dữ liệu kết nối tới\n"
 
 #: pg_recvlogical.c:136
 #, c-format
-msgid "%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n"
-msgstr "%s: xác nhận ghi đến %X/%X, flush đến %X/%X (slot %s)\n"
+msgid "%s: confirming write up to %X/%08X, flush to %X/%08X (slot %s)\n"
+msgstr "%s: xác nhận ghi đến %X/%08X, flush đến %X/%08X (slot %s)\n"
 
 #: pg_recvlogical.c:161 receivelog.c:352
 #, c-format
@@ -1132,7 +1132,7 @@ msgstr "%s: không thể fsync tệp log \"%s\": %s\n"
 
 #: pg_recvlogical.c:239
 #, c-format
-msgid "%s: starting log streaming at %X/%X (slot %s)\n"
+msgid "%s: starting log streaming at %X/%08X (slot %s)\n"
 msgstr "%s: bắt đầu truyền log ở %X /%X (slot %s)\n"
 
 #: pg_recvlogical.c:281
@@ -1351,11 +1351,11 @@ msgstr ""
 #: receivelog.c:638
 #, c-format
 msgid ""
-"%s: server stopped streaming timeline %u at %X/%X, but reported next "
-"timeline %u to begin at %X/%X\n"
+"%s: server stopped streaming timeline %u at %X/%08X, but reported next "
+"timeline %u to begin at %X/%08X\n"
 msgstr ""
-"%s: server ngừng phát timeline %u ở %X/%X, nhưng đã báo cáo timeline tiếp "
-"theo %u để bắt đầu ở %X/%X\n"
+"%s: server ngừng phát timeline %u ở %X/%08X, nhưng đã báo cáo timeline tiếp "
+"theo %u để bắt đầu ở %X/%08X\n"
 "\n"
 
 #: receivelog.c:680
diff --git a/src/bin/pg_basebackup/po/zh_CN.po b/src/bin/pg_basebackup/po/zh_CN.po
index 8583ac20b62..42cf151ad8f 100644
--- a/src/bin/pg_basebackup/po/zh_CN.po
+++ b/src/bin/pg_basebackup/po/zh_CN.po
@@ -892,18 +892,18 @@ msgstr "      --drop-slot        删除复制槽 (槽名请参考选项 --slot)\
 
 #: pg_receivewal.c:118
 #, c-format
-msgid "finished segment at %X/%X (timeline %u)"
-msgstr "在 %X/%X (时间线 %u)处完成段"
+msgid "finished segment at %X/%08X (timeline %u)"
+msgstr "在 %X/%08X (时间线 %u)处完成段"
 
 #: pg_receivewal.c:125
 #, c-format
-msgid "stopped log streaming at %X/%X (timeline %u)"
-msgstr "在时间点: %X/%X (时间线%u)停止日志的流操作"
+msgid "stopped log streaming at %X/%08X (timeline %u)"
+msgstr "在时间点: %X/%08X (时间线%u)停止日志的流操作"
 
 #: pg_receivewal.c:141
 #, c-format
-msgid "switched to timeline %u at %X/%X"
-msgstr "切换到时间表 %u 在 %X/%X"
+msgid "switched to timeline %u at %X/%08X"
+msgstr "切换到时间表 %u 在 %X/%08X"
 
 #: pg_receivewal.c:151
 #, c-format
@@ -947,8 +947,8 @@ msgstr "压缩的段文件\"%s\"未压缩大小值: %d不正确, 跳过"
 
 #: pg_receivewal.c:423
 #, c-format
-msgid "starting log streaming at %X/%X (timeline %u)"
-msgstr "在时间点: %X/%X (时间线%u)启动日志的流操作"
+msgid "starting log streaming at %X/%08X (timeline %u)"
+msgstr "在时间点: %X/%08X (时间线%u)启动日志的流操作"
 
 #: pg_receivewal.c:538 pg_recvlogical.c:738
 #, c-format
@@ -1071,8 +1071,8 @@ msgstr "  -d, --dbname=DBNAME    要连接的目标数据库\n"
 
 #: pg_recvlogical.c:135
 #, c-format
-msgid "confirming write up to %X/%X, flush to %X/%X (slot %s)"
-msgstr "确认上写至%X/%X, 并刷写回至 %X/%X (槽 %s)"
+msgid "confirming write up to %X/%08X, flush to %X/%08X (slot %s)"
+msgstr "确认上写至%X/%08X, 并刷写回至 %X/%08X (槽 %s)"
 
 #: pg_recvlogical.c:159 receivelog.c:346
 #, c-format
@@ -1081,8 +1081,8 @@ msgstr "无法发送回馈包: %s"
 
 #: pg_recvlogical.c:232
 #, c-format
-msgid "starting log streaming at %X/%X (slot %s)"
-msgstr "在%X/%X (槽 %s)位置启动日志流"
+msgid "starting log streaming at %X/%08X (slot %s)"
+msgstr "在%X/%08X (槽 %s)位置启动日志流"
 
 #: pg_recvlogical.c:273
 #, c-format
@@ -1182,13 +1182,13 @@ msgstr "无法建立数据库相关的复制连接"
 
 #: pg_recvlogical.c:1023
 #, c-format
-msgid "endpos %X/%X reached by keepalive"
-msgstr "keepalive已到达endpos %X/%X"
+msgid "endpos %X/%08X reached by keepalive"
+msgstr "keepalive已到达endpos %X/%08X"
 
 #: pg_recvlogical.c:1026
 #, c-format
-msgid "endpos %X/%X reached by record at %X/%X"
-msgstr "记录在%X/%X到达了endpos %X/%X"
+msgid "endpos %X/%08X reached by record at %X/%08X"
+msgstr "记录在%X/%08X到达了endpos %X/%08X"
 
 #: receivelog.c:72
 #, c-format
@@ -1289,7 +1289,7 @@ msgstr "服务器报出的下次意外时间表 %u, 紧跟时间表 %u之后"
 
 #: receivelog.c:622
 #, c-format
-msgid "server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X"
+msgid "server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X"
 msgstr "服务器在%2$X/%3$X时停止流操作时间表%1$u, 但是报出将在%5$X/%6$X时开始下一个时间表%4$u"
 
 #: receivelog.c:662
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 6b6e32dfbdf..d6b7f117fa3 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -571,7 +571,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 			return true;
 
 		/* Initiate the replication stream at specified location */
-		snprintf(query, sizeof(query), "START_REPLICATION %s%X/%X TIMELINE %u",
+		snprintf(query, sizeof(query), "START_REPLICATION %s%X/%08X TIMELINE %u",
 				 slotcmd,
 				 LSN_FORMAT_ARGS(stream->startpos),
 				 stream->timeline);
@@ -628,7 +628,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 			}
 			if (stream->startpos > stoppos)
 			{
-				pg_log_error("server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X",
+				pg_log_error("server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X",
 							 stream->timeline, LSN_FORMAT_ARGS(stoppos),
 							 newtimeline, LSN_FORMAT_ARGS(stream->startpos));
 				goto error;
@@ -720,7 +720,7 @@ ReadEndOfStreamingResult(PGresult *res, XLogRecPtr *startpos, uint32 *timeline)
 	}
 
 	*timeline = atoi(PQgetvalue(res, 0, 0));
-	if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &startpos_xlogid,
+	if (sscanf(PQgetvalue(res, 0, 1), "%X/%08X", &startpos_xlogid,
 			   &startpos_xrecoff) != 2)
 	{
 		pg_log_error("could not parse next timeline's starting point \"%s\"",
diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c
index c7b8a4c3a4b..e5a7cb6e5b1 100644
--- a/src/bin/pg_basebackup/streamutil.c
+++ b/src/bin/pg_basebackup/streamutil.c
@@ -445,7 +445,7 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli,
 	/* Get LSN start position if necessary */
 	if (startpos != NULL)
 	{
-		if (sscanf(PQgetvalue(res, 0, 2), "%X/%X", &hi, &lo) != 2)
+		if (sscanf(PQgetvalue(res, 0, 2), "%X/%08X", &hi, &lo) != 2)
 		{
 			pg_log_error("could not parse write-ahead log location \"%s\"",
 						 PQgetvalue(res, 0, 2));
@@ -551,7 +551,7 @@ GetSlotInformation(PGconn *conn, const char *slot_name,
 		uint32		hi,
 					lo;
 
-		if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &hi, &lo) != 2)
+		if (sscanf(PQgetvalue(res, 0, 1), "%X/%08X", &hi, &lo) != 2)
 		{
 			pg_log_error("could not parse restart_lsn \"%s\" for replication slot \"%s\"",
 						 PQgetvalue(res, 0, 1), slot_name);
diff --git a/src/bin/pg_combinebackup/backup_label.c b/src/bin/pg_combinebackup/backup_label.c
index e89d4603f09..e774bc78a62 100644
--- a/src/bin/pg_combinebackup/backup_label.c
+++ b/src/bin/pg_combinebackup/backup_label.c
@@ -247,7 +247,7 @@ parse_lsn(char *s, char *e, XLogRecPtr *lsn, char **c)
 	unsigned	lo;
 
 	*e = '\0';
-	success = (sscanf(s, "%X/%X%n", &hi, &lo, &nchars) == 2);
+	success = (sscanf(s, "%X/%08X%n", &hi, &lo, &nchars) == 2);
 	*e = save;
 
 	if (success)
diff --git a/src/bin/pg_combinebackup/pg_combinebackup.c b/src/bin/pg_combinebackup/pg_combinebackup.c
index 28e58cd8ef4..f5cef99f627 100644
--- a/src/bin/pg_combinebackup/pg_combinebackup.c
+++ b/src/bin/pg_combinebackup/pg_combinebackup.c
@@ -569,7 +569,7 @@ check_backup_label_files(int n_backups, char **backup_dirs)
 			pg_fatal("backup at \"%s\" starts on timeline %u, but expected %u",
 					 backup_dirs[i], start_tli, check_tli);
 		if (i < n_backups - 1 && start_lsn != check_lsn)
-			pg_fatal("backup at \"%s\" starts at LSN %X/%X, but expected %X/%X",
+			pg_fatal("backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X",
 					 backup_dirs[i],
 					 LSN_FORMAT_ARGS(start_lsn),
 					 LSN_FORMAT_ARGS(check_lsn));
diff --git a/src/bin/pg_combinebackup/po/de.po b/src/bin/pg_combinebackup/po/de.po
index 7b7966539b9..99ba1423cf8 100644
--- a/src/bin/pg_combinebackup/po/de.po
+++ b/src/bin/pg_combinebackup/po/de.po
@@ -636,8 +636,8 @@ msgstr "Backup in »%s« startet auf Zeitleiste %u, aber %u wurde erwartet"
 
 #: pg_combinebackup.c:572
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "Backup in »%s« startet bei LSN %X/%X, aber %X/%X wurde erwartet"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "Backup in »%s« startet bei LSN %X/%08X, aber %X/%08X wurde erwartet"
 
 #: pg_combinebackup.c:624
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/es.po b/src/bin/pg_combinebackup/po/es.po
index 850ef3dde2a..f43f48a56b0 100644
--- a/src/bin/pg_combinebackup/po/es.po
+++ b/src/bin/pg_combinebackup/po/es.po
@@ -626,8 +626,8 @@ msgstr "el backup en «%s» empieza en el timeline %u, pero se esperaba %u"
 
 #: pg_combinebackup.c:562
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "el backup en «%s» empieza en el LSN %X/%X, pero se esperaba %X/%X"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "el backup en «%s» empieza en el LSN %X/%08X, pero se esperaba %X/%08X"
 
 #: pg_combinebackup.c:614
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/fr.po b/src/bin/pg_combinebackup/po/fr.po
index aa8b0f4ea61..93046a4bf1f 100644
--- a/src/bin/pg_combinebackup/po/fr.po
+++ b/src/bin/pg_combinebackup/po/fr.po
@@ -624,8 +624,8 @@ msgstr "la sauvegarde à « %s » commence à la timeline %u, mais attendait %u"
 
 #: pg_combinebackup.c:562
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "la sauvegarde à « %s » commence au LSN %X/%X, mais s'attendait à %X/%X"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "la sauvegarde à « %s » commence au LSN %X/%08X, mais s'attendait à %X/%08X"
 
 #: pg_combinebackup.c:614
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/ja.po b/src/bin/pg_combinebackup/po/ja.po
index 627c4213b24..9c0c47a3e97 100644
--- a/src/bin/pg_combinebackup/po/ja.po
+++ b/src/bin/pg_combinebackup/po/ja.po
@@ -637,8 +637,8 @@ msgstr "\"%s\"のバックアップはタイムライン%uで始まっていま
 
 #: pg_combinebackup.c:571
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "\"%s\"のバックアップはLSN %X/%Xで始まっていますが、%X/%Xを期待していました"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "\"%s\"のバックアップはLSN %X/%08Xで始まっていますが、%X/%08Xを期待していました"
 
 #: pg_combinebackup.c:623
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/ka.po b/src/bin/pg_combinebackup/po/ka.po
index 9aa8952078c..d69bc7fbc0f 100644
--- a/src/bin/pg_combinebackup/po/ka.po
+++ b/src/bin/pg_combinebackup/po/ka.po
@@ -636,8 +636,8 @@ msgstr "მარქაფი მისამართზე \"%s\" იწყე
 
 #: pg_combinebackup.c:572
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "მარქაფი მისამართზე \"%s\" იწყება LSN-თან %X/%X, მაგრამ მოველოდი მნიშვნელობას %X/%X"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "მარქაფი მისამართზე \"%s\" იწყება LSN-თან %X/%08X, მაგრამ მოველოდი მნიშვნელობას %X/%08X"
 
 #: pg_combinebackup.c:624
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/ko.po b/src/bin/pg_combinebackup/po/ko.po
index e6d9629b170..339c1498fc7 100644
--- a/src/bin/pg_combinebackup/po/ko.po
+++ b/src/bin/pg_combinebackup/po/ko.po
@@ -636,8 +636,8 @@ msgstr "\"%s\"의 백업은 타임라인 %u번으로 시작하지만, 기대번
 
 #: pg_combinebackup.c:562
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "\"%s\"의 백업은 시작 LSN이 %X/%X이지만, 기대 LSN은 %X/%X임"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "\"%s\"의 백업은 시작 LSN이 %X/%08X이지만, 기대 LSN은 %X/%08X임"
 
 #: pg_combinebackup.c:614
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/ru.po b/src/bin/pg_combinebackup/po/ru.po
index 5c2af7387c3..8131e0ed9a4 100644
--- a/src/bin/pg_combinebackup/po/ru.po
+++ b/src/bin/pg_combinebackup/po/ru.po
@@ -650,8 +650,8 @@ msgstr "копия в \"%s\" начинается с линии времени %
 
 #: pg_combinebackup.c:562
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "копия в \"%s\" начинается с LSN %X/%X, а ожидался %X/%X"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "копия в \"%s\" начинается с LSN %X/%08X, а ожидался %X/%08X"
 
 #: pg_combinebackup.c:614
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/sv.po b/src/bin/pg_combinebackup/po/sv.po
index 06327f49fe9..1de4628bc18 100644
--- a/src/bin/pg_combinebackup/po/sv.po
+++ b/src/bin/pg_combinebackup/po/sv.po
@@ -622,8 +622,8 @@ msgstr "backup:en vid \"%s\" startar på tidslinjen %u men det förväntades var
 
 #: pg_combinebackup.c:562
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "backup:eb vid \"%s\" startar vid LSN %X/%X men förväntades vare %X/%X"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "backup:eb vid \"%s\" startar vid LSN %X/%08X men förväntades vare %X/%08X"
 
 #: pg_combinebackup.c:614
 #, c-format
diff --git a/src/bin/pg_combinebackup/po/uk.po b/src/bin/pg_combinebackup/po/uk.po
index 51e19b62206..abd54adcae8 100644
--- a/src/bin/pg_combinebackup/po/uk.po
+++ b/src/bin/pg_combinebackup/po/uk.po
@@ -618,8 +618,8 @@ msgstr "резервне копіювання на \"%s\" починається
 
 #: pg_combinebackup.c:562
 #, c-format
-msgid "backup at \"%s\" starts at LSN %X/%X, but expected %X/%X"
-msgstr "резервне копіювання на \"%s\" починається з LSN %X/%X, але очікується %X/%X"
+msgid "backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X"
+msgstr "резервне копіювання на \"%s\" починається з LSN %X/%08X, але очікується %X/%08X"
 
 #: pg_combinebackup.c:614
 #, c-format
diff --git a/src/bin/pg_combinebackup/write_manifest.c b/src/bin/pg_combinebackup/write_manifest.c
index 313f8929df5..819a3fd0b7a 100644
--- a/src/bin/pg_combinebackup/write_manifest.c
+++ b/src/bin/pg_combinebackup/write_manifest.c
@@ -155,7 +155,7 @@ finalize_manifest(manifest_writer *mwriter,
 	for (wal_range = first_wal_range; wal_range != NULL;
 		 wal_range = wal_range->next)
 		appendStringInfo(&mwriter->buf,
-						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
+						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%08X\", \"End-LSN\": \"%X/%08X\" }",
 						 wal_range == first_wal_range ? "" : ",\n",
 						 wal_range->tli,
 						 LSN_FORMAT_ARGS(wal_range->start_lsn),
diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c
index 7bb801bb886..10de058ce91 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -245,9 +245,9 @@ main(int argc, char *argv[])
 		   dbState(ControlFile->state));
 	printf(_("pg_control last modified:             %s\n"),
 		   pgctime_str);
-	printf(_("Latest checkpoint location:           %X/%X\n"),
+	printf(_("Latest checkpoint location:           %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->checkPoint));
-	printf(_("Latest checkpoint's REDO location:    %X/%X\n"),
+	printf(_("Latest checkpoint's REDO location:    %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->checkPointCopy.redo));
 	printf(_("Latest checkpoint's REDO WAL file:    %s\n"),
 		   xlogfilename);
@@ -282,15 +282,15 @@ main(int argc, char *argv[])
 		   ControlFile->checkPointCopy.newestCommitTsXid);
 	printf(_("Time of latest checkpoint:            %s\n"),
 		   ckpttime_str);
-	printf(_("Fake LSN counter for unlogged rels:   %X/%X\n"),
+	printf(_("Fake LSN counter for unlogged rels:   %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->unloggedLSN));
-	printf(_("Minimum recovery ending location:     %X/%X\n"),
+	printf(_("Minimum recovery ending location:     %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint));
 	printf(_("Min recovery ending loc's timeline:   %u\n"),
 		   ControlFile->minRecoveryPointTLI);
-	printf(_("Backup start location:                %X/%X\n"),
+	printf(_("Backup start location:                %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->backupStartPoint));
-	printf(_("Backup end location:                  %X/%X\n"),
+	printf(_("Backup end location:                  %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->backupEndPoint));
 	printf(_("End-of-backup record required:        %s\n"),
 		   ControlFile->backupEndRequired ? _("yes") : _("no"));
diff --git a/src/bin/pg_controldata/po/cs.po b/src/bin/pg_controldata/po/cs.po
index 165b7d134a0..40a1a79e3df 100644
--- a/src/bin/pg_controldata/po/cs.po
+++ b/src/bin/pg_controldata/po/cs.po
@@ -271,13 +271,13 @@ msgstr "Poslední modifikace pg_control:            %s\n"
 
 #: pg_controldata.c:238
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Poslední umístění checkpointu:             %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Poslední umístění checkpointu:             %X/%08X\n"
 
 #: pg_controldata.c:241
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Poslední umístění REDO checkpointu:        %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Poslední umístění REDO checkpointu:        %X/%08X\n"
 
 #: pg_controldata.c:244
 #, c-format
@@ -369,13 +369,13 @@ msgstr "Čas posledního checkpointu:                %s\n"
 
 #: pg_controldata.c:277
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Falešné LSN počítadlo pro unlogged relace: %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Falešné LSN počítadlo pro unlogged relace: %X/%08X\n"
 
 #: pg_controldata.c:280
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Minimální pozice ukončení obnovy:          %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Minimální pozice ukončení obnovy:          %X/%08X\n"
 
 #: pg_controldata.c:283
 #, c-format
@@ -384,13 +384,13 @@ msgstr "Timeline minimální pozice ukončení obnovy: %u\n"
 
 #: pg_controldata.c:285
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Pozice počátku backupu:                    %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Pozice počátku backupu:                    %X/%08X\n"
 
 #: pg_controldata.c:288
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Koncová pozice zálohy:                     %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Koncová pozice zálohy:                     %X/%08X\n"
 
 #: pg_controldata.c:291
 #, c-format
diff --git a/src/bin/pg_controldata/po/de.po b/src/bin/pg_controldata/po/de.po
index d1ec166e892..5c10bf1bccc 100644
--- a/src/bin/pg_controldata/po/de.po
+++ b/src/bin/pg_controldata/po/de.po
@@ -256,13 +256,13 @@ msgstr "pg_control zuletzt geändert:                 %s\n"
 
 #: pg_controldata.c:237
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Position des letzten Checkpoints:            %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Position des letzten Checkpoints:            %X/%08X\n"
 
 #: pg_controldata.c:239
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "REDO-Position des letzten Checkpoints:       %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "REDO-Position des letzten Checkpoints:       %X/%08X\n"
 
 #: pg_controldata.c:241
 #, c-format
@@ -354,13 +354,13 @@ msgstr "Zeit des letzten Checkpoints:                %s\n"
 
 #: pg_controldata.c:274
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Fake-LSN-Zähler für ungeloggte Relationen:   %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Fake-LSN-Zähler für ungeloggte Relationen:   %X/%08X\n"
 
 #: pg_controldata.c:276
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Minimaler Wiederherstellungsendpunkt:        %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Minimaler Wiederherstellungsendpunkt:        %X/%08X\n"
 
 #: pg_controldata.c:278
 #, c-format
@@ -369,13 +369,13 @@ msgstr "Zeitleiste des minimalen Wiederherstellungsendpunkts: %u\n"
 
 #: pg_controldata.c:280
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Backup-Startpunkt:                           %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Backup-Startpunkt:                           %X/%08X\n"
 
 #: pg_controldata.c:282
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Backup-Endpunkt:                             %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Backup-Endpunkt:                             %X/%08X\n"
 
 #: pg_controldata.c:284
 #, c-format
diff --git a/src/bin/pg_controldata/po/el.po b/src/bin/pg_controldata/po/el.po
index f08b70fecb8..6f5c8f495e7 100644
--- a/src/bin/pg_controldata/po/el.po
+++ b/src/bin/pg_controldata/po/el.po
@@ -269,13 +269,13 @@ msgstr "πιο πρόσφατη μετατροπή pg_control:                 %
 
 #: pg_controldata.c:238
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Πιο πρόσφατη τοποθεσία σημείου ελέγχου:            %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Πιο πρόσφατη τοποθεσία σημείου ελέγχου:            %X/%08X\n"
 
 #: pg_controldata.c:240
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Πιο πρόσφατη τοποθεσία REDO του σημείου ελέγχου:   %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Πιο πρόσφατη τοποθεσία REDO του σημείου ελέγχου:   %X/%08X\n"
 
 #: pg_controldata.c:242
 #, c-format
@@ -367,13 +367,13 @@ msgstr "Ώρα του πιο πρόσφατου σημείου ελέγχου:
 
 #: pg_controldata.c:275
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Ψεύτικος μετρητής LSN για μη κενές rels:           %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Ψεύτικος μετρητής LSN για μη κενές rels:           %X/%08X\n"
 
 #: pg_controldata.c:277
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Ελάχιστη τοποθεσία τερματισμού ανάκαμψης:          %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Ελάχιστη τοποθεσία τερματισμού ανάκαμψης:          %X/%08X\n"
 
 #: pg_controldata.c:279
 #, c-format
@@ -382,13 +382,13 @@ msgstr "Χρονογραμμή ελάχιστης θέσης τερματισμ
 
 #: pg_controldata.c:281
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Τοποθεσία εκκίνησης Backup:                        %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Τοποθεσία εκκίνησης Backup:                        %X/%08X\n"
 
 #: pg_controldata.c:283
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Τοποθεσία τερματισμου Backup:                      %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Τοποθεσία τερματισμου Backup:                      %X/%08X\n"
 
 #: pg_controldata.c:285
 #, c-format
diff --git a/src/bin/pg_controldata/po/es.po b/src/bin/pg_controldata/po/es.po
index 79a931a21b2..0788b2cd0bc 100644
--- a/src/bin/pg_controldata/po/es.po
+++ b/src/bin/pg_controldata/po/es.po
@@ -262,13 +262,13 @@ msgstr "Última modificación de pg_control:          %s\n"
 
 #: pg_controldata.c:248
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Ubicación del último checkpoint:            %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Ubicación del último checkpoint:            %X/%08X\n"
 
 #: pg_controldata.c:250
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Ubicación de REDO de último checkpoint:     %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Ubicación de REDO de último checkpoint:     %X/%08X\n"
 
 #: pg_controldata.c:252
 #, c-format
@@ -360,13 +360,13 @@ msgstr "Instante de último checkpoint:              %s\n"
 
 #: pg_controldata.c:285
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Contador de LSN falsas para rels. unlogged: %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Contador de LSN falsas para rels. unlogged: %X/%08X\n"
 
 #: pg_controldata.c:287
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Punto final mínimo de recuperación:         %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Punto final mínimo de recuperación:         %X/%08X\n"
 
 #: pg_controldata.c:289
 #, c-format
@@ -375,13 +375,13 @@ msgstr "Timeline de dicho punto final mínimo:       %u\n"
 
 #: pg_controldata.c:291
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Ubicación del inicio de backup:             %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Ubicación del inicio de backup:             %X/%08X\n"
 
 #: pg_controldata.c:293
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Ubicación del fin de backup:                %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Ubicación del fin de backup:                %X/%08X\n"
 
 #: pg_controldata.c:295
 #, c-format
diff --git a/src/bin/pg_controldata/po/fr.po b/src/bin/pg_controldata/po/fr.po
index 1c94ff051b7..5f280b4af78 100644
--- a/src/bin/pg_controldata/po/fr.po
+++ b/src/bin/pg_controldata/po/fr.po
@@ -263,13 +263,13 @@ msgstr "Dernière modification de pg_control :                   %s\n"
 
 #: pg_controldata.c:237
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Dernier point de contrôle :                             %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Dernier point de contrôle :                             %X/%08X\n"
 
 #: pg_controldata.c:239
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Dernier REDO (reprise) du point de contrôle :           %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Dernier REDO (reprise) du point de contrôle :           %X/%08X\n"
 
 #: pg_controldata.c:241
 #, c-format
@@ -361,13 +361,13 @@ msgstr "Heure du dernier point de contrôle :                    %s\n"
 
 #: pg_controldata.c:274
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Faux compteur LSN pour les relations non journalisés :  %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Faux compteur LSN pour les relations non journalisés :  %X/%08X\n"
 
 #: pg_controldata.c:276
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Emplacement de fin de la récupération minimale :        %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Emplacement de fin de la récupération minimale :        %X/%08X\n"
 
 #: pg_controldata.c:278
 #, c-format
@@ -376,13 +376,13 @@ msgstr "Timeline de l'emplacement de fin de restauration :      %u\n"
 
 #: pg_controldata.c:280
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Début de la sauvegarde :                                %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Début de la sauvegarde :                                %X/%08X\n"
 
 #: pg_controldata.c:282
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Fin de la sauvegarde :                                  %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Fin de la sauvegarde :                                  %X/%08X\n"
 
 #: pg_controldata.c:284
 #, c-format
diff --git a/src/bin/pg_controldata/po/it.po b/src/bin/pg_controldata/po/it.po
index cc35f9609e9..15e6003aa99 100644
--- a/src/bin/pg_controldata/po/it.po
+++ b/src/bin/pg_controldata/po/it.po
@@ -280,13 +280,13 @@ msgstr "ultima modifica a pg_control:               %s\n"
 
 #: pg_controldata.c:238
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Ultima posizione del checkpoint:            %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Ultima posizione del checkpoint:            %X/%08X\n"
 
 #: pg_controldata.c:240
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Locazione di REDO dell'ultimo checkpoint:   %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Locazione di REDO dell'ultimo checkpoint:   %X/%08X\n"
 
 #: pg_controldata.c:242
 #, c-format
@@ -378,13 +378,13 @@ msgstr "Orario ultimo checkpoint:                   %s\n"
 
 #: pg_controldata.c:275
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Falso contatore LSN per rel. non loggate:   %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Falso contatore LSN per rel. non loggate:   %X/%08X\n"
 
 #: pg_controldata.c:277
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Posizione del minimum recovery ending:      %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Posizione del minimum recovery ending:      %X/%08X\n"
 
 #: pg_controldata.c:279
 #, c-format
@@ -393,13 +393,13 @@ msgstr "Timeline posiz. minimum recovery ending:    %u\n"
 
 #: pg_controldata.c:281
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Posizione dell'inizio del backup:           %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Posizione dell'inizio del backup:           %X/%08X\n"
 
 #: pg_controldata.c:283
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Posizione della fine del backup:            %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Posizione della fine del backup:            %X/%08X\n"
 
 #: pg_controldata.c:285
 #, c-format
diff --git a/src/bin/pg_controldata/po/ja.po b/src/bin/pg_controldata/po/ja.po
index 6b9c5d7128a..67b3249b60e 100644
--- a/src/bin/pg_controldata/po/ja.po
+++ b/src/bin/pg_controldata/po/ja.po
@@ -255,13 +255,13 @@ msgstr "pg_control最終更新:                          %s\n"
 
 #: pg_controldata.c:248
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "最終チェックポイント位置:                    %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "最終チェックポイント位置:                    %X/%08X\n"
 
 #: pg_controldata.c:250
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "最終チェックポイントのREDO位置:              %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "最終チェックポイントのREDO位置:              %X/%08X\n"
 
 #: pg_controldata.c:252
 #, c-format
@@ -353,13 +353,13 @@ msgstr "最終チェックポイント時刻:                    %s\n"
 
 #: pg_controldata.c:285
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "UNLOGGEDリレーションの偽のLSNカウンタ:       %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "UNLOGGEDリレーションの偽のLSNカウンタ:       %X/%08X\n"
 
 #: pg_controldata.c:287
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "最小リカバリ終了位置:                        %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "最小リカバリ終了位置:                        %X/%08X\n"
 
 #: pg_controldata.c:289
 #, c-format
@@ -368,13 +368,13 @@ msgstr "最小リカバリ終了位置のタイムライン:          %u\n"
 
 #: pg_controldata.c:291
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "バックアップ開始位置:                        %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "バックアップ開始位置:                        %X/%08X\n"
 
 #: pg_controldata.c:293
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "バックアップ終了位置:                        %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "バックアップ終了位置:                        %X/%08X\n"
 
 #: pg_controldata.c:295
 #, c-format
diff --git a/src/bin/pg_controldata/po/ka.po b/src/bin/pg_controldata/po/ka.po
index fe23c53667b..6bfc42e90d6 100644
--- a/src/bin/pg_controldata/po/ka.po
+++ b/src/bin/pg_controldata/po/ka.po
@@ -255,13 +255,13 @@ msgstr "pg_control-ის ბოლო ცვლილების დრო:
 
 #: pg_controldata.c:248
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "საკონტროლო წერტილის უკანასკნელი მდებარეობა:           %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "საკონტროლო წერტილის უკანასკნელი მდებარეობა:           %X/%08X\n"
 
 #: pg_controldata.c:250
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "საკონტროლო წერტილის REDO-ის უკანასკნელი მდებარეობა:    %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "საკონტროლო წერტილის REDO-ის უკანასკნელი მდებარეობა:    %X/%08X\n"
 
 #: pg_controldata.c:252
 #, c-format
@@ -353,13 +353,13 @@ msgstr "უახლესი საკონტოლო წერტილი
 
 #: pg_controldata.c:285
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "LSN-ის ყალბი მთვლელი არაჟურნალიზებადი ურთ-თვის:   %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "LSN-ის ყალბი მთვლელი არაჟურნალიზებადი ურთ-თვის:   %X/%08X\n"
 
 #: pg_controldata.c:287
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "მინიმალური აღდგენის დასასრულის მდებარეობა     %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "მინიმალური აღდგენის დასასრულის მდებარეობა     %X/%08X\n"
 
 #: pg_controldata.c:289
 #, c-format
@@ -368,13 +368,13 @@ msgstr "მინ. აღდგ დასასრ მდებარ დრო
 
 #: pg_controldata.c:291
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "მარქაფის დაწყების მდებარეობა:                %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "მარქაფის დაწყების მდებარეობა:                %X/%08X\n"
 
 #: pg_controldata.c:293
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "მარქაფს დასასრულის მდებარეობა:                  %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "მარქაფს დასასრულის მდებარეობა:                  %X/%08X\n"
 
 #: pg_controldata.c:295
 #, c-format
diff --git a/src/bin/pg_controldata/po/ko.po b/src/bin/pg_controldata/po/ko.po
index b753d7e93c1..598893fbc61 100644
--- a/src/bin/pg_controldata/po/ko.po
+++ b/src/bin/pg_controldata/po/ko.po
@@ -259,13 +259,13 @@ msgstr "pg_control 마지막 변경시간:           %s\n"
 
 #: pg_controldata.c:237
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "마지막 체크포인트 위치:               %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "마지막 체크포인트 위치:               %X/%08X\n"
 
 #: pg_controldata.c:239
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "마지막 체크포인트 REDO 위치:          %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "마지막 체크포인트 REDO 위치:          %X/%08X\n"
 
 #: pg_controldata.c:241
 #, c-format
@@ -357,13 +357,13 @@ msgstr "마지막 체크포인트 시간:               %s\n"
 
 #: pg_controldata.c:274
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "언로그 릴레이션의 가짜 LSN 카운터:    %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "언로그 릴레이션의 가짜 LSN 카운터:    %X/%08X\n"
 
 #: pg_controldata.c:276
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "최소 복구 마지막 위치:                %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "최소 복구 마지막 위치:                %X/%08X\n"
 
 #: pg_controldata.c:278
 #, c-format
@@ -372,13 +372,13 @@ msgstr "최소 복구 종료 위치의 타임라인:       %u\n"
 
 #: pg_controldata.c:280
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "백업 시작 위치:                       %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "백업 시작 위치:                       %X/%08X\n"
 
 #: pg_controldata.c:282
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "백업 종료 위치:                       %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "백업 종료 위치:                       %X/%08X\n"
 
 #: pg_controldata.c:284
 #, c-format
diff --git a/src/bin/pg_controldata/po/pl.po b/src/bin/pg_controldata/po/pl.po
index 7f528863032..ff1b301df36 100644
--- a/src/bin/pg_controldata/po/pl.po
+++ b/src/bin/pg_controldata/po/pl.po
@@ -201,18 +201,18 @@ msgstr "pg_control ostatnio modyfikowano:                %s\n"
 
 #: pg_controldata.c:211
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Najnowsza lokalizacja punktu kontrolnego:        %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Najnowsza lokalizacja punktu kontrolnego:        %X/%08X\n"
 
 #: pg_controldata.c:214
 #, c-format
-msgid "Prior checkpoint location:            %X/%X\n"
-msgstr "Uprzednia lokalizacja punktu kontrolnego:        %X/%X\n"
+msgid "Prior checkpoint location:            %X/%08X\n"
+msgstr "Uprzednia lokalizacja punktu kontrolnego:        %X/%08X\n"
 
 #: pg_controldata.c:217
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Najnowsza lokalizacja punktu kontrolnego REDO:   %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Najnowsza lokalizacja punktu kontrolnego REDO:   %X/%08X\n"
 
 #: pg_controldata.c:220
 #, c-format
@@ -304,13 +304,13 @@ msgstr "Czas najnowszego punktu kontrolnego:             %s\n"
 
 #: pg_controldata.c:253
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Fałszywy licznik LSN dla niezalogowanych rel:    %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Fałszywy licznik LSN dla niezalogowanych rel:    %X/%08X\n"
 
 #: pg_controldata.c:256
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Położenie zakończenia odzyskiwania minimalnego:  %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Położenie zakończenia odzyskiwania minimalnego:  %X/%08X\n"
 
 #: pg_controldata.c:259
 #, c-format
@@ -319,13 +319,13 @@ msgstr "Położenie odzyskiwania min. zak. linii czasu:    %u\n"
 
 #: pg_controldata.c:261
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Położenie początku kopii zapasowej:              %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Położenie początku kopii zapasowej:              %X/%08X\n"
 
 #: pg_controldata.c:264
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Położenie końca kopii zapasowej:                 %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Położenie końca kopii zapasowej:                 %X/%08X\n"
 
 #: pg_controldata.c:267
 #, c-format
diff --git a/src/bin/pg_controldata/po/pt_BR.po b/src/bin/pg_controldata/po/pt_BR.po
index 4a697d5e1df..425157eae33 100644
--- a/src/bin/pg_controldata/po/pt_BR.po
+++ b/src/bin/pg_controldata/po/pt_BR.po
@@ -260,13 +260,13 @@ msgstr "Última modificação do pg_control:                    %s\n"
 
 #: pg_controldata.c:238
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Local do último ponto de controle:                   %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Local do último ponto de controle:                   %X/%08X\n"
 
 #: pg_controldata.c:240
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Local de REDO do último ponto de controle:           %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Local de REDO do último ponto de controle:           %X/%08X\n"
 
 #: pg_controldata.c:242
 #, c-format
@@ -358,13 +358,13 @@ msgstr "Hora do último ponto de controle:                    %s\n"
 
 #: pg_controldata.c:275
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Contador LSN falso para relações unlogged:           %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Contador LSN falso para relações unlogged:           %X/%08X\n"
 
 #: pg_controldata.c:277
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Local final mínimo de recuperação:                   %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Local final mínimo de recuperação:                   %X/%08X\n"
 
 #: pg_controldata.c:279
 #, c-format
@@ -373,13 +373,13 @@ msgstr "Linha do tempo do local final mínimo de recuperação: %u\n"
 
 #: pg_controldata.c:281
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Local de início da cópia de segurança:               %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Local de início da cópia de segurança:               %X/%08X\n"
 
 #: pg_controldata.c:283
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Local de fim da cópia de segurança:                  %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Local de fim da cópia de segurança:                  %X/%08X\n"
 
 #: pg_controldata.c:285
 #, c-format
diff --git a/src/bin/pg_controldata/po/ru.po b/src/bin/pg_controldata/po/ru.po
index 5197e06cc71..46aaa7a4417 100644
--- a/src/bin/pg_controldata/po/ru.po
+++ b/src/bin/pg_controldata/po/ru.po
@@ -270,14 +270,14 @@ msgstr "Последнее обновление pg_control:      %s\n"
 # skip-rule: capital-letter-first
 #: pg_controldata.c:248
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Положение последней конт. точки:      %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Положение последней конт. точки:      %X/%08X\n"
 
 # skip-rule: capital-letter-first
 #: pg_controldata.c:250
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Положение REDO последней конт. точки: %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Положение REDO последней конт. точки: %X/%08X\n"
 
 # skip-rule: capital-letter-first
 #: pg_controldata.c:252
@@ -386,13 +386,13 @@ msgstr "Время последней контрольной точки:    %s\n
 # well-spelled: нежурналир
 #: pg_controldata.c:285
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Фиктивный LSN для нежурналир. таблиц: %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Фиктивный LSN для нежурналир. таблиц: %X/%08X\n"
 
 #: pg_controldata.c:287
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Мин. положение конца восстановления:  %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Мин. положение конца восстановления:  %X/%08X\n"
 
 # skip-rule: capital-letter-first
 #: pg_controldata.c:289
@@ -402,13 +402,13 @@ msgstr "Линия времени мин. положения к. в.:   %u\n"
 
 #: pg_controldata.c:291
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Положение начала копии:               %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Положение начала копии:               %X/%08X\n"
 
 #: pg_controldata.c:293
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Положение конца копии:                %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Положение конца копии:                %X/%08X\n"
 
 #: pg_controldata.c:295
 #, c-format
@@ -583,8 +583,8 @@ msgstr "Случ. число для псевдоаутентификации: %s
 #~ msgstr "Передача аргумента Float4:            %s\n"
 
 # skip-rule: capital-letter-first
-#~ msgid "Prior checkpoint location:            %X/%X\n"
-#~ msgstr "Положение предыдущей конт. точки:     %X/%X\n"
+#~ msgid "Prior checkpoint location:            %X/%08X\n"
+#~ msgstr "Положение предыдущей конт. точки:     %X/%08X\n"
 
 #~ msgid "floating-point numbers"
 #~ msgstr "числа с плавающей точкой"
diff --git a/src/bin/pg_controldata/po/sv.po b/src/bin/pg_controldata/po/sv.po
index 07b46343b13..12fa2bb1cf3 100644
--- a/src/bin/pg_controldata/po/sv.po
+++ b/src/bin/pg_controldata/po/sv.po
@@ -263,13 +263,13 @@ msgstr "pg_control ändrades senast:                 %s\n"
 
 #: pg_controldata.c:237
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Läge för senaste kontrollpunkt:             %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Läge för senaste kontrollpunkt:             %X/%08X\n"
 
 #: pg_controldata.c:239
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "REDO-läge för senaste kontrollpunkt:        %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "REDO-läge för senaste kontrollpunkt:        %X/%08X\n"
 
 #: pg_controldata.c:241
 #, c-format
@@ -361,13 +361,13 @@ msgstr "Tidpunkt för senaste kontrollpunkt:         %s\n"
 
 #: pg_controldata.c:274
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Beräknat LSN-tal av ologgade relationer:    %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Beräknat LSN-tal av ologgade relationer:    %X/%08X\n"
 
 #: pg_controldata.c:276
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Minsta slutposition vid återställning:      %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Minsta slutposition vid återställning:      %X/%08X\n"
 
 #: pg_controldata.c:278
 #, c-format
@@ -376,13 +376,13 @@ msgstr "Tidslinje för min slutpos vid återställning:%u\n"
 
 #: pg_controldata.c:280
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Startpunkt för backup:                      %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Startpunkt för backup:                      %X/%08X\n"
 
 #: pg_controldata.c:282
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Slutpunkt för backup:                       %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Slutpunkt för backup:                       %X/%08X\n"
 
 #: pg_controldata.c:284
 #, c-format
diff --git a/src/bin/pg_controldata/po/tr.po b/src/bin/pg_controldata/po/tr.po
index 528889f2803..f5a18d0b85b 100644
--- a/src/bin/pg_controldata/po/tr.po
+++ b/src/bin/pg_controldata/po/tr.po
@@ -260,13 +260,13 @@ msgstr "pg_control son düzenlenme tarihi:             %s\n"
 
 #: pg_controldata.c:244
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "En son checkpoint yeri:           %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "En son checkpoint yeri:           %X/%08X\n"
 
 #: pg_controldata.c:247
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "En son checkpoint'in REDO yeri:    %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "En son checkpoint'in REDO yeri:    %X/%08X\n"
 
 #: pg_controldata.c:250
 #, c-format
@@ -358,13 +358,13 @@ msgstr "En son checkpoint'in zamanı:            %s\n"
 
 #: pg_controldata.c:283
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Loglanmayan nesneler için sahte LSN sayacı:   %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Loglanmayan nesneler için sahte LSN sayacı:   %X/%08X\n"
 
 #: pg_controldata.c:286
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Minimum kurtarma sonlandırma yeri:     %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Minimum kurtarma sonlandırma yeri:     %X/%08X\n"
 
 #: pg_controldata.c:289
 #, c-format
@@ -374,13 +374,13 @@ msgstr ""
 
 #: pg_controldata.c:291
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Yedek başlama yeri:           %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Yedek başlama yeri:           %X/%08X\n"
 
 #: pg_controldata.c:294
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Yedek bitiş yeri:                  %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Yedek bitiş yeri:                  %X/%08X\n"
 
 #: pg_controldata.c:297
 #, c-format
@@ -541,8 +541,8 @@ msgstr "Sahte (mock) kimlik doğrulaması nonce'u:            %s\n"
 #~ msgid "LC_CTYPE:                             %s\n"
 #~ msgstr "LC_CTYPE:                             %s\n"
 
-#~ msgid "Prior checkpoint location:            %X/%X\n"
-#~ msgstr "Önceki checkpoint yeri:            %X/%X\n"
+#~ msgid "Prior checkpoint location:            %X/%08X\n"
+#~ msgstr "Önceki checkpoint yeri:            %X/%08X\n"
 
 #~ msgid "  -?, --help     show this help, then exit\n"
 #~ msgstr "  -?, --help     bu yardımı göster, sonra çık\n"
diff --git a/src/bin/pg_controldata/po/uk.po b/src/bin/pg_controldata/po/uk.po
index c2b2e3217f1..658b059aac0 100644
--- a/src/bin/pg_controldata/po/uk.po
+++ b/src/bin/pg_controldata/po/uk.po
@@ -242,12 +242,12 @@ msgstr "pg_control був модифікований востаннє:         %
 
 #: pg_controldata.c:237
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Останнє місце знаходження контрольної точки: %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Останнє місце знаходження контрольної точки: %X/%08X\n"
 
 #: pg_controldata.c:239
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
 msgstr "Розташування останньої контрольної точки: %X%X\n"
 
 #: pg_controldata.c:241
@@ -340,13 +340,13 @@ msgstr "Час останньої контрольної точки: %s\n"
 
 #: pg_controldata.c:274
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Фіктивний LSN для таблиць без журналювання: %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Фіктивний LSN для таблиць без журналювання: %X/%08X\n"
 
 #: pg_controldata.c:276
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Мінімальне розташування кінця відновлення: %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Мінімальне розташування кінця відновлення: %X/%08X\n"
 
 #: pg_controldata.c:278
 #, c-format
@@ -355,13 +355,13 @@ msgstr "Мінімальна позиція історії часу заверш
 
 #: pg_controldata.c:280
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Початкове розташування резервного копіювання: %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Початкове розташування резервного копіювання: %X/%08X\n"
 
 #: pg_controldata.c:282
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Кінцеве розташування резервного копіювання: %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Кінцеве розташування резервного копіювання: %X/%08X\n"
 
 #: pg_controldata.c:284
 #, c-format
diff --git a/src/bin/pg_controldata/po/vi.po b/src/bin/pg_controldata/po/vi.po
index 019b7b05d86..85585d5817f 100644
--- a/src/bin/pg_controldata/po/vi.po
+++ b/src/bin/pg_controldata/po/vi.po
@@ -224,13 +224,13 @@ msgstr "pg_control sửa đổi lần cuối:                     %s\n"
 
 #: pg_controldata.c:238
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "Vị trí checkpoint mới nhất:                      %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "Vị trí checkpoint mới nhất:                      %X/%08X\n"
 
 #: pg_controldata.c:241
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "Vị trí REDO của checkpoint gần nhất:             %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "Vị trí REDO của checkpoint gần nhất:             %X/%08X\n"
 
 #: pg_controldata.c:244
 #, c-format
@@ -322,13 +322,13 @@ msgstr "Thời gian của lần checkpoint gần nhấ:            %s\n"
 
 #: pg_controldata.c:277
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "Bộ đếm LSN giả cho các unlogged relations:       %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "Bộ đếm LSN giả cho các unlogged relations:       %X/%08X\n"
 
 #: pg_controldata.c:280
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "Tối thiểu hóa vị trí kết thúc cho phụ hồi:       %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "Tối thiểu hóa vị trí kết thúc cho phụ hồi:       %X/%08X\n"
 
 #: pg_controldata.c:283
 #, c-format
@@ -337,13 +337,13 @@ msgstr "Timeline của vị trí kết thúc phục hồi tối thiểu: %u\n"
 
 #: pg_controldata.c:285
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "Vị trí bắt đầu Backup:                           %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "Vị trí bắt đầu Backup:                           %X/%08X\n"
 
 #: pg_controldata.c:288
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "Vị trí kết thúc Backup:                          %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "Vị trí kết thúc Backup:                          %X/%08X\n"
 
 #: pg_controldata.c:291
 #, c-format
diff --git a/src/bin/pg_controldata/po/zh_CN.po b/src/bin/pg_controldata/po/zh_CN.po
index d6d2140b77b..3e50643c1b4 100644
--- a/src/bin/pg_controldata/po/zh_CN.po
+++ b/src/bin/pg_controldata/po/zh_CN.po
@@ -252,13 +252,13 @@ msgstr "pg_control 最后修改:                  %s\n"
 
 #: pg_controldata.c:238
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "最新检查点位置:                       %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "最新检查点位置:                       %X/%08X\n"
 
 #: pg_controldata.c:240
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "最新检查点的 REDO 位置:               %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "最新检查点的 REDO 位置:               %X/%08X\n"
 
 #: pg_controldata.c:242
 #, c-format
@@ -350,13 +350,13 @@ msgstr "最新检查点的时间:                     %s\n"
 
 #: pg_controldata.c:275
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "不带日志的关系: %X/%X使用虚假的LSN计数器\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "不带日志的关系: %X/%08X使用虚假的LSN计数器\n"
 
 #: pg_controldata.c:277
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "最小恢复结束位置: %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "最小恢复结束位置: %X/%08X\n"
 
 #: pg_controldata.c:279
 #, c-format
@@ -365,13 +365,13 @@ msgstr "最小恢复结束位置时间表: %u\n"
 
 #: pg_controldata.c:281
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "开始进行备份的点位置:                       %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "开始进行备份的点位置:                       %X/%08X\n"
 
 #: pg_controldata.c:283
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "备份的最终位置:                  %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "备份的最终位置:                  %X/%08X\n"
 
 #: pg_controldata.c:285
 #, c-format
diff --git a/src/bin/pg_controldata/po/zh_TW.po b/src/bin/pg_controldata/po/zh_TW.po
index b9ffb5669ac..fb6dcfd3b80 100644
--- a/src/bin/pg_controldata/po/zh_TW.po
+++ b/src/bin/pg_controldata/po/zh_TW.po
@@ -281,13 +281,13 @@ msgstr "pg_control 最後修改時間:         %s\n"
 
 #: pg_controldata.c:238
 #, c-format
-msgid "Latest checkpoint location:           %X/%X\n"
-msgstr "最新檢查點位置:                  %X/%X\n"
+msgid "Latest checkpoint location:           %X/%08X\n"
+msgstr "最新檢查點位置:                  %X/%08X\n"
 
 #: pg_controldata.c:240
 #, c-format
-msgid "Latest checkpoint's REDO location:    %X/%X\n"
-msgstr "最新檢查點 REDO 位置:            %X/%X\n"
+msgid "Latest checkpoint's REDO location:    %X/%08X\n"
+msgstr "最新檢查點 REDO 位置:            %X/%08X\n"
 
 #: pg_controldata.c:242
 #, c-format
@@ -381,13 +381,13 @@ msgstr "最新檢查點的時間:                %s\n"
 
 #: pg_controldata.c:275
 #, c-format
-msgid "Fake LSN counter for unlogged rels:   %X/%X\n"
-msgstr "無日誌關聯的虛擬 LSN 計數:       %X/%X\n"
+msgid "Fake LSN counter for unlogged rels:   %X/%08X\n"
+msgstr "無日誌關聯的虛擬 LSN 計數:       %X/%08X\n"
 
 #: pg_controldata.c:277
 #, c-format
-msgid "Minimum recovery ending location:     %X/%X\n"
-msgstr "最小還原結束位置:                %X/%X\n"
+msgid "Minimum recovery ending location:     %X/%08X\n"
+msgstr "最小還原結束位置:                %X/%08X\n"
 
 #: pg_controldata.c:279
 #, c-format
@@ -396,13 +396,13 @@ msgstr "最小還原結束位置的時間軸:        %u\n"
 
 #: pg_controldata.c:281
 #, c-format
-msgid "Backup start location:                %X/%X\n"
-msgstr "備份開始位置:                    %X/%X\n"
+msgid "Backup start location:                %X/%08X\n"
+msgstr "備份開始位置:                    %X/%08X\n"
 
 #: pg_controldata.c:283
 #, c-format
-msgid "Backup end location:                  %X/%X\n"
-msgstr "備份結束位置:                    %X/%X\n"
+msgid "Backup end location:                  %X/%08X\n"
+msgstr "備份結束位置:                    %X/%08X\n"
 
 #: pg_controldata.c:285
 #, c-format
diff --git a/src/bin/pg_rewind/libpq_source.c b/src/bin/pg_rewind/libpq_source.c
index 56c2ad55d4a..e80edb7077e 100644
--- a/src/bin/pg_rewind/libpq_source.c
+++ b/src/bin/pg_rewind/libpq_source.c
@@ -215,7 +215,7 @@ libpq_get_current_wal_insert_lsn(rewind_source *source)
 
 	val = run_simple_query(conn, "SELECT pg_current_wal_insert_lsn()");
 
-	if (sscanf(val, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(val, "%X/%08X", &hi, &lo) != 2)
 		pg_fatal("unrecognized result \"%s\" for current WAL insert location", val);
 
 	result = ((uint64) hi) << 32 | lo;
diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c
index 2cd44625ca3..6de5e32fd9e 100644
--- a/src/bin/pg_rewind/parsexlog.c
+++ b/src/bin/pg_rewind/parsexlog.c
@@ -89,11 +89,11 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
 			XLogRecPtr	errptr = xlogreader->EndRecPtr;
 
 			if (errormsg)
-				pg_fatal("could not read WAL record at %X/%X: %s",
+				pg_fatal("could not read WAL record at %X/%08X: %s",
 						 LSN_FORMAT_ARGS(errptr),
 						 errormsg);
 			else
-				pg_fatal("could not read WAL record at %X/%X",
+				pg_fatal("could not read WAL record at %X/%08X",
 						 LSN_FORMAT_ARGS(errptr));
 		}
 
@@ -105,7 +105,7 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
 	 * messed up.
 	 */
 	if (xlogreader->EndRecPtr != endpoint)
-		pg_fatal("end pointer %X/%X is not a valid end point; expected %X/%X",
+		pg_fatal("end pointer %X/%08X is not a valid end point; expected %X/%08X",
 				 LSN_FORMAT_ARGS(endpoint), LSN_FORMAT_ARGS(xlogreader->EndRecPtr));
 
 	XLogReaderFree(xlogreader);
@@ -143,10 +143,10 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex,
 	if (record == NULL)
 	{
 		if (errormsg)
-			pg_fatal("could not read WAL record at %X/%X: %s",
+			pg_fatal("could not read WAL record at %X/%08X: %s",
 					 LSN_FORMAT_ARGS(ptr), errormsg);
 		else
-			pg_fatal("could not read WAL record at %X/%X",
+			pg_fatal("could not read WAL record at %X/%08X",
 					 LSN_FORMAT_ARGS(ptr));
 	}
 	endptr = xlogreader->EndRecPtr;
@@ -211,11 +211,11 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex,
 		if (record == NULL)
 		{
 			if (errormsg)
-				pg_fatal("could not find previous WAL record at %X/%X: %s",
+				pg_fatal("could not find previous WAL record at %X/%08X: %s",
 						 LSN_FORMAT_ARGS(searchptr),
 						 errormsg);
 			else
-				pg_fatal("could not find previous WAL record at %X/%X",
+				pg_fatal("could not find previous WAL record at %X/%08X",
 						 LSN_FORMAT_ARGS(searchptr));
 		}
 
@@ -459,7 +459,7 @@ extractPageInfo(XLogReaderState *record)
 		 * track that change.
 		 */
 		pg_fatal("WAL record modifies a relation, but record type is not recognized: "
-				 "lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X",
+				 "lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X",
 				 LSN_FORMAT_ARGS(record->ReadRecPtr),
 				 rmid, RmgrName(rmid), info);
 	}
diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c
index 9d16c1e6b47..0c68dd4235e 100644
--- a/src/bin/pg_rewind/pg_rewind.c
+++ b/src/bin/pg_rewind/pg_rewind.c
@@ -393,7 +393,7 @@ main(int argc, char **argv)
 								   targetHistory, targetNentries,
 								   &divergerec, &lastcommontliIndex);
 
-		pg_log_info("servers diverged at WAL location %X/%X on timeline %u",
+		pg_log_info("servers diverged at WAL location %X/%08X on timeline %u",
 					LSN_FORMAT_ARGS(divergerec),
 					targetHistory[lastcommontliIndex].tli);
 
@@ -461,7 +461,7 @@ main(int argc, char **argv)
 
 	findLastCheckpoint(datadir_target, divergerec, lastcommontliIndex,
 					   &chkptrec, &chkpttli, &chkptredo, restore_command);
-	pg_log_info("rewinding from last common checkpoint at %X/%X on timeline %u",
+	pg_log_info("rewinding from last common checkpoint at %X/%08X on timeline %u",
 				LSN_FORMAT_ARGS(chkptrec), chkpttli);
 
 	/* Initialize the hash table to track the status of each file */
@@ -902,7 +902,7 @@ getTimelineHistory(TimeLineID tli, bool is_source, int *nentries)
 			TimeLineHistoryEntry *entry;
 
 			entry = &history[i];
-			pg_log_debug("%u: %X/%X - %X/%X", entry->tli,
+			pg_log_debug("%u: %X/%08X - %X/%08X", entry->tli,
 						 LSN_FORMAT_ARGS(entry->begin),
 						 LSN_FORMAT_ARGS(entry->end));
 		}
@@ -981,8 +981,8 @@ createBackupLabel(XLogRecPtr startpoint, TimeLineID starttli, XLogRecPtr checkpo
 	strftime(strfbuf, sizeof(strfbuf), "%Y-%m-%d %H:%M:%S %Z", tmp);
 
 	len = snprintf(buf, sizeof(buf),
-				   "START WAL LOCATION: %X/%X (file %s)\n"
-				   "CHECKPOINT LOCATION: %X/%X\n"
+				   "START WAL LOCATION: %X/%08X (file %s)\n"
+				   "CHECKPOINT LOCATION: %X/%08X\n"
 				   "BACKUP METHOD: pg_rewind\n"
 				   "BACKUP FROM: standby\n"
 				   "START TIME: %s\n",
diff --git a/src/bin/pg_rewind/po/cs.po b/src/bin/pg_rewind/po/cs.po
index 1f4a8ebce19..6658a89fc19 100644
--- a/src/bin/pg_rewind/po/cs.po
+++ b/src/bin/pg_rewind/po/cs.po
@@ -420,23 +420,23 @@ msgstr "neočekávaný výsledek při posílání seznamu souborů: %s"
 
 #: parsexlog.c:85 parsexlog.c:132
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "nelze načíst WAL záznam na %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "nelze načíst WAL záznam na %X/%08X: %s"
 
 #: parsexlog.c:89 parsexlog.c:135
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "nelze načíst WAL záznam na %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "nelze načíst WAL záznam na %X/%08X"
 
 #: parsexlog.c:198
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "nelze nalézt předchozí WAL záznam na %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "nelze nalézt předchozí WAL záznam na %X/%08X: %s"
 
 #: parsexlog.c:202
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "nelze načíst předchozí WAL záznam na %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "nelze načíst předchozí WAL záznam na %X/%08X"
 
 #: parsexlog.c:327
 #, c-format
@@ -445,8 +445,8 @@ msgstr "nelze nastavit pozici (seek) v souboru \"%s\": %m"
 
 #: parsexlog.c:407
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X"
-msgstr "WAL záznam modifikuje relaci, ale typ záznamu není rozpoznán: lsn: %X/%X, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmgr: %s, info: %02X"
+msgstr "WAL záznam modifikuje relaci, ale typ záznamu není rozpoznán: lsn: %X/%08X, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:78
 #, c-format
@@ -613,8 +613,8 @@ msgstr "zdrojový a cílový cluster jsou na stejné timeline"
 
 #: pg_rewind.c:322
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "servery se rozešly na WAL pozici %X/%X na timeline %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "servery se rozešly na WAL pozici %X/%08X na timeline %u"
 
 #: pg_rewind.c:360
 #, c-format
@@ -623,8 +623,8 @@ msgstr "rewind není potřeba"
 
 #: pg_rewind.c:369
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "provádím rewind z posledního společného checkpointu na %X/%X na timeline %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "provádím rewind z posledního společného checkpointu na %X/%08X na timeline %u"
 
 #: pg_rewind.c:378
 #, c-format
@@ -803,48 +803,48 @@ msgstr "Timeline IDs musí být nižší než timeline ID potomka."
 
 #: xlogreader.c:349
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "neplatný offset záznamu na %X/%X"
+msgid "invalid record offset at %X/%08X"
+msgstr "neplatný offset záznamu na %X/%08X"
 
 #: xlogreader.c:357
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord je vyžadován %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord je vyžadován %X/%08X"
 
 #: xlogreader.c:398 xlogreader.c:695
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "neplatná délka záznamu na %X/%X: potřeba %u, získáno %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "neplatná délka záznamu na %X/%08X: potřeba %u, získáno %u"
 
 #: xlogreader.c:422
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "délka záznamu %u na %X/%X je příliš vysoká"
+msgid "record length %u at %X/%08X too long"
+msgstr "délka záznamu %u na %X/%08X je příliš vysoká"
 
 #: xlogreader.c:454
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "na %X/%X není nastaven  contrecord flag"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "na %X/%08X není nastaven  contrecord flag"
 
 #: xlogreader.c:467
 #, c-format
-msgid "invalid contrecord length %u at %X/%X"
-msgstr "chybná contrecord délka %u na %X/%X"
+msgid "invalid contrecord length %u at %X/%08X"
+msgstr "chybná contrecord délka %u na %X/%08X"
 
 #: xlogreader.c:703
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "chybný ID resource managera %u na %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "chybný ID resource managera %u na %X/%08X"
 
 #: xlogreader.c:717 xlogreader.c:734
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "záznam s neplatnou hodnotou prev-link %X/%X na %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "záznam s neplatnou hodnotou prev-link %X/%08X na %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "neplatný data checksum resource managera v záznamu na %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "neplatný data checksum resource managera v záznamu na %X/%08X"
 
 #: xlogreader.c:808
 #, c-format
@@ -873,8 +873,8 @@ msgstr "WAL soubor je z jiného databázového systému: neplatná hodnota XLOG_
 
 #: xlogreader.c:882
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "neočekávaná pageaddr hodnota %X/%X v log segmentu %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "neočekávaná pageaddr hodnota %X/%08X v log segmentu %s, offset %u"
 
 #: xlogreader.c:907
 #, c-format
@@ -883,58 +883,58 @@ msgstr "timeline ID %u mimo pořadí (po %u) v log segmentu %s, offset %u"
 
 #: xlogreader.c:1247
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u mimo pořadí na %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u mimo pořadí na %X/%08X"
 
 #: xlogreader.c:1270
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA flag nastaven, ale žádná data nejsou přiložena na %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA flag nastaven, ale žádná data nejsou přiložena na %X/%08X"
 
 #: xlogreader.c:1277
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA flag nenastaven, ale délka dat je %u na %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA flag nenastaven, ale délka dat je %u na %X/%08X"
 
 #: xlogreader.c:1313
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE flag nastaven, ale hole offset %u length %u block image length %u na %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE flag nastaven, ale hole offset %u length %u block image length %u na %X/%08X"
 
 #: xlogreader.c:1329
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE flag nenastaven, ale hole offset %u length %u na %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE flag nenastaven, ale hole offset %u length %u na %X/%08X"
 
 #: xlogreader.c:1344
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED flag nastaven, ale block image length %u na %X/%X"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED flag nastaven, ale block image length %u na %X/%08X"
 
 #: xlogreader.c:1359
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE ani BKPIMAGE_IS_COMPRESSED flag nenastaven, ale block image length je %u na %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE ani BKPIMAGE_IS_COMPRESSED flag nenastaven, ale block image length je %u na %X/%08X"
 
 #: xlogreader.c:1375
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL flag nastaven, ale žádná předchozí rel hodnota na %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL flag nastaven, ale žádná předchozí rel hodnota na %X/%08X"
 
 #: xlogreader.c:1387
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "neplatné block_id %u na %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "neplatné block_id %u na %X/%08X"
 
 #: xlogreader.c:1476
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "záznam s neplatnou délkou na %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "záznam s neplatnou délkou na %X/%08X"
 
 #: xlogreader.c:1565
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "neplatný komprimovaný image na %X/%X, block %d"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "neplatný komprimovaný image na %X/%08X, block %d"
 
 #~ msgid "could not open directory \"%s\": %s\n"
 #~ msgstr "nelze otevřít adresář \"%s\": %s\n"
@@ -987,8 +987,8 @@ msgstr "neplatný komprimovaný image na %X/%X, block %d"
 #~ msgid "Target timeline history:\n"
 #~ msgstr "Cílová timeline history:\n"
 
-#~ msgid "%d: %X/%X - %X/%X\n"
-#~ msgstr "%d: %X/%X - %X/%X\n"
+#~ msgid "%d: %X/%08X - %X/%08X\n"
+#~ msgstr "%d: %X/%08X - %X/%08X\n"
 
 #~ msgid ""
 #~ "The program \"initdb\" is needed by %s but was\n"
diff --git a/src/bin/pg_rewind/po/de.po b/src/bin/pg_rewind/po/de.po
index 6c1093dafe5..95d65feb6f0 100644
--- a/src/bin/pg_rewind/po/de.po
+++ b/src/bin/pg_rewind/po/de.po
@@ -502,28 +502,28 @@ msgstr "Speicher aufgebraucht beim Anlegen eines WAL-Leseprozessors"
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "konnte WAL-Eintrag bei %X/%X nicht lesen: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "konnte WAL-Eintrag bei %X/%08X nicht lesen: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "konnte WAL-Eintrag bei %X/%X nicht lesen"
+msgid "could not read WAL record at %X/%08X"
+msgstr "konnte WAL-Eintrag bei %X/%08X nicht lesen"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "Endpunkt %X/%X ist kein gültiger Endpunkt; %X/%X erwartet"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "Endpunkt %X/%08X ist kein gültiger Endpunkt; %X/%08X erwartet"
 
 #: parsexlog.c:214
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%X nicht finden: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%08X nicht finden: %s"
 
 #: parsexlog.c:218
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%X nicht finden"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "konnte vorangegangenen WAL-Eintrag bei %X/%08X nicht finden"
 
 #: parsexlog.c:362
 #, c-format
@@ -532,8 +532,8 @@ msgstr "konnte Positionszeiger in Datei »%s« nicht setzen: %m"
 
 #: parsexlog.c:461
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "WAL-Eintrag modifiziert eine Relation, aber Typ des Eintrags wurde nicht erkannt: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "WAL-Eintrag modifiziert eine Relation, aber Typ des Eintrags wurde nicht erkannt: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -722,8 +722,8 @@ msgstr "Quell- und Ziel-Cluster sind auf der gleichen Zeitleiste"
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "Server divergierten bei WAL-Position %X/%X auf Zeitleiste %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "Server divergierten bei WAL-Position %X/%08X auf Zeitleiste %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -732,8 +732,8 @@ msgstr "kein Rückspulen nötig"
 
 #: pg_rewind.c:464
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "Rückspulen ab letztem gemeinsamen Checkpoint bei %X/%X auf Zeitleiste %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "Rückspulen ab letztem gemeinsamen Checkpoint bei %X/%08X auf Zeitleiste %u"
 
 #: pg_rewind.c:474
 #, c-format
@@ -919,53 +919,53 @@ msgstr "Zeitleisten-IDs müssen kleiner als die Zeitleisten-ID des Kindes sein."
 
 #: xlogreader.c:620
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ungültiger Datensatz-Offset bei %X/%X: mindestens %u erwartet, %u erhalten"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ungültiger Datensatz-Offset bei %X/%08X: mindestens %u erwartet, %u erhalten"
 
 #: xlogreader.c:629
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "Contrecord angefordert von %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "Contrecord angefordert von %X/%08X"
 
 #: xlogreader.c:670 xlogreader.c:1135
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ungültige Datensatzlänge bei %X/%X: mindestens %u erwartet, %u erhalten"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ungültige Datensatzlänge bei %X/%08X: mindestens %u erwartet, %u erhalten"
 
 #: xlogreader.c:759
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "keine Contrecord-Flag bei %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "keine Contrecord-Flag bei %X/%08X"
 
 #: xlogreader.c:772
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%08X"
 
 #: xlogreader.c:1143
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ungültige Resource-Manager-ID %u bei %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ungültige Resource-Manager-ID %u bei %X/%08X"
 
 #: xlogreader.c:1156 xlogreader.c:1172
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "Datensatz mit falschem Prev-Link %X/%08X bei %X/%08X"
 
 #: xlogreader.c:1210
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%08X"
 
 #: xlogreader.c:1244
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ungültige magische Zahl %04X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ungültige magische Zahl %04X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1259 xlogreader.c:1301
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ungültige Info-Bits %04X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ungültige Info-Bits %04X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1275
 #, c-format
@@ -984,63 +984,63 @@ msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im
 
 #: xlogreader.c:1321
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "unerwartete Pageaddr %X/%X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "unerwartete Pageaddr %X/%08X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1347
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u außer der Reihe bei %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u außer der Reihe bei %X/%08X"
 
 #: xlogreader.c:1783
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%08X"
 
 #: xlogreader.c:1790
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%08X"
 
 #: xlogreader.c:1826
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%08X"
 
 #: xlogreader.c:1842
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%08X"
 
 #: xlogreader.c:1856
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%08X"
 
 #: xlogreader.c:1871
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%08X"
 
 #: xlogreader.c:1887
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%08X"
 
 #: xlogreader.c:1899
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "ungültige block_id %u bei %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "ungültige block_id %u bei %X/%08X"
 
 #: xlogreader.c:1966
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "Datensatz mit ungültiger Länge bei %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "Datensatz mit ungültiger Länge bei %X/%08X"
 
 #: xlogreader.c:1992
 #, c-format
@@ -1049,25 +1049,25 @@ msgstr "konnte Backup-Block mit ID %d nicht im WAL-Eintrag finden"
 
 #: xlogreader.c:2076
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "konnte Abbild bei %X/%X mit ungültigem angegebenen Block %d nicht wiederherstellen"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "konnte Abbild bei %X/%08X mit ungültigem angegebenen Block %d nicht wiederherstellen"
 
 #: xlogreader.c:2083
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "konnte Abbild mit ungültigem Zustand bei %X/%X nicht wiederherstellen, Block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "konnte Abbild mit ungültigem Zustand bei %X/%08X nicht wiederherstellen, Block %d"
 
 #: xlogreader.c:2110 xlogreader.c:2127
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "konnte Abbild bei %X/%X nicht wiederherstellen, komprimiert mit %s, nicht unterstützt von dieser Installation, Block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht wiederherstellen, komprimiert mit %s, nicht unterstützt von dieser Installation, Block %d"
 
 #: xlogreader.c:2136
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "konnte Abbild bei %X/%X nicht wiederherstellen, komprimiert mit unbekannter Methode, Block %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht wiederherstellen, komprimiert mit unbekannter Methode, Block %d"
 
 #: xlogreader.c:2144
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "konnte Abbild bei %X/%X nicht dekomprimieren, Block %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht dekomprimieren, Block %d"
diff --git a/src/bin/pg_rewind/po/el.po b/src/bin/pg_rewind/po/el.po
index bea1edafacd..32972c550b8 100644
--- a/src/bin/pg_rewind/po/el.po
+++ b/src/bin/pg_rewind/po/el.po
@@ -430,28 +430,28 @@ msgstr "η μνήμη δεν επαρκεί για την εκχώρηση επ
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "δεν ήταν δυνατή η ανάγνωση WAL εγγραφής στο %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "δεν ήταν δυνατή η ανάγνωση WAL εγγραφής στο %X/%08X: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "δεν ήταν δυνατή η ανάγνωση WAL εγγραφής στο %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "δεν ήταν δυνατή η ανάγνωση WAL εγγραφής στο %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "ο δείκτης τέλους %X/%X δεν είναι έγκυρο σημείο τέλους- αναμενόταν %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "ο δείκτης τέλους %X/%08X δεν είναι έγκυρο σημείο τέλους- αναμενόταν %X/%08X"
 
 #: parsexlog.c:212
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "δεν ήταν δυνατή η εύρεση προηγούμενης WAL εγγραφής σε %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "δεν ήταν δυνατή η εύρεση προηγούμενης WAL εγγραφής σε %X/%08X: %s"
 
 #: parsexlog.c:216
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "δεν ήταν δυνατή η εύρεση προηγούμενης WAL εγγραφής σε %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "δεν ήταν δυνατή η εύρεση προηγούμενης WAL εγγραφής σε %X/%08X"
 
 #: parsexlog.c:341
 #, c-format
@@ -460,8 +460,8 @@ msgstr "δεν ήταν δυνατή η αναζήτηση στο αρχείο 
 
 #: parsexlog.c:440
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "Η εγγραφή WAL τροποποιεί μια σχέση, αλλά ο τύπος εγγραφής δεν αναγνωρίζεται: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "Η εγγραφή WAL τροποποιεί μια σχέση, αλλά ο τύπος εγγραφής δεν αναγνωρίζεται: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:92
 #, c-format
@@ -644,8 +644,8 @@ msgstr "συστάδες προορισμού και προέλευσης βρί
 
 #: pg_rewind.c:387
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "οι διακομιστές αποκλίνουν στην τοποθεσία WAL %X/%X στη χρονογραμμή %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "οι διακομιστές αποκλίνουν στην τοποθεσία WAL %X/%08X στη χρονογραμμή %u"
 
 #: pg_rewind.c:442
 #, c-format
@@ -654,8 +654,8 @@ msgstr "δεν απαιτείται επαναφορά"
 
 #: pg_rewind.c:451
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "επαναφορά από το τελευταίο κοινό σημείο ελέγχου στο %X/%X στη χρονογραμμή %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "επαναφορά από το τελευταίο κοινό σημείο ελέγχου στο %X/%08X στη χρονογραμμή %u"
 
 #: pg_rewind.c:461
 #, c-format
@@ -831,18 +831,18 @@ msgstr "Τα ID χρονογραμμής πρέπει να είναι λιγότ
 
 #: xlogreader.c:626
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "μη έγκυρη μετατόπιση εγγραφής σε %X/%X: περίμενε τουλάχιστον %u, έλαβε %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "μη έγκυρη μετατόπιση εγγραφής σε %X/%08X: περίμενε τουλάχιστον %u, έλαβε %u"
 
 #: xlogreader.c:635
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord ζητείται από %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord ζητείται από %X/%08X"
 
 #: xlogreader.c:676 xlogreader.c:1119
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "μη έγκυρο μήκος εγγραφής σε %X/%X: περίμενε τουλάχιστον %u, έλαβε %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "μη έγκυρο μήκος εγγραφής σε %X/%08X: περίμενε τουλάχιστον %u, έλαβε %u"
 
 #: xlogreader.c:705
 #, c-format
@@ -851,43 +851,43 @@ msgstr "έλλειψη μνήμης κατά την προσπάθεια απο
 
 #: xlogreader.c:727
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "μήκος εγγραφής %u σε %X/%X πολύ μακρύ"
+msgid "record length %u at %X/%08X too long"
+msgstr "μήκος εγγραφής %u σε %X/%08X πολύ μακρύ"
 
 #: xlogreader.c:776
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "δεν υπάρχει σημαία contrecord στο %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "δεν υπάρχει σημαία contrecord στο %X/%08X"
 
 #: xlogreader.c:789
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "μη έγκυρο μήκος contrecord %u (αναμένεται %lld) σε %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "μη έγκυρο μήκος contrecord %u (αναμένεται %lld) σε %X/%08X"
 
 #: xlogreader.c:1127
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "μη έγκυρο ID %u διαχειριστή πόρων στο %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "μη έγκυρο ID %u διαχειριστή πόρων στο %X/%08X"
 
 #: xlogreader.c:1140 xlogreader.c:1156
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "εγγραφή με εσφαλμένο prev-link %X/%X σε %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "εγγραφή με εσφαλμένο prev-link %X/%08X σε %X/%08X"
 
 #: xlogreader.c:1192
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "εσφαλμένο άθροισμα ελέγχου δεδομένων διαχειριστή πόρων σε εγγραφή στο %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "εσφαλμένο άθροισμα ελέγχου δεδομένων διαχειριστή πόρων σε εγγραφή στο %X/%08X"
 
 #: xlogreader.c:1226
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "μη έγκυρος μαγικός αριθμός %04X στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "μη έγκυρος μαγικός αριθμός %04X στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1241 xlogreader.c:1283
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "μη έγκυρα info bits %04X στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "μη έγκυρα info bits %04X στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1257
 #, c-format
@@ -906,63 +906,63 @@ msgstr "WAL αρχείο προέρχεται από διαφορετικό σύ
 
 #: xlogreader.c:1303
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "μη αναμενόμενο pageaddr %X/%X στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "μη αναμενόμενο pageaddr %X/%08X στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1329
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "εκτός ακολουθίας ID χρονογραμμής %u (μετά %u) στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "εκτός ακολουθίας ID χρονογραμμής %u (μετά %u) στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "εκτός ακολουθίας block_id %u στο %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "εκτός ακολουθίας block_id %u στο %X/%08X"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA έχει οριστεί, αλλά δεν περιλαμβάνονται δεδομένα σε %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA έχει οριστεί, αλλά δεν περιλαμβάνονται δεδομένα σε %X/%08X"
 
 #: xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA δεν έχει οριστεί, αλλά το μήκος των δεδομένων είναι %u σε %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA δεν έχει οριστεί, αλλά το μήκος των δεδομένων είναι %u σε %X/%08X"
 
 #: xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u μήκος μπλοκ εικόνας %u σε %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u μήκος μπλοκ εικόνας %u σε %X/%08X"
 
 #: xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE δεν έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u σε %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE δεν έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u σε %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED έχει οριστεί, αλλά μέγεθος μπλοκ εικόνας %u σε %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED έχει οριστεί, αλλά μέγεθος μπλοκ εικόνας %u σε %X/%08X"
 
 #: xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ούτε BKPIMAGE_HAS_HOLE ούτε BKPIMAGE_IS_COMPRESSED είναι ορισμένα, αλλά το μήκος της εικόνας μπλοκ είναι %u στο %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ούτε BKPIMAGE_HAS_HOLE ούτε BKPIMAGE_IS_COMPRESSED είναι ορισμένα, αλλά το μήκος της εικόνας μπλοκ είναι %u στο %X/%08X"
 
 #: xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL είναι ορισμένο, αλλά καμία προηγούμενη rel στο %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL είναι ορισμένο, αλλά καμία προηγούμενη rel στο %X/%08X"
 
 #: xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "μη έγκυρο block_id %u στο %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "μη έγκυρο block_id %u στο %X/%08X"
 
 #: xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "εγγραφή με μη έγκυρο μήκος στο %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "εγγραφή με μη έγκυρο μήκος στο %X/%08X"
 
 #: xlogreader.c:1968
 #, c-format
@@ -971,28 +971,28 @@ msgstr "δεν ήταν δυνατή η εύρεση μπλοκ αντιγράφ
 
 #: xlogreader.c:2052
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%X με ορισμένο άκυρο μπλοκ %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%08X με ορισμένο άκυρο μπλοκ %d"
 
 #: xlogreader.c:2059
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%X με άκυρη κατάσταση, μπλοκ %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%08X με άκυρη κατάσταση, μπλοκ %d"
 
 #: xlogreader.c:2086 xlogreader.c:2103
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%X συμπιεσμένη με %s που δεν υποστηρίζεται από την υλοποίηση, μπλοκ %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%08X συμπιεσμένη με %s που δεν υποστηρίζεται από την υλοποίηση, μπλοκ %d"
 
 #: xlogreader.c:2112
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%X συμπιεσμένη με άγνωστη μέθοδο, μπλοκ %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%08X συμπιεσμένη με άγνωστη μέθοδο, μπλοκ %d"
 
 #: xlogreader.c:2120
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "δεν ήταν δυνατή η αποσυμπιέση εικόνας στο %X/%X, μπλοκ %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "δεν ήταν δυνατή η αποσυμπιέση εικόνας στο %X/%08X, μπλοκ %d"
 
 #~ msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform"
 #~ msgstr "«%s» είναι ένας συμβολικός σύνδεσμος, αλλά οι συμβολικοί σύνδεσμοι δεν υποστηρίζονται σε αυτήν την πλατφόρμα"
@@ -1015,8 +1015,8 @@ msgstr "δεν ήταν δυνατή η αποσυμπιέση εικόνας σ
 #~ msgid "invalid control file"
 #~ msgstr "μη έγκυρο αρχείο ελέγχου"
 
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "μη έγκυρη μετατόπιση εγγραφών σε %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "μη έγκυρη μετατόπιση εγγραφών σε %X/%08X"
 
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "λείπει contrecord στο %X/%X"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "λείπει contrecord στο %X/%08X"
diff --git a/src/bin/pg_rewind/po/es.po b/src/bin/pg_rewind/po/es.po
index 794c991edcd..b657bb114d3 100644
--- a/src/bin/pg_rewind/po/es.po
+++ b/src/bin/pg_rewind/po/es.po
@@ -502,28 +502,28 @@ msgstr "memoria agotada mientras se emplazaba un procesador de lectura de WAL"
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "no se pudo leer el registro WAL en %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "no se pudo leer el registro WAL en %X/%08X: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "no se pudo leer el registro WAL en %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "no se pudo leer el registro WAL en %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "el puntero de término %X/%X no es un punto válido; se esperaba %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "el puntero de término %X/%08X no es un punto válido; se esperaba %X/%08X"
 
 #: parsexlog.c:214
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "no se pudo encontrar el registro WAL anterior en %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "no se pudo encontrar el registro WAL anterior en %X/%08X: %s"
 
 #: parsexlog.c:218
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "no se pudo encontrar el registro WAL anterior en %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "no se pudo encontrar el registro WAL anterior en %X/%08X"
 
 #: parsexlog.c:362
 #, c-format
@@ -532,8 +532,8 @@ msgstr "no se pudo posicionar (seek) el archivo «%s»: %m"
 
 #: parsexlog.c:461
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "el registro WAL modifica una relación, pero el tipo de registro no es reconocido: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "el registro WAL modifica una relación, pero el tipo de registro no es reconocido: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -723,8 +723,8 @@ msgstr "el cluster de origen y destino están en el mismo timeline"
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "servidores divergieron en la posición de WAL %X/%X en el timeline %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "servidores divergieron en la posición de WAL %X/%08X en el timeline %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -733,8 +733,8 @@ msgstr "no se requiere rebobinar"
 
 #: pg_rewind.c:463
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "rebobinando desde el último checkpoint común en %X/%X en el timeline %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "rebobinando desde el último checkpoint común en %X/%08X en el timeline %u"
 
 #: pg_rewind.c:473
 #, c-format
@@ -920,53 +920,53 @@ msgstr "IDs de timeline deben ser menores que el ID de timeline del hijo."
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "desplazamiento de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "desplazamiento de registro no válido en %X/%08X: se esperaba al menos %u, se obtuvo %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord solicitado por %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord solicitado por %X/%08X"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "largo de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "largo de registro no válido en %X/%08X: se esperaba al menos %u, se obtuvo %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "no hay bandera de contrecord en %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "no hay bandera de contrecord en %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ID de gestor de recursos %u no válido en %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ID de gestor de recursos %u no válido en %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "registro con prev-link %X/%X incorrecto en %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "registro con prev-link %X/%08X incorrecto en %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "número mágico %04X no válido en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "número mágico %04X no válido en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "info bits %04X no válidos en segment WAL %s, LSN %X/%X, posición %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "info bits %04X no válidos en segment WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -985,63 +985,63 @@ msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ inc
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "pageaddr %X/%X inesperado en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "pageaddr %X/%08X inesperado en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ID de timeline %u fuera de secuencia (después de %u) en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ID de timeline %u fuera de secuencia (después de %u) en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u fuera de orden en %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u fuera de orden en %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED están definidos, pero el largo de imagen de bloque es %u en %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED están definidos, pero el largo de imagen de bloque es %u en %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X "
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%08X "
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u no válido en %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u no válido en %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "registro con largo no válido en %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "registro con largo no válido en %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -1050,25 +1050,25 @@ msgstr "no se pudo localizar un bloque de respaldo con ID %d en el registro WAL"
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "no se pudo restaurar la imagen en %X/%X con bloque especificado %d no válido"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "no se pudo restaurar la imagen en %X/%08X con bloque especificado %d no válido"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X con estado no válido, bloque %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X con estado no válido, bloque %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X comprimida con %s que no está soportado por esta instalación, bloque %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X comprimida con %s que no está soportado por esta instalación, bloque %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X comprimida con un método desconocido, bloque %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X comprimida con un método desconocido, bloque %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "no se pudo descomprimir la imagen en %X/%X, bloque %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "no se pudo descomprimir la imagen en %X/%08X, bloque %d"
diff --git a/src/bin/pg_rewind/po/fr.po b/src/bin/pg_rewind/po/fr.po
index da4f2e14520..1f0153552bf 100644
--- a/src/bin/pg_rewind/po/fr.po
+++ b/src/bin/pg_rewind/po/fr.po
@@ -502,28 +502,28 @@ msgstr "manque mémoire lors de l'allocation d'un processeur de lecture de journ
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%X : %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%08X : %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "n'a pas pu lire l'enregistrement WAL précédent à %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "le pointeur de fin %X/%X n'est pas un pointeur de fin valide ; %X/%X attendu"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "le pointeur de fin %X/%08X n'est pas un pointeur de fin valide ; %X/%08X attendu"
 
 #: parsexlog.c:212
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%X : %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%08X : %s"
 
 #: parsexlog.c:216
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "n'a pas pu trouver l'enregistrement WAL précédent à %X/%08X"
 
 #: parsexlog.c:341
 #, c-format
@@ -532,8 +532,8 @@ msgstr "n'a pas pu parcourir le fichier « %s » : %m"
 
 #: parsexlog.c:440
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "l'enregistrement WAL modifie une relation mais le type d'enregistrement n'est pas reconnu : lsn : %X/%X, rmid : %d, rmgr : %s, info : %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "l'enregistrement WAL modifie une relation mais le type d'enregistrement n'est pas reconnu : lsn : %X/%08X, rmid : %d, rmgr : %s, info : %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -728,8 +728,8 @@ msgstr "les instances source et cible sont sur la même ligne de temps"
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "les serveurs ont divergé à la position %X/%X des WAL sur la timeline %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "les serveurs ont divergé à la position %X/%08X des WAL sur la timeline %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -738,8 +738,8 @@ msgstr "pas de retour en arrière requis"
 
 #: pg_rewind.c:460
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "retour en arrière depuis le dernier checkpoint commun à %X/%X sur la ligne de temps %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "retour en arrière depuis le dernier checkpoint commun à %X/%08X sur la ligne de temps %u"
 
 #: pg_rewind.c:470
 #, c-format
@@ -927,55 +927,55 @@ msgstr ""
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "décalage invalide de l'enregistrement à %X/%X : attendait au moins %u, a eu %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "décalage invalide de l'enregistrement à %X/%08X : attendait au moins %u, a eu %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "« contrecord » est requis par %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "« contrecord » est requis par %X/%08X"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "longueur invalide de l'enregistrement à %X/%X : attendait au moins %u, a eu %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "longueur invalide de l'enregistrement à %X/%08X : attendait au moins %u, a eu %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "il n'existe pas de drapeau contrecord à %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "il n'existe pas de drapeau contrecord à %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "enregistrement avec prev-link %X/%08X incorrect à %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
 msgstr ""
 "somme de contrôle des données du gestionnaire de ressources incorrecte à\n"
-"l'enregistrement %X/%X"
+"l'enregistrement %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "numéro magique invalide %04X dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "numéro magique invalide %04X dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "bits d'information %04X invalides dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "bits d'information %04X invalides dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -994,63 +994,63 @@ msgstr "Le fichier WAL provient d'une instance différente : XLOG_BLCKSZ incorre
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, LSN %X/%X, segment %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "pageaddr %X/%08X inattendue dans le journal de transactions %s, LSN %X/%08X, segment %u"
 
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u désordonné à %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u désordonné à %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%08X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u invalide à %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u invalide à %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "enregistrement de longueur invalide à %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "enregistrement de longueur invalide à %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -1059,25 +1059,25 @@ msgstr "n'a pas pu localiser le bloc de sauvegarde d'ID %d dans l'enregistrement
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "n'a pas pu restaurer l'image à %X/%X avec le bloc invalide %d indiqué"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "n'a pas pu restaurer l'image à %X/%08X avec le bloc invalide %d indiqué"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X avec un état invalide, bloc %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X avec un état invalide, bloc %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X compressé avec %s, qui est non supporté par le serveur, bloc %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X compressé avec %s, qui est non supporté par le serveur, bloc %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X compressé avec une méthode inconnue, bloc %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X compressé avec une méthode inconnue, bloc %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "n'a pas pu décompresser l'image à %X/%X, bloc %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "n'a pas pu décompresser l'image à %X/%08X, bloc %d"
diff --git a/src/bin/pg_rewind/po/it.po b/src/bin/pg_rewind/po/it.po
index 0a1c3d44385..cea5c30ba13 100644
--- a/src/bin/pg_rewind/po/it.po
+++ b/src/bin/pg_rewind/po/it.po
@@ -443,28 +443,28 @@ msgstr "Errore nell'allocazione di un processore di lettura del WAL."
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "lettura del record WAL a %X/%X fallita: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "lettura del record WAL a %X/%08X fallita: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "lettura del record WAL a %X/%X fallita"
+msgid "could not read WAL record at %X/%08X"
+msgstr "lettura del record WAL a %X/%08X fallita"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "il puntatore finale %X/%X non è un punto finale valido; previsto %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "il puntatore finale %X/%08X non è un punto finale valido; previsto %X/%08X"
 
 #: parsexlog.c:212
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "impossibile trovare il record WAL precedente a %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "impossibile trovare il record WAL precedente a %X/%08X: %s"
 
 #: parsexlog.c:216
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "impossibile trovare il record WAL precedente a %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "impossibile trovare il record WAL precedente a %X/%08X"
 
 #: parsexlog.c:341
 #, c-format
@@ -473,8 +473,8 @@ msgstr "spostamento nel file \"%s\" fallito: %m"
 
 #: parsexlog.c:440
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "Il record WAL modifica una relazione, ma il tipo di record non viene riconosciuto: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "Il record WAL modifica una relazione, ma il tipo di record non viene riconosciuto: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:86
 #, c-format
@@ -659,8 +659,8 @@ msgstr "i cluster di origine e di destinazione sono sulla stessa linea temporale
 
 #: pg_rewind.c:353
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "i server sono andati a divergere alla posizione WAL %X/%X sulla timeline %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "i server sono andati a divergere alla posizione WAL %X/%08X sulla timeline %u"
 
 #: pg_rewind.c:401
 #, c-format
@@ -669,8 +669,8 @@ msgstr "rewind non richiesto"
 
 #: pg_rewind.c:410
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "riavvolgimento dall'ultimo checkpoint comune a %X/%X sulla timeline %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "riavvolgimento dall'ultimo checkpoint comune a %X/%08X sulla timeline %u"
 
 #: pg_rewind.c:420
 #, c-format
@@ -851,18 +851,18 @@ msgstr "Gli ID della timeline devono avere valori inferiori degli ID della timel
 
 #: xlogreader.c:625
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "offset del record non valido a %X/%X"
+msgid "invalid record offset at %X/%08X"
+msgstr "offset del record non valido a %X/%08X"
 
 #: xlogreader.c:633
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord richiesto da %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord richiesto da %X/%08X"
 
 #: xlogreader.c:674 xlogreader.c:1121
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "lunghezza del record a %X/%X non valida: attesa %u, ricevuta %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "lunghezza del record a %X/%08X non valida: attesa %u, ricevuta %u"
 
 #: xlogreader.c:703
 #, c-format
@@ -871,38 +871,38 @@ msgstr "memoria insufficiente durante il tentativo di decodificare un record di
 
 #: xlogreader.c:725
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "lunghezza del record %u a %X/%X eccessiva"
+msgid "record length %u at %X/%08X too long"
+msgstr "lunghezza del record %u a %X/%08X eccessiva"
 
 #: xlogreader.c:774
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "non c'è un flag di contrecord a %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "non c'è un flag di contrecord a %X/%08X"
 
 #: xlogreader.c:787
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "lunghezza contrada non valida %u (prevista %lld) a %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "lunghezza contrada non valida %u (prevista %lld) a %X/%08X"
 
 #: xlogreader.c:922
 #, c-format
-msgid "missing contrecord at %X/%X"
-msgstr "record mancante a %X/%X"
+msgid "missing contrecord at %X/%08X"
+msgstr "record mancante a %X/%08X"
 
 #: xlogreader.c:1129
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ID di gestione risorse %u non valido a %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ID di gestione risorse %u non valido a %X/%08X"
 
 #: xlogreader.c:1142 xlogreader.c:1158
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "record con link-precedente %X/%X non corretto a %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "record con link-precedente %X/%08X non corretto a %X/%08X"
 
 #: xlogreader.c:1194
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%08X"
 
 #: xlogreader.c:1231
 #, c-format
@@ -931,8 +931,8 @@ msgstr "il file WAL è di un database diverso: XLOG_BLCKSZ non corretto nell'hea
 
 #: xlogreader.c:1305
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "pageaddr inaspettato %X/%X nel segmento di log %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "pageaddr inaspettato %X/%08X nel segmento di log %s, offset %u"
 
 #: xlogreader.c:1330
 #, c-format
@@ -941,53 +941,53 @@ msgstr "ID della timeline %u (dopo %u) fuori sequenza nel segmento di log %s, of
 
 #: xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id fuori sequenza %u a %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id fuori sequenza %u a %X/%08X"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%08X"
 
 #: xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%08X"
 
 #: xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%08X"
 
 #: xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED impostato, ma blocca la lunghezza dell'immagine %u a %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED impostato, ma blocca la lunghezza dell'immagine %u a %X/%08X"
 
 #: xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%08X"
 
 #: xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%08X"
 
 #: xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u non valido a %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u non valido a %X/%08X"
 
 #: xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "record con lunghezza non valida a %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "record con lunghezza non valida a %X/%08X"
 
 #: xlogreader.c:1967
 #, c-format
@@ -996,28 +996,28 @@ msgstr "impossibile individuare il blocco di backup con ID %d nel record WAL"
 
 #: xlogreader.c:2051
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "impossibile ripristinare l'immagine in %X/%X con il blocco %d non valido specificato"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "impossibile ripristinare l'immagine in %X/%08X con il blocco %d non valido specificato"
 
 #: xlogreader.c:2058
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X con stato non valido, blocco %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X con stato non valido, blocco %d"
 
 #: xlogreader.c:2085 xlogreader.c:2102
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X compressa con %s non supportata da build, blocco %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X compressa con %s non supportata da build, blocco %d"
 
 #: xlogreader.c:2111
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X compressa con metodo sconosciuto, blocco %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X compressa con metodo sconosciuto, blocco %d"
 
 #: xlogreader.c:2119
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "impossibile decomprimere l'immagine in %X/%X, blocco %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "impossibile decomprimere l'immagine in %X/%08X, blocco %d"
 
 #~ msgid "  block %u\n"
 #~ msgstr "  blocco %u\n"
@@ -1031,8 +1031,8 @@ msgstr "impossibile decomprimere l'immagine in %X/%X, blocco %d"
 #~ msgid "\"%s\" is not a symbolic link\n"
 #~ msgstr "\"%s\" non è un link simbolico\n"
 
-#~ msgid "%d: %X/%X - %X/%X\n"
-#~ msgstr "%d: %X/%X - %X/%X\n"
+#~ msgid "%d: %X/%08X - %X/%08X\n"
+#~ msgstr "%d: %X/%08X - %X/%08X\n"
 
 #~ msgid "%s (%s)\n"
 #~ msgstr "%s (%s)\n"
diff --git a/src/bin/pg_rewind/po/ja.po b/src/bin/pg_rewind/po/ja.po
index 80cdf4e73ba..7f2963043fe 100644
--- a/src/bin/pg_rewind/po/ja.po
+++ b/src/bin/pg_rewind/po/ja.po
@@ -505,28 +505,28 @@ msgstr "WAL読み取り機構のメモリ割り当て中にメモリ不足"
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "%X/%XのWALレコードを読み取れませんでした: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "%X/%08XのWALレコードを読み取れませんでした: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "%X/%XのWALレコードを読み取れませんでした"
+msgid "could not read WAL record at %X/%08X"
+msgstr "%X/%08XのWALレコードを読み取れませんでした"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "終了点%X/%Xは妥当な終了点ではありません; %X/%Xを期待していました"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "終了点%X/%08Xは妥当な終了点ではありません; %X/%08Xを期待していました"
 
 #: parsexlog.c:214
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "%X/%Xの前のWALレコードが見つかりませんでした: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "%X/%08Xの前のWALレコードが見つかりませんでした: %s"
 
 #: parsexlog.c:218
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "%X/%Xの前のWALレコードが見つかりませんでした"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "%X/%08Xの前のWALレコードが見つかりませんでした"
 
 #: parsexlog.c:362
 #, c-format
@@ -535,8 +535,8 @@ msgstr "ファイル\"%s\"をシークできませんでした: %m"
 
 #: parsexlog.c:461
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "WALレコードはリレーションを更新しますが、レコードの型を認識できません: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "WALレコードはリレーションを更新しますが、レコードの型を認識できません: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -721,7 +721,7 @@ msgstr "ソースとターゲットのクラスタが同一タイムライン上
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
 msgstr "タイムライン%3$uのWAL位置%1$X/%2$Xで両サーバーが分岐しています"
 
 #: pg_rewind.c:451
@@ -731,7 +731,7 @@ msgstr "巻き戻しは必要ありません"
 
 #: pg_rewind.c:464
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
 msgstr "タイムライン%3$uの%1$X/%2$Xにある最新の共通チェックポイントから巻き戻しています"
 
 #: pg_rewind.c:474
@@ -917,52 +917,52 @@ msgstr "タイムラインIDは子のタイムラインIDより小さくなけ
 
 #: xlogreader.c:620
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "%X/%Xのレコードオフセットが無効です:最低でも%uを期待していましたが、実際は%uでした"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "%X/%08Xのレコードオフセットが無効です:最低でも%uを期待していましたが、実際は%uでした"
 
 #: xlogreader.c:629
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%Xではcontrecordが必要です"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08Xではcontrecordが必要です"
 
 #: xlogreader.c:670 xlogreader.c:1135
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "%X/%Xのレコード長が無効です:最低でも%uを期待していましたが、実際は%uでした"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "%X/%08Xのレコード長が無効です:最低でも%uを期待していましたが、実際は%uでした"
 
 #: xlogreader.c:759
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%Xで contrecord フラグがありません"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08Xで contrecord フラグがありません"
 
 #: xlogreader.c:772
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
 msgstr "%3$X/%4$Xの継続レコードの長さ%1$u(正しくは%2$lld)は不正です"
 
 #: xlogreader.c:1143
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "%2$X/%3$XのリソースマネージャID %1$uが無効です"
 
 #: xlogreader.c:1156 xlogreader.c:1172
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
 msgstr "直前のリンク%1$X/%2$Xが不正なレコードが%3$X/%4$Xにあります"
 
 #: xlogreader.c:1210
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "%X/%Xのレコード内のリソースマネージャデータのチェックサムが不正です"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "%X/%08Xのレコード内のリソースマネージャデータのチェックサムが不正です"
 
 #: xlogreader.c:1244
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%2$s、LSN %3$X/%4$X、オフセット%5$uで不正なマジックナンバー%1$04X"
 
 #: xlogreader.c:1259 xlogreader.c:1301
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント %2$s、LSN %3$X/%4$X、オフセット%5$uで不正な情報ビット列%1$04X"
 
 #: xlogreader.c:1275
@@ -982,63 +982,63 @@ msgstr "WAL ファイルは異なるデータベースシステム由来のも
 
 #: xlogreader.c:1321
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで想定外のページアドレス%1$X/%2$X"
 
 #: xlogreader.c:1347
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで異常な順序のタイムラインID %1$u(%2$uの後)"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %uが%X/%Xで無効です"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %uが%X/%08Xで無効です"
 
 #: xlogreader.c:1783
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%Xにデータがありません"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%08Xにデータがありません"
 
 #: xlogreader.c:1790
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "BKPBLOCK_HAS_DATAが設定されていませんが、%2$X/%3$Xのデータ長は%1$u"
 
 #: xlogreader.c:1826
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEが設定されていますが、%4$X/%5$Xでホールオフセット%1$u、長さ%2$u、ブロックイメージ長%3$u"
 
 #: xlogreader.c:1842
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEが設定されていませんが、%3$X/%4$Xにホールオフセット%1$u、長さ%2$u"
 
 #: xlogreader.c:1856
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr "BKPIMAGE_COMPRESSEDが設定されていますが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです"
 
 #: xlogreader.c:1871
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEもBKPIMAGE_COMPRESSEDも設定されていませんが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです"
 
 #: xlogreader.c:1887
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%Xにおいて以前のリレーションがありません"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%08Xにおいて以前のリレーションがありません"
 
 #: xlogreader.c:1899
 #, c-format
-msgid "invalid block_id %u at %X/%X"
+msgid "invalid block_id %u at %X/%08X"
 msgstr "%2$X/%3$Xにおけるblock_id %1$uが無効です"
 
 #: xlogreader.c:1966
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "%X/%Xのレコードのサイズが無効です"
+msgid "record with invalid length at %X/%08X"
+msgstr "%X/%08Xのレコードのサイズが無効です"
 
 #: xlogreader.c:1992
 #, c-format
@@ -1047,25 +1047,25 @@ msgstr "WALレコード中のID %dのバックアップブロックを特定で
 
 #: xlogreader.c:2076
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "%X/%Xで不正なブロック%dが指定されているためイメージが復元できませんでした"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "%X/%08Xで不正なブロック%dが指定されているためイメージが復元できませんでした"
 
 #: xlogreader.c:2083
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "%X/%Xでブロック%dのイメージが不正な状態であるため復元できませんでした"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "%X/%08Xでブロック%dのイメージが不正な状態であるため復元できませんでした"
 
 #: xlogreader.c:2110 xlogreader.c:2127
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "%1$X/%2$Xで、ブロック%4$dがこのビルドでサポートされない圧縮方式%3$sで圧縮されているため復元できませんでした"
 
 #: xlogreader.c:2136
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "%X/%Xでブロック%dのイメージが不明な方式で圧縮されているため復元できませんでした"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "%X/%08Xでブロック%dのイメージが不明な方式で圧縮されているため復元できませんでした"
 
 #: xlogreader.c:2144
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "%X/%Xのブロック%dが伸張できませんでした"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "%X/%08Xのブロック%dが伸張できませんでした"
diff --git a/src/bin/pg_rewind/po/ka.po b/src/bin/pg_rewind/po/ka.po
index 5f0c442e810..9356dee6278 100644
--- a/src/bin/pg_rewind/po/ka.po
+++ b/src/bin/pg_rewind/po/ka.po
@@ -502,28 +502,28 @@ msgstr "არასაკმარისი მეხსიერება WAL-
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "შეცდომა WAL ჩანაწერის კითხვისას: %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "შეცდომა WAL ჩანაწერის კითხვისას: %X/%08X: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "შეცდომა WAL ჩანაწერის კითხვისას: %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "შეცდომა WAL ჩანაწერის კითხვისას: %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "ბოლოს მაჩვენებელი %X/%X არასწორი ბოლოს მაჩვენებელია. მოველოდი %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "ბოლოს მაჩვენებელი %X/%08X არასწორი ბოლოს მაჩვენებელია. მოველოდი %X/%08X"
 
 #: parsexlog.c:214
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "წინა WAL ჩანაწერის პოვნა შეუძლებელია მისამართზე %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "წინა WAL ჩანაწერის პოვნა შეუძლებელია მისამართზე %X/%08X: %s"
 
 #: parsexlog.c:218
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "წინა WAL ჩანაწერის პოვნა შეუძლებელია მისამართზე %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "წინა WAL ჩანაწერის პოვნა შეუძლებელია მისამართზე %X/%08X"
 
 #: parsexlog.c:362
 #, c-format
@@ -532,8 +532,8 @@ msgstr "ფაილში (%s) გადახვევის პრობლ
 
 #: parsexlog.c:461
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "WAL ჩანაწერი ცვლის ურთიერთობას, მაგრამ ჩანაწერის ტიპი უცნობია: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "WAL ჩანაწერი ცვლის ურთიერთობას, მაგრამ ჩანაწერის ტიპი უცნობია: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -719,8 +719,8 @@ msgstr "საწყისი და სამიზნე კლასტერ
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "სერვერი დაშორდა WAL-ს მდებარეობაზე %X/%X დროის ხაზზე %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "სერვერი დაშორდა WAL-ს მდებარეობაზე %X/%08X დროის ხაზზე %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -729,8 +729,8 @@ msgstr "გადახვევა საჭირო არაა"
 
 #: pg_rewind.c:464
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "გადახვევა ბოლო საერთო საკონტროლო წერტილიდან მისამართზე %X/%X დროის ხაზზე %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "გადახვევა ბოლო საერთო საკონტროლო წერტილიდან მისამართზე %X/%08X დროის ხაზზე %u"
 
 #: pg_rewind.c:474
 #, c-format
@@ -916,53 +916,53 @@ msgstr "დროის ხაზის ID-ები შვილეული 
 
 #: xlogreader.c:620
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X: მინდოდა %u, მივიღე %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%08X: მინდოდა %u, მივიღე %u"
 
 #: xlogreader.c:629
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord მოთხოვნილია %X/%X-ის მიერ"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord მოთხოვნილია %X/%08X-ის მიერ"
 
 #: xlogreader.c:670 xlogreader.c:1135
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ჩანაწერის არასწორი სიგრძე მისამართზე %X/%X: მოველოდი მინიმუმ %u, მივიღე %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ჩანაწერის არასწორი სიგრძე მისამართზე %X/%08X: მოველოდი მინიმუმ %u, მივიღე %u"
 
 #: xlogreader.c:759
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "contrecord ალამი მისამართზე %X/%X არ არსებობს"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "contrecord ალამი მისამართზე %X/%08X არ არსებობს"
 
 #: xlogreader.c:772
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "contrecord -ის არასწორი სიგრძე %u (მოველოდი %lld) მისამართზე %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "contrecord -ის არასწორი სიგრძე %u (მოველოდი %lld) მისამართზე %X/%08X"
 
 #: xlogreader.c:1143
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "რესურსის მმართველის არასწორი ID %u მისამართზე %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "რესურსის მმართველის არასწორი ID %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1156 xlogreader.c:1172
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "ჩანაწერი არასწორი წინა ბმულით %X/%X მისამართზე %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "ჩანაწერი არასწორი წინა ბმულით %X/%08X მისამართზე %X/%08X"
 
 #: xlogreader.c:1210
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "რესურსის მმართველის მონაცემების არასწორი საკონტროლო რიცხვი ჩანაწერში მისამართზე %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "რესურსის მმართველის მონაცემების არასწორი საკონტროლო რიცხვი ჩანაწერში მისამართზე %X/%08X"
 
 #: xlogreader.c:1244
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "არასწორი მაგიური რიცხვი %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "არასწორი მაგიური რიცხვი %04X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1259 xlogreader.c:1301
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "არასწორი საინფორმაციო ბიტები %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "არასწორი საინფორმაციო ბიტები %04X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1275
 #, c-format
@@ -981,63 +981,63 @@ msgstr "WAL ფაილი სხვა მონაცემთა ბაზ
 
 #: xlogreader.c:1321
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "მოულოდნელი pageaddr %X/%X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "მოულოდნელი pageaddr %X/%08X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1347
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "მიმდევრობის-გარე დროის ხაზის ID %u (%u-ის შემდეგ) ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "მიმდევრობის-გარე დროის ხაზის ID %u (%u-ის შემდეგ) ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "ურიგო block_id %u მისამართზე %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "ურიგო block_id %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1783
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ მონაცემები მისამართზე %X/%X არ არსებობს"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ მონაცემები მისამართზე %X/%08X არ არსებობს"
 
 #: xlogreader.c:1790
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ არსებობს მონაცემები სიგრძით %u მისამართზე %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ არსებობს მონაცემები სიგრძით %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1826
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE დაყენებულია, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u ბლოკის ასლის სიგრძე %u მისამართზე %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE დაყენებულია, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u ბლოკის ასლის სიგრძე %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1842
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE დაყენებული არაა, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u მისანართზე %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE დაყენებული არაა, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u მისანართზე %X/%08X"
 
 #: xlogreader.c:1856
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED დაყენებულია, მაგრამ ბლოკის ასლის სიგრძეა %u მისამართზე %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED დაყენებულია, მაგრამ ბლოკის ასლის სიგრძეა %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1871
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "არც BKPIMAGE_HAS_HOLE და არც BKPIMAGE_COMPRESSED დაყენებული არაა, მაგრამ ბლოკის ასლის სიგრძე %u-ა, მისამართზე %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "არც BKPIMAGE_HAS_HOLE და არც BKPIMAGE_COMPRESSED დაყენებული არაა, მაგრამ ბლოკის ასლის სიგრძე %u-ა, მისამართზე %X/%08X"
 
 #: xlogreader.c:1887
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL დაყენებულია, მაგრამ წინა მნიშვნელობა მითითებული არაა მისამართზე %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL დაყენებულია, მაგრამ წინა მნიშვნელობა მითითებული არაა მისამართზე %X/%08X"
 
 #: xlogreader.c:1899
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "არასწორი block_id %u %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "არასწორი block_id %u %X/%08X"
 
 #: xlogreader.c:1966
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "ჩანაწერი არასწორი სიგრძით მისამართზე %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "ჩანაწერი არასწორი სიგრძით მისამართზე %X/%08X"
 
 #: xlogreader.c:1992
 #, c-format
@@ -1046,28 +1046,28 @@ msgstr "შეცდომა WAL ჩანაწერში მარქაფ
 
 #: xlogreader.c:2076
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X, როცა მითითებულია არასწორი ბლოკი %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%08X, როცა მითითებულია არასწორი ბლოკი %d"
 
 #: xlogreader.c:2083
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X არასწორი მდგომარეობით, ბლოკი %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%08X არასწორი მდგომარეობით, ბლოკი %d"
 
 #: xlogreader.c:2110 xlogreader.c:2127
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "%3$s მეთოდით შეკუმშული ასლის აღდგენა მისამართზე %1$X/%2$X, ბლოკი %4$d შეუძლებელია. მხარდაუჭერელია ამ აგების მიერ"
 
 #: xlogreader.c:2136
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X, შეკუმშულია უცნობი მეთოდით, ბლოკი %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%08X, შეკუმშულია უცნობი მეთოდით, ბლოკი %d"
 
 #: xlogreader.c:2144
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "შეუძლებელია ასლის გაშლა მისამართზე %X/%X, ბლოკი %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "შეუძლებელია ასლის გაშლა მისამართზე %X/%08X, ბლოკი %d"
 
 #, c-format
 #~ msgid "\"%s\" is a symbolic link, but symbolic links are not supported on this platform"
@@ -1096,17 +1096,17 @@ msgstr "შეუძლებელია ასლის გაშლა მი
 #~ msgstr "არასწორი კონტროლის ფაილი"
 
 #, c-format
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%08X"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "contrecord მისამართზე %X/%X არ არსებობს"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "contrecord მისამართზე %X/%08X არ არსებობს"
 
 #, c-format
 #~ msgid "out of memory while trying to decode a record of length %u"
 #~ msgstr "%u სიგრძის მქონე ჩანაწერის დეკოდირებისთვის მეხსიერება საკმარისი არაა"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "ჩანაწერის სიგრძე %u მისამართზე %X/%X ძალიან გრძელია"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "ჩანაწერის სიგრძე %u მისამართზე %X/%08X ძალიან გრძელია"
diff --git a/src/bin/pg_rewind/po/ko.po b/src/bin/pg_rewind/po/ko.po
index 459bbd71401..90e4056d720 100644
--- a/src/bin/pg_rewind/po/ko.po
+++ b/src/bin/pg_rewind/po/ko.po
@@ -503,28 +503,28 @@ msgstr "WAL 읽기 프로세서를 할당하는 중 메모리 부족"
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "%X/%X 위치에서 WAL 레코드를 읽을 수 없음: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "%X/%08X 위치에서 WAL 레코드를 읽을 수 없음: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "%X/%X 위치에서 WAL 레코드를 읽을 수 없음"
+msgid "could not read WAL record at %X/%08X"
+msgstr "%X/%08X 위치에서 WAL 레코드를 읽을 수 없음"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "%X/%X 끝 포인터는 바른값이 아님; 기대값: %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "%X/%08X 끝 포인터는 바른값이 아님; 기대값: %X/%08X"
 
 #: parsexlog.c:214
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "%X/%X 위치에서 이전 WAL 레코드를 찾을 수 없음: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "%X/%08X 위치에서 이전 WAL 레코드를 찾을 수 없음: %s"
 
 #: parsexlog.c:218
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "%X/%X 위치에서 이전 WAL 레코드를 찾을 수 없음"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "%X/%08X 위치에서 이전 WAL 레코드를 찾을 수 없음"
 
 #: parsexlog.c:362
 #, c-format
@@ -538,7 +538,7 @@ msgid ""
 "%X, rmid: %d, rmgr: %s, info: %02X"
 msgstr ""
 "WAL 레코드가 릴레이션을 변경하려고 하지만, 레코드 형태가 바르지 않음: lsn: "
-"%X/%X, rmid: %d, rmgr: %s, info: %02X"
+"%X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -739,8 +739,8 @@ msgstr "원본과 대상 클러스터의 타임라인이 같음"
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "서버 분기 WAL 위치: %X/%X, 타임라인 %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "서버 분기 WAL 위치: %X/%08X, 타임라인 %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -749,8 +749,8 @@ msgstr "되감을 필요 없음"
 
 #: pg_rewind.c:463
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "재동기화 시작함, 마지막 체크포인트 위치 %X/%X, 타임라인 %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "재동기화 시작함, 마지막 체크포인트 위치 %X/%08X, 타임라인 %u"
 
 #: pg_rewind.c:473
 #, c-format
@@ -945,53 +945,53 @@ msgstr "타임라인 ID는 하위 타임라인 ID보다 작아야 합니다."
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "잘못된 레코드 오프셋:위치 %X/%X, 기대값 %u, 실재값 %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "잘못된 레코드 오프셋:위치 %X/%08X, 기대값 %u, 실재값 %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%X에서 contrecord를 필요로 함"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08X에서 contrecord를 필요로 함"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "잘못된 레코드 길이:위치 %X/%X, 기대값 %u, 실재값 %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "잘못된 레코드 길이:위치 %X/%08X, 기대값 %u, 실재값 %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%X 위치에 contrecord 플래그가 없음"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08X 위치에 contrecord 플래그가 없음"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "잘못된 contrecord 길이 %u (기대값: %lld), 위치 %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "잘못된 contrecord 길이 %u (기대값: %lld), 위치 %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "잘못된 자원 관리 ID %u, 위치: %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "잘못된 자원 관리 ID %u, 위치: %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "레코드의 잘못된 프리링크 %X/%X, 해당 레코드 %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "레코드의 잘못된 프리링크 %X/%08X, 해당 레코드 %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%X 레코드"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%08X 레코드"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "%04X 매직 번호가 잘못됨, WAL 조각파일: %s, LSN %X/%X, 오프셋 %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "%04X 매직 번호가 잘못됨, WAL 조각파일: %s, LSN %X/%08X, 오프셋 %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "잘못된 정보 비트 %04X, WAL 조각파일: %s, LSN %X/%X, 오프셋 %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "잘못된 정보 비트 %04X, WAL 조각파일: %s, LSN %X/%08X, 오프셋 %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -1022,77 +1022,77 @@ msgstr ""
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "잘못된 페이지 주소 %X/%X, WAL 조각파일: %s, LSN %X/%X, 오프셋 %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "잘못된 페이지 주소 %X/%08X, WAL 조각파일: %s, LSN %X/%08X, 오프셋 %u"
 
 #: xlogreader.c:1346
 #, c-format
 msgid ""
-"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, "
+"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, "
 "offset %u"
 msgstr ""
-"타임라인 범위 벗어남 %u (이전 번호 %u), WAL 조각파일: %s, LSN %X/%X, 오프셋 "
+"타임라인 범위 벗어남 %u (이전 번호 %u), WAL 조각파일: %s, LSN %X/%08X, 오프셋 "
 "%u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "%u block_id는 범위를 벗어남, 위치 %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "%u block_id는 범위를 벗어남, 위치 %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%X 에 자료가 없음"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%08X 에 자료가 없음"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
 msgid ""
 "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at "
-"%X/%X"
+"%X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE 설정이 되어 있지만, 옵셋: %u, 길이: %u, 블록 이미지 길이: "
-"%u, 대상: %X/%X"
+"%u, 대상: %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr ""
-"BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%X"
+"BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr ""
-"BKPIMAGE_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%X"
+"BKPIMAGE_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
 msgid ""
 "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image "
-"length is %u at %X/%X"
+"length is %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE, BKPIMAGE_COMPRESSED 지정 안되어 있으나, 블록 이미지 길이"
-"는 %u, 대상: %X/%X"
+"는 %u, 대상: %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%X 에 이전 릴레이션 없음"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%08X 에 이전 릴레이션 없음"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "잘못된 block_id %u, 위치 %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "잘못된 block_id %u, 위치 %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "잘못된 레코드 길이, 위치 %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "잘못된 레코드 길이, 위치 %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -1101,42 +1101,42 @@ msgstr "WAL 레코드에 %d ID 백업 블록이 없음"
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "%X/%X 위치에 이미지 복원 실패(%d 블록이 바르지 않음)"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "%X/%08X 위치에 이미지 복원 실패(%d 블록이 바르지 않음)"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "%X/%X 에 잘못된 상태값으로 이미지 복원 실패, 블록 %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "%X/%08X 에 잘못된 상태값으로 이미지 복원 실패, 블록 %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with %s not supported by build, "
+"could not restore image at %X/%08X compressed with %s not supported by build, "
 "block %d"
 msgstr ""
-"%X/%X 위치에 %s 압축된 이미지 복원 실패, 해당 엔진이 지원하지 않음, 해당블"
+"%X/%08X 위치에 %s 압축된 이미지 복원 실패, 해당 엔진이 지원하지 않음, 해당블"
 "록: %d"
 
 #: xlogreader.c:2126
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "%X/%X 위치에 알수 없는 압축 방식의 이미지 복원 실패, 해당블록: %d"
+"could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "%X/%08X 위치에 알수 없는 압축 방식의 이미지 복원 실패, 해당블록: %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "%X/%X 에서 이미 압축 풀기 실패, 블록 %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "%X/%08X 에서 이미 압축 풀기 실패, 블록 %d"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "%X/%X 위치에 contrecord 없음"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "%X/%08X 위치에 contrecord 없음"
 
 #, c-format
 #~ msgid "out of memory while trying to decode a record of length %u"
 #~ msgstr "%u 길이의 레코드를 디코딩 하는 중 메모리 부족"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "너무 긴 길이(%u)의 레코드가 %X/%X에 있음"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "너무 긴 길이(%u)의 레코드가 %X/%08X에 있음"
diff --git a/src/bin/pg_rewind/po/pl.po b/src/bin/pg_rewind/po/pl.po
index 06b83d7fe8b..92ec89c7560 100644
--- a/src/bin/pg_rewind/po/pl.po
+++ b/src/bin/pg_rewind/po/pl.po
@@ -390,23 +390,23 @@ msgstr "%*s/%s kB (%d%%) skopiowano"
 
 #: parsexlog.c:87 parsexlog.c:133
 #, c-format
-msgid "could not read WAL record at %X/%X: %s\n"
-msgstr "nie udało się odczytać rekordu WAL na %X/%X: %s\n"
+msgid "could not read WAL record at %X/%08X: %s\n"
+msgstr "nie udało się odczytać rekordu WAL na %X/%08X: %s\n"
 
 #: parsexlog.c:91 parsexlog.c:136
 #, c-format
-msgid "could not read WAL record at %X/%X\n"
-msgstr "nie udało się odczytać rekordu WAL na %X/%X\n"
+msgid "could not read WAL record at %X/%08X\n"
+msgstr "nie udało się odczytać rekordu WAL na %X/%08X\n"
 
 #: parsexlog.c:191
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s\n"
-msgstr "nie udało się odnaleźć poprzedniego rekordu WAL na %X/%X: %s\n"
+msgid "could not find previous WAL record at %X/%08X: %s\n"
+msgstr "nie udało się odnaleźć poprzedniego rekordu WAL na %X/%08X: %s\n"
 
 #: parsexlog.c:195
 #, c-format
-msgid "could not find previous WAL record at %X/%X\n"
-msgstr "nie udało się odnaleźć poprzedniego rekordu WAL na %X/%X\n"
+msgid "could not find previous WAL record at %X/%08X\n"
+msgstr "nie udało się odnaleźć poprzedniego rekordu WAL na %X/%08X\n"
 
 #: parsexlog.c:283
 #, c-format
@@ -427,10 +427,10 @@ msgstr "nie można czytać z pliku \"%s\": %s\n"
 #, c-format
 msgid ""
 "WAL record modifies a relation, but record type is not recognized\n"
-"lsn: %X/%X, rmgr: %s, info: %02X\n"
+"lsn: %X/%08X, rmgr: %s, info: %02X\n"
 msgstr ""
 "rekord WAL zmienia relację, butale typ rekordu nie został rozpoznany\n"
-"lsn: %X/%X, rmgr: %s, info: %02X\n"
+"lsn: %X/%08X, rmgr: %s, info: %02X\n"
 
 #: pg_rewind.c:64
 #, c-format
@@ -549,8 +549,8 @@ msgstr "klaster źródłowy i docelowy są na tej samej linii czasowej\n"
 
 #: pg_rewind.c:234
 #, c-format
-msgid "servers diverged at WAL position %X/%X on timeline %u\n"
-msgstr "serwery rozeszły się na pozycji WAL %X/%X linii czasowej %u\n"
+msgid "servers diverged at WAL position %X/%08X on timeline %u\n"
+msgstr "serwery rozeszły się na pozycji WAL %X/%08X linii czasowej %u\n"
 
 #: pg_rewind.c:271
 #, c-format
@@ -559,8 +559,8 @@ msgstr "przewinięcie nie jest konieczne\n"
 
 #: pg_rewind.c:278
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u\n"
-msgstr "przewinięcie do ostatniego zgodnego punktu kontrolnego na %X/%X linii "
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u\n"
+msgstr "przewinięcie do ostatniego zgodnego punktu kontrolnego na %X/%08X linii "
 "czasowej %u\n"
 
 #: pg_rewind.c:286
@@ -645,8 +645,8 @@ msgstr "Historia docelowej linii czasu:\n"
 #. translator: %d is a timeline number, others are LSN positions
 #: pg_rewind.c:496
 #, c-format
-msgid "%d: %X/%X - %X/%X\n"
-msgstr "%d: %X/%X - %X/%X\n"
+msgid "%d: %X/%08X - %X/%08X\n"
+msgstr "%d: %X/%08X - %X/%08X\n"
 
 #: pg_rewind.c:555
 #, c-format
@@ -732,48 +732,48 @@ msgstr "IDy linii czasu muszą być mniejsze niż ID potomnej linii czasu.\n"
 
 #: xlogreader.c:276
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "niepoprawne przesunięcie rekordu w %X/%X"
+msgid "invalid record offset at %X/%08X"
+msgstr "niepoprawne przesunięcie rekordu w %X/%08X"
 
 #: xlogreader.c:284
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "wymagany kontrekord w %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "wymagany kontrekord w %X/%08X"
 
 #: xlogreader.c:325 xlogreader.c:625
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "niepoprawna długość rekordu w %X/%X: oczekiwana %u, jest %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "niepoprawna długość rekordu w %X/%08X: oczekiwana %u, jest %u"
 
 #: xlogreader.c:340
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "za duża długość rekordu %u w %X/%X"
+msgid "record length %u at %X/%08X too long"
+msgstr "za duża długość rekordu %u w %X/%08X"
 
 #: xlogreader.c:381
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "brak flagi kontrekordu na %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "brak flagi kontrekordu na %X/%08X"
 
 #: xlogreader.c:394
 #, c-format
-msgid "invalid contrecord length %u at %X/%X"
-msgstr "niepoprawna długość kontrekordu %u na %X/%X"
+msgid "invalid contrecord length %u at %X/%08X"
+msgstr "niepoprawna długość kontrekordu %u na %X/%08X"
 
 #: xlogreader.c:633
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "niepoprawny ID menażera zasobów %u w %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "niepoprawny ID menażera zasobów %u w %X/%08X"
 
 #: xlogreader.c:647 xlogreader.c:664
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "rekord z niepoprawnym poprz-linkiem %X/%X w %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "rekord z niepoprawnym poprz-linkiem %X/%08X w %X/%08X"
 
 #: xlogreader.c:701
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "niepoprawna suma kontrolna danych menadżera zasobów w rekordzie w %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "niepoprawna suma kontrolna danych menadżera zasobów w rekordzie w %X/%08X"
 
 #: xlogreader.c:734
 #, c-format
@@ -811,8 +811,8 @@ msgstr ""
 
 #: xlogreader.c:813
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "nieoczekiwany adrstrony %X/%X w segmencie dziennika %s, przesunięcie %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "nieoczekiwany adrstrony %X/%08X w segmencie dziennika %s, przesunięcie %u"
 
 #: xlogreader.c:838
 #, c-format
@@ -823,66 +823,66 @@ msgstr ""
 
 #: xlogreader.c:1083
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "poza porządkiem block_id %u na %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "poza porządkiem block_id %u na %X/%08X"
 
 #: xlogreader.c:1106
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA jest ustawione, ale nie załączono danych na %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA jest ustawione, ale nie załączono danych na %X/%08X"
 
 #: xlogreader.c:1113
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA nie jest ustawione, długość danych to %u na %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA nie jest ustawione, długość danych to %u na %X/%08X"
 
 #: xlogreader.c:1149
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE jest ustawione, ale przesunięcie dziury %u długości %u "
-"blok obrazu o długości %u na %X/%X"
+"blok obrazu o długości %u na %X/%08X"
 
 #: xlogreader.c:1165
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE nie jest ustawione, ale przesunięcie dziury %u o długości "
-"%u na %X/%X"
+"%u na %X/%08X"
 
 #: xlogreader.c:1180
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_IS_COMPRESSED jest ustawione, ale blok obrazu o długości %u na %X/%"
 "X"
 
 #: xlogreader.c:1195
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
 msgstr ""
 "ani BKPIMAGE_HAS_HOLE ani BKPIMAGE_IS_COMPRESSED nie jest ustawione, ale "
-"długość bloku obrazu to %u na %X/%X"
+"długość bloku obrazu to %u na %X/%08X"
 
 #: xlogreader.c:1211
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL jest ustawione ale brak poprzedniej rel na %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL jest ustawione ale brak poprzedniej rel na %X/%08X"
 
 #: xlogreader.c:1223
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "niepoprawny block_id %u na %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "niepoprawny block_id %u na %X/%08X"
 
 #: xlogreader.c:1291
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "rekord o niepoprawnej długości w %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "rekord o niepoprawnej długości w %X/%08X"
 
 #: xlogreader.c:1380
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "niepoprawny skompresowany obraz na %X/%X, blok %d"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "niepoprawny skompresowany obraz na %X/%08X, blok %d"
 
 #~ msgid "Expected an XLOG switchpoint location.\n"
 #~ msgstr "Oczekiwano położenia przełączenia XLOG.\n"
diff --git a/src/bin/pg_rewind/po/pt_BR.po b/src/bin/pg_rewind/po/pt_BR.po
index 378c9035075..62b69005644 100644
--- a/src/bin/pg_rewind/po/pt_BR.po
+++ b/src/bin/pg_rewind/po/pt_BR.po
@@ -386,23 +386,23 @@ msgstr "%*s/%s kB (%d%%) copiado"
 
 #: parsexlog.c:87 parsexlog.c:133
 #, c-format
-msgid "could not read WAL record at %X/%X: %s\n"
-msgstr "não pôde ler registro do WAL em %X/%X: %s\n"
+msgid "could not read WAL record at %X/%08X: %s\n"
+msgstr "não pôde ler registro do WAL em %X/%08X: %s\n"
 
 #: parsexlog.c:91 parsexlog.c:136
 #, c-format
-msgid "could not read WAL record at %X/%X\n"
-msgstr "não pôde ler registro do WAL em %X/%X\n"
+msgid "could not read WAL record at %X/%08X\n"
+msgstr "não pôde ler registro do WAL em %X/%08X\n"
 
 #: parsexlog.c:191
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s\n"
-msgstr "não pôde encontrar registro do WAL anterior em %X/%X: %s\n"
+msgid "could not find previous WAL record at %X/%08X: %s\n"
+msgstr "não pôde encontrar registro do WAL anterior em %X/%08X: %s\n"
 
 #: parsexlog.c:195
 #, c-format
-msgid "could not find previous WAL record at %X/%X\n"
-msgstr "não pôde encontrar registro do WAL anterior em %X/%X\n"
+msgid "could not find previous WAL record at %X/%08X\n"
+msgstr "não pôde encontrar registro do WAL anterior em %X/%08X\n"
 
 #: parsexlog.c:283
 #, c-format
@@ -423,10 +423,10 @@ msgstr "não pôde ler do arquivo \"%s\": %s\n"
 #, c-format
 msgid ""
 "WAL record modifies a relation, but record type is not recognized\n"
-"lsn: %X/%X, rmgr: %s, info: %02X\n"
+"lsn: %X/%08X, rmgr: %s, info: %02X\n"
 msgstr ""
 "registro do WAL modifica uma relação mas tipo do registro é desconhecido\n"
-"lsn: %X/%X, rmgr: %s, info: %02X\n"
+"lsn: %X/%08X, rmgr: %s, info: %02X\n"
 
 #: pg_rewind.c:64
 #, c-format
@@ -543,8 +543,8 @@ msgstr "agrupamentos de origem e destino estão na mesma linha do tempo\n"
 
 #: pg_rewind.c:234
 #, c-format
-msgid "servers diverged at WAL position %X/%X on timeline %u\n"
-msgstr "servidores divergem na posição do WAL %X/%X na linha do tempo %u\n"
+msgid "servers diverged at WAL position %X/%08X on timeline %u\n"
+msgstr "servidores divergem na posição do WAL %X/%08X na linha do tempo %u\n"
 
 #: pg_rewind.c:271
 #, c-format
@@ -553,8 +553,8 @@ msgstr "nenhuma sincronização é necessária\n"
 
 #: pg_rewind.c:278
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u\n"
-msgstr "sincronizando a partir do último ponto de controle em comum em %X/%X na linha do tempo %u\n"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u\n"
+msgstr "sincronizando a partir do último ponto de controle em comum em %X/%08X na linha do tempo %u\n"
 
 #: pg_rewind.c:286
 #, c-format
@@ -638,8 +638,8 @@ msgstr "Histórico da linha do tempo de destino:\n"
 #. translator: %d is a timeline number, others are LSN positions
 #: pg_rewind.c:496
 #, c-format
-msgid "%d: %X/%X - %X/%X\n"
-msgstr "%d: %X/%X - %X/%X\n"
+msgid "%d: %X/%08X - %X/%08X\n"
+msgstr "%d: %X/%08X - %X/%08X\n"
 
 #: pg_rewind.c:555
 #, c-format
@@ -725,48 +725,48 @@ msgstr "IDs de linha do tempo devem ser menores do que ID de linha do tempo desc
 
 #: xlogreader.c:276
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "posição do registro é inválida em %X/%X"
+msgid "invalid record offset at %X/%08X"
+msgstr "posição do registro é inválida em %X/%08X"
 
 #: xlogreader.c:284
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord é solicitado por %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord é solicitado por %X/%08X"
 
 #: xlogreader.c:325 xlogreader.c:624
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "tamanho do registro inválido em %X/%X: desejado %u, obtido %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "tamanho do registro inválido em %X/%08X: desejado %u, obtido %u"
 
 #: xlogreader.c:340
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "tamanho do registro %u em %X/%X é muito longo"
+msgid "record length %u at %X/%08X too long"
+msgstr "tamanho do registro %u em %X/%08X é muito longo"
 
 #: xlogreader.c:381
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "não há marcação contrecord em %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "não há marcação contrecord em %X/%08X"
 
 #: xlogreader.c:394
 #, c-format
-msgid "invalid contrecord length %u at %X/%X"
-msgstr "tamanho de contrecord %u é inválido em %X/%X"
+msgid "invalid contrecord length %u at %X/%08X"
+msgstr "tamanho de contrecord %u é inválido em %X/%08X"
 
 #: xlogreader.c:632
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ID do gerenciador de recursos %u é inválido em %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ID do gerenciador de recursos %u é inválido em %X/%08X"
 
 #: xlogreader.c:646 xlogreader.c:663
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "registro com prev-link %X/%X incorreto em %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "registro com prev-link %X/%08X incorreto em %X/%08X"
 
 #: xlogreader.c:700
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "soma de verificação do gerenciador de recursos é incorreta no registro em %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "soma de verificação do gerenciador de recursos é incorreta no registro em %X/%08X"
 
 #: xlogreader.c:733
 #, c-format
@@ -795,8 +795,8 @@ msgstr "arquivo do WAL é de um sistema de banco de dados diferente: XLOG_BLCKSZ
 
 #: xlogreader.c:812
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "endereço da página %X/%X inesperado no arquivo de log %s, posição %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "endereço da página %X/%08X inesperado no arquivo de log %s, posição %u"
 
 #: xlogreader.c:837
 #, c-format
@@ -805,55 +805,55 @@ msgstr "ID de linha do tempo %u fora de sequência (após %u) no arquivo de log
 
 #: xlogreader.c:1081
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u fora de ordem em %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u fora de ordem em %X/%08X"
 
 #: xlogreader.c:1103
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA definido mas nenhum dado incluído em %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA definido mas nenhum dado incluído em %X/%08X"
 
 #: xlogreader.c:1110
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA não foi definido mas tamanho do dado é %u em %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA não foi definido mas tamanho do dado é %u em %X/%08X"
 
 #: xlogreader.c:1143
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE definido mas posição do espaço livre %u tamanho %u tamanho da imagem do bloco %u em %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE definido mas posição do espaço livre %u tamanho %u tamanho da imagem do bloco %u em %X/%08X"
 
 #: xlogreader.c:1159
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE não foi definido mas posição do espaço livre %u tamanho %u em %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE não foi definido mas posição do espaço livre %u tamanho %u em %X/%08X"
 
 #: xlogreader.c:1174
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED definido mas tamanho da imagem do bloco %u em %X/%X"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED definido mas tamanho da imagem do bloco %u em %X/%08X"
 
 #: xlogreader.c:1189
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "nem BKPIMAGE_HAS_HOLE nem BKPIMAGE_IS_COMPRESSED foi definido mas tamanho da imagem do bloco é %u em %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "nem BKPIMAGE_HAS_HOLE nem BKPIMAGE_IS_COMPRESSED foi definido mas tamanho da imagem do bloco é %u em %X/%08X"
 
 #: xlogreader.c:1205
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL definido mas não há relação anterior em %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL definido mas não há relação anterior em %X/%08X"
 
 #: xlogreader.c:1217
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u é inválido em %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u é inválido em %X/%08X"
 
 #: xlogreader.c:1282
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "registro com tamanho inválido em %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "registro com tamanho inválido em %X/%08X"
 
 #: xlogreader.c:1371
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "imagem compactada é inválida em %X/%X, bloco %d"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "imagem compactada é inválida em %X/%08X, bloco %d"
diff --git a/src/bin/pg_rewind/po/ru.po b/src/bin/pg_rewind/po/ru.po
index 6f3d63dec58..439ff43acb7 100644
--- a/src/bin/pg_rewind/po/ru.po
+++ b/src/bin/pg_rewind/po/ru.po
@@ -510,29 +510,29 @@ msgstr "не удалось выделить память для чтения WA
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "не удалось прочитать запись WAL в позиции %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "не удалось прочитать запись WAL в позиции %X/%08X: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "не удалось прочитать запись WAL в позиции %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "не удалось прочитать запись WAL в позиции %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
 msgstr ""
-"конечный указатель %X/%X неверно задаёт конечную точку; ожидается %X/%X"
+"конечный указатель %X/%08X неверно задаёт конечную точку; ожидается %X/%08X"
 
 #: parsexlog.c:214
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "не удалось найти предыдущую запись WAL в позиции %X/%08X: %s"
 
 #: parsexlog.c:218
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "не удалось найти предыдущую запись WAL в позиции %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "не удалось найти предыдущую запись WAL в позиции %X/%08X"
 
 #: parsexlog.c:362
 #, c-format
@@ -545,7 +545,7 @@ msgid ""
 "WAL record modifies a relation, but record type is not recognized: lsn: %X/"
 "%X, rmid: %d, rmgr: %s, info: %02X"
 msgstr ""
-"Запись WAL модифицирует отношение, но тип записи не распознан: lsn: %X/%X, "
+"Запись WAL модифицирует отношение, но тип записи не распознан: lsn: %X/%08X, "
 "rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
@@ -759,8 +759,8 @@ msgstr "исходный и целевой кластер уже на одной
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "серверы разошлись в позиции WAL %X/%X на линии времени %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "серверы разошлись в позиции WAL %X/%08X на линии времени %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -769,9 +769,9 @@ msgstr "перемотка не требуется"
 
 #: pg_rewind.c:463
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
 msgstr ""
-"перемотка от последней общей контрольной точки в позиции %X/%X на линии "
+"перемотка от последней общей контрольной точки в позиции %X/%08X на линии "
 "времени %u"
 
 #: pg_rewind.c:473
@@ -973,59 +973,59 @@ msgstr ""
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
 msgstr ""
-"неверное смещение записи в позиции %X/%X: ожидалось минимум %u, получено %u"
+"неверное смещение записи в позиции %X/%08X: ожидалось минимум %u, получено %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "в позиции %X/%X запрошено продолжение записи"
+msgid "contrecord is requested by %X/%08X"
+msgstr "в позиции %X/%08X запрошено продолжение записи"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
 msgstr ""
-"неверная длина записи в позиции %X/%X: ожидалось минимум %u, получено %u"
+"неверная длина записи в позиции %X/%08X: ожидалось минимум %u, получено %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "нет флага contrecord в позиции %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "нет флага contrecord в позиции %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "неверный ID менеджера ресурсов %u в позиции %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "неверный ID менеджера ресурсов %u в позиции %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "запись с неверной ссылкой назад %X/%X в позиции %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "запись с неверной ссылкой назад %X/%08X в позиции %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
 msgstr ""
 "некорректная контрольная сумма данных менеджера ресурсов в записи в позиции "
-"%X/%X"
+"%X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr ""
-"неверное магическое число %04X в сегменте WAL %s, LSN %X/%X, смещение %u"
+"неверное магическое число %04X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr ""
-"неверные информационные биты %04X в сегменте WAL %s, LSN %X/%X, смещение %u"
+"неверные информационные биты %04X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -1056,53 +1056,53 @@ msgstr ""
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "неожиданный pageaddr %X/%X в сегменте WAL %s, LSN %X/%X, смещение %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "неожиданный pageaddr %X/%08X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1346
 #, c-format
 msgid ""
-"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, "
+"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, "
 "offset %u"
 msgstr ""
 "нарушение последовательности ID линии времени %u (после %u) в сегменте WAL "
-"%s, LSN %X/%X, смещение %u"
+"%s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%08X нет"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr ""
-"BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X"
+"BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
 msgid ""
 "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at "
-"%X/%X"
+"%X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u "
-"при длине образа блока %u в позиции %X/%X"
+"при длине образа блока %u в позиции %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина "
-"%u в позиции %X/%X"
+"%u в позиции %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_COMPRESSED установлен, но длина образа блока равна %u в позиции %X/"
 "%X"
@@ -1111,27 +1111,27 @@ msgstr ""
 #, c-format
 msgid ""
 "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image "
-"length is %u at %X/%X"
+"length is %u at %X/%08X"
 msgstr ""
 "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_COMPRESSED не установлены, но длина образа "
-"блока равна %u в позиции %X/%X"
+"блока равна %u в позиции %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
 msgstr ""
 "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/"
 "%X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "неверный идентификатор блока %u в позиции %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "неверный идентификатор блока %u в позиции %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "запись с неверной длиной в позиции %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "запись с неверной длиной в позиции %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -1140,45 +1140,45 @@ msgstr "не удалось найти копию блока с ID %d в зап
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X с указанным неверным блоком %d"
+"не удалось восстановить образ в позиции %X/%08X с указанным неверным блоком %d"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X с неверным состоянием, блок %d"
+"не удалось восстановить образ в позиции %X/%08X с неверным состоянием, блок %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with %s not supported by build, "
+"could not restore image at %X/%08X compressed with %s not supported by build, "
 "block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X, сжатый методом %s, который не "
+"не удалось восстановить образ в позиции %X/%08X, сжатый методом %s, который не "
 "поддерживается этой сборкой, блок %d"
 
 #: xlogreader.c:2126
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with unknown method, block %d"
+"could not restore image at %X/%08X compressed with unknown method, block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X, сжатый неизвестным методом, "
+"не удалось восстановить образ в позиции %X/%08X, сжатый неизвестным методом, "
 "блок %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "не удалось развернуть образ в позиции %X/%X, блок %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "не удалось развернуть образ в позиции %X/%08X, блок %d"
 
 #, c-format
 #~ msgid "out of memory while trying to decode a record of length %u"
 #~ msgstr "не удалось выделить память для декодирования записи длины %u"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "длина записи %u в позиции %X/%X слишком велика"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "длина записи %u в позиции %X/%08X слишком велика"
 
 #, c-format
 #~ msgid "could not load library \"%s\": error code %lu"
@@ -1205,12 +1205,12 @@ msgstr "не удалось развернуть образ в позиции %X
 #~ msgstr "неверный управляющий файл"
 
 #, c-format
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "неверное смещение записи: %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "неверное смещение записи: %X/%08X"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "нет записи contrecord в %X/%X"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "нет записи contrecord в %X/%08X"
 
 #~ msgid "fatal: "
 #~ msgstr "важно: "
@@ -1295,8 +1295,8 @@ msgstr "не удалось развернуть образ в позиции %X
 #~ msgid "Target timeline history:\n"
 #~ msgstr "История линии времени получателя:\n"
 
-#~ msgid "%d: %X/%X - %X/%X\n"
-#~ msgstr "%d: %X/%X - %X/%X\n"
+#~ msgid "%d: %X/%08X - %X/%08X\n"
+#~ msgstr "%d: %X/%08X - %X/%08X\n"
 
 #~ msgid "sync of target directory failed\n"
 #~ msgstr "сбой синхронизации целевого каталога\n"
diff --git a/src/bin/pg_rewind/po/sv.po b/src/bin/pg_rewind/po/sv.po
index 7894e029f20..818c16ca14d 100644
--- a/src/bin/pg_rewind/po/sv.po
+++ b/src/bin/pg_rewind/po/sv.po
@@ -497,28 +497,28 @@ msgstr "slut på minne vid allokering av en WAL-läs-processor"
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "kunde inte läsa WAL-post vid %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "kunde inte läsa WAL-post vid %X/%08X: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "kunde inte läsa WAL-post vid %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "kunde inte läsa WAL-post vid %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "slutpekare %X/%X är inte en giltig slutposition; förväntade %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "slutpekare %X/%08X är inte en giltig slutposition; förväntade %X/%08X"
 
 #: parsexlog.c:212
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "kunde inte hitta föregående WAL-post vid %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "kunde inte hitta föregående WAL-post vid %X/%08X: %s"
 
 #: parsexlog.c:216
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "kunde inte hitta förgående WAL-post vid %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "kunde inte hitta förgående WAL-post vid %X/%08X"
 
 #: parsexlog.c:341
 #, c-format
@@ -527,8 +527,8 @@ msgstr "kunde inte söka (seek) i fil \"%s\": %m"
 
 #: parsexlog.c:440
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "WAL-post modifierar en relation, men posttypen känns inte igen: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "WAL-post modifierar en relation, men posttypen känns inte igen: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -718,8 +718,8 @@ msgstr "källa och målkluster är på samma tidslinje"
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "servrarna divergerade vid WAL-position %X/%X på tidslinje %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "servrarna divergerade vid WAL-position %X/%08X på tidslinje %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -728,8 +728,8 @@ msgstr "ingen rewind krävs"
 
 #: pg_rewind.c:460
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "rewind från senaste gemensamma checkpoint vid %X/%X på tidslinje %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "rewind från senaste gemensamma checkpoint vid %X/%08X på tidslinje %u"
 
 #: pg_rewind.c:470
 #, c-format
@@ -915,53 +915,53 @@ msgstr "Tidslinje-ID:er måste vara mindre än barnens tidslinje-ID:er."
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ogiltig postlängd vid %X/%08X: förväntade minst %u, fick %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord är begärd vid %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord är begärd vid %X/%08X"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ogiltig postlängd vid %X/%08X: förväntade minst %u, fick %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "det finns ingen contrecord-flagga vid %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "det finns ingen contrecord-flagga vid %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "ogiltig contrecord-längd %u (förväntade %lld) vid %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "ogiltig contrecord-längd %u (förväntade %lld) vid %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ogiltigt resurshanterar-ID %u vid %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ogiltigt resurshanterar-ID %u vid %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "post med inkorrekt prev-link %X/%X vid %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "post med inkorrekt prev-link %X/%08X vid %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "felaktigt magiskt nummer %04X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "felaktigt magiskt nummer %04X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ogiltiga infobitar %04X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ogiltiga infobitar %04X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -980,63 +980,63 @@ msgstr "WAL-fil är från ett annat databassystem: inkorrekt XLOG_BLCKSZ i sidhu
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "oväntad sidadress %X/%X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "oväntad sidadress %X/%08X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ej-i-sekvens för tidslinje-ID %u (efter %u) i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ej-i-sekvens för tidslinje-ID %u (efter %u) i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "ej-i-sekvens block_id %u vid %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "ej-i-sekvens block_id %u vid %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED är satt men blockavbildlängd %u vid %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED är satt men blockavbildlängd %u vid %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_COMPRESSED är satt men blockavbildlängd är %u vid %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_COMPRESSED är satt men blockavbildlängd är %u vid %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%08X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "ogiltig block_id %u vid %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "ogiltig block_id %u vid %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "post med ogiltig längd vid %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "post med ogiltig längd vid %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -1045,25 +1045,25 @@ msgstr "kunde inte hitta backup-block med ID %d i WAL-post"
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt block %d angivet"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "kunde inte återställa avbild vid %X/%08X med ogiltigt block %d angivet"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt state, block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X med ogiltigt state, block %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med %s stöds inte av bygget, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X, komprimerad med %s stöds inte av bygget, block %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med okänd metod, block %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X, komprimerad med okänd metod, block %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "kunde inte packa upp avbild vid %X/%X, block %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "kunde inte packa upp avbild vid %X/%08X, block %d"
diff --git a/src/bin/pg_rewind/po/tr.po b/src/bin/pg_rewind/po/tr.po
index d31493101c6..6b6422736bf 100644
--- a/src/bin/pg_rewind/po/tr.po
+++ b/src/bin/pg_rewind/po/tr.po
@@ -381,23 +381,23 @@ msgstr "yetersiz bellek"
 
 #: parsexlog.c:88 parsexlog.c:135
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "%X/%X deki WAL kaydı okunamadı: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "%X/%08X deki WAL kaydı okunamadı: %s"
 
 #: parsexlog.c:92 parsexlog.c:138
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "%X/%X deki WAL kaydı okunamadı"
+msgid "could not read WAL record at %X/%08X"
+msgstr "%X/%08X deki WAL kaydı okunamadı"
 
 #: parsexlog.c:199
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "önceki WAL kaydı %X/%X de bulunamadı: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "önceki WAL kaydı %X/%08X de bulunamadı: %s"
 
 #: parsexlog.c:203
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "önceki WAL kaydı %X/%X de bulunamadı"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "önceki WAL kaydı %X/%08X de bulunamadı"
 
 #: parsexlog.c:294
 #, c-format
@@ -411,8 +411,8 @@ msgstr "\"%s\" dosyası ilerleme hatası: %m"
 
 #: parsexlog.c:387
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X"
-msgstr "WAL kaydı bir nesneyi değiştiriyor, fakat kayıt türü tanınmıyor: lsn: %X/%X, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmgr: %s, info: %02X"
+msgstr "WAL kaydı bir nesneyi değiştiriyor, fakat kayıt türü tanınmıyor: lsn: %X/%08X, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:69
 #, c-format
@@ -550,7 +550,7 @@ msgstr "kaynak ve hedef kümesi aynı zaman çizelgesinde"
 
 #: pg_rewind.c:259
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
 msgstr "sunucular %3$u zaman çizelgesinde %1$X/%2$X WAL konumunda birbirlerinden farklılaşıyor"
 
 #: pg_rewind.c:296
@@ -560,7 +560,7 @@ msgstr "geri sarma (rewind) gerekmiyor"
 
 #: pg_rewind.c:303
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
 msgstr "%3$u zaman çizelgesinde %1$X/%2$X deki son ortak kontrol noktasından geri sarıyor (rewind)"
 
 #: pg_rewind.c:312
@@ -692,48 +692,48 @@ msgstr "timeline ID, child timeline ID'sinden daha düşük olmalıdır."
 
 #: xlogreader.c:299
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "%X/%X adresinde geçersiz kayıt offseti"
+msgid "invalid record offset at %X/%08X"
+msgstr "%X/%08X adresinde geçersiz kayıt offseti"
 
 #: xlogreader.c:307
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord %X/%X tarafından talep edilmiştir"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord %X/%08X tarafından talep edilmiştir"
 
 #: xlogreader.c:348 xlogreader.c:645
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "%X/%X adresinde geçersiz kayıt uzunluğu: istenen %u, alınan %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "%X/%08X adresinde geçersiz kayıt uzunluğu: istenen %u, alınan %u"
 
 #: xlogreader.c:372
 #, c-format
-msgid "record length %u at %X/%X too long"
+msgid "record length %u at %X/%08X too long"
 msgstr "%2$X/%3$X adresinde çok büyük kayıt uzunluğu: %1$u "
 
 #: xlogreader.c:404
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%X de contrecord bayrağı (flag) bulunmuyor"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08X de contrecord bayrağı (flag) bulunmuyor"
 
 #: xlogreader.c:417
 #, c-format
-msgid "invalid contrecord length %u at %X/%X"
-msgstr "%X/%X adresinde geçersiz %u contrecord uzunluğu"
+msgid "invalid contrecord length %u at %X/%08X"
+msgstr "%X/%08X adresinde geçersiz %u contrecord uzunluğu"
 
 #: xlogreader.c:653
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "%2$X/%3$X adresinde geçersiz resource manager ID %1$u"
 
 #: xlogreader.c:667 xlogreader.c:684
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "geçersiz incorrect prev-link olan kayıt: %X/%X at %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "geçersiz incorrect prev-link olan kayıt: %X/%08X at %X/%08X"
 
 #: xlogreader.c:721
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "resoource manager data checksum %X/%X kaydında geçersiz"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "resoource manager data checksum %X/%08X kaydında geçersiz"
 
 #: xlogreader.c:758
 #, c-format
@@ -762,8 +762,8 @@ msgstr "WAL dosyası farklı veritabanı sisteminden: page header'da yanlış XL
 
 #: xlogreader.c:842
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "beklenmeyen pageaddr %X/%X: log segmenti %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "beklenmeyen pageaddr %X/%08X: log segmenti %s, offset %u"
 
 #: xlogreader.c:867
 #, c-format
@@ -772,58 +772,58 @@ msgstr "sıra dışı timeline ID %u (%u'dan sonra), bulunduğu log segmenti %s,
 
 #: xlogreader.c:1112
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "%X/%X deki %u block_id değeri bozuk"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "%X/%08X deki %u block_id değeri bozuk"
 
 #: xlogreader.c:1135
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA ayarlandı, fakat %X/%X de veri yok"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA ayarlandı, fakat %X/%08X de veri yok"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "BKPBLOCK_HAS_DATA ayarlanmadı, fakat veri uzunluğu %u (%X/%x de)"
 
 #: xlogreader.c:1178
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE ayarlandı, fakat hole offset %u uzunluk %u  blok image uzunluğu %u (%X/%X de)"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE ayarlandı, fakat hole offset %u uzunluk %u  blok image uzunluğu %u (%X/%08X de)"
 
 #: xlogreader.c:1194
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE  ayarlanmadı, fakat hole offset %u uzunluk %u (%X/%X de)"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE  ayarlanmadı, fakat hole offset %u uzunluk %u (%X/%08X de)"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED ayarlandı, fakat block image uzunluğu %u (%X/%X de)"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED ayarlandı, fakat block image uzunluğu %u (%X/%08X de)"
 
 #: xlogreader.c:1224
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE ve BKPIMAGE_IS_COMPRESSED ayarlanmadı, fakat block image uzunluğu %u (%X/%X de)"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE ve BKPIMAGE_IS_COMPRESSED ayarlanmadı, fakat block image uzunluğu %u (%X/%08X de)"
 
 #: xlogreader.c:1240
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL ayarlandı fakat %X/%X de önceki rel yok"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL ayarlandı fakat %X/%08X de önceki rel yok"
 
 #: xlogreader.c:1252
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "%X/%X adresinde %u  block_id geçersiz"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "%X/%08X adresinde %u  block_id geçersiz"
 
 #: xlogreader.c:1341
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "%X/%X adresinde geçersiz uzunlukta kayıt"
+msgid "record with invalid length at %X/%08X"
+msgstr "%X/%08X adresinde geçersiz uzunlukta kayıt"
 
 #: xlogreader.c:1430
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "%X/%X adresinde (blok %d), geçersiz compressed image"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "%X/%08X adresinde (blok %d), geçersiz compressed image"
 
 #~ msgid "WAL file is from different database system: incorrect XLOG_SEG_SIZE in page header"
 #~ msgstr "WAL dosyası farklı veritabanı sisteminden: page header'da yanlış XLOG_SEG_SIZE değeri"
@@ -872,8 +872,8 @@ msgstr "%X/%X adresinde (blok %d), geçersiz compressed image"
 #~ msgstr[0] "WAL segment boyutu 1 MB ve 1GB arasında 2 nin üssü bir değer olmalıdır, fakat kontrol dosyası %d bayt belirtmektedir\n"
 #~ msgstr[1] "WAL segment boyutu 1 MB ve 1GB arasında 2 nin üssü bir değer olmalıdır, fakat kontrol dosyası %d bayt belirtmektedir\n"
 
-#~ msgid "%d: %X/%X - %X/%X\n"
-#~ msgstr "%d: %X/%X - %X/%X\n"
+#~ msgid "%d: %X/%08X - %X/%08X\n"
+#~ msgstr "%d: %X/%08X - %X/%08X\n"
 
 #~ msgid "Target timeline history:\n"
 #~ msgstr "Hedef zaman çizelgesi geçmişi:\n"
diff --git a/src/bin/pg_rewind/po/uk.po b/src/bin/pg_rewind/po/uk.po
index dfcc9ac3269..2f5768a7f59 100644
--- a/src/bin/pg_rewind/po/uk.po
+++ b/src/bin/pg_rewind/po/uk.po
@@ -493,28 +493,28 @@ msgstr "недостатньо пам'яті під час виділення о
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "не вдалося прочитати запис WAL на %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "не вдалося прочитати запис WAL на %X/%08X: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "не вдалося прочитати запис WAL на %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "не вдалося прочитати запис WAL на %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "кінцевий покажчик %X/%X не є допустимою кінцевою точкою; очікувалось %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "кінцевий покажчик %X/%08X не є допустимою кінцевою точкою; очікувалось %X/%08X"
 
 #: parsexlog.c:212
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "не вдалося знайти попередній запис WAL на %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "не вдалося знайти попередній запис WAL на %X/%08X: %s"
 
 #: parsexlog.c:216
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "не вдалося знайти попередній запис WAL на %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "не вдалося знайти попередній запис WAL на %X/%08X"
 
 #: parsexlog.c:341
 #, c-format
@@ -523,8 +523,8 @@ msgstr "не вдалося знайти в файлі \"%s\": %m"
 
 #: parsexlog.c:440
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "WAL модифікує відношення, але тип запису не розпізнано: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "WAL модифікує відношення, але тип запису не розпізнано: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:94
 #, c-format
@@ -695,8 +695,8 @@ msgstr "початковий і цільовий кластери знаходя
 
 #: pg_rewind.c:396
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "сервери розійшлись в позиції WAL %X/%X на лінії часу %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "сервери розійшлись в позиції WAL %X/%08X на лінії часу %u"
 
 #: pg_rewind.c:451
 #, c-format
@@ -705,8 +705,8 @@ msgstr "перемотування не потрібне"
 
 #: pg_rewind.c:460
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "перемотування від останньої спільної контрольної точки на %X/%X на лінії часу %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "перемотування від останньої спільної контрольної точки на %X/%08X на лінії часу %u"
 
 #: pg_rewind.c:470
 #, c-format
@@ -894,53 +894,53 @@ msgstr "Ідентифікатори ліній часу повинні бути
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "неприпустиме зміщення запису в %X/%X: очікувалось хоча б %u, отримано %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "неприпустиме зміщення запису в %X/%08X: очікувалось хоча б %u, отримано %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "по зсуву %X/%X запитано продовження запису"
+msgid "contrecord is requested by %X/%08X"
+msgstr "по зсуву %X/%08X запитано продовження запису"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "неприпустима довжина запису %X/%X: очікувалась мінімум %u, отримано %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "неприпустима довжина запису %X/%08X: очікувалась мінімум %u, отримано %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "немає прапорця contrecord в позиції %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "немає прапорця contrecord в позиції %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "невірний ID менеджера ресурсів %u в %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "невірний ID менеджера ресурсів %u в %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "запис з неправильним попереднім посиланням %X/%X на %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "запис з неправильним попереднім посиланням %X/%08X на %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "невірне магічне число %04X в сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "невірне магічне число %04X в сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "невірні інформаційні біти %04X в сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "невірні інформаційні біти %04X в сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -959,63 +959,63 @@ msgstr "Файл WAL належить іншій системі баз дани
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "неочікуваний pageaddr %X/%X у сегменті WAL %s, LSN %X/%X, зміщення %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "неочікуваний pageaddr %X/%08X у сегменті WAL %s, LSN %X/%08X, зміщення %u"
 
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "порушення послідовності ID лінії часу %u (після %u) у сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "порушення послідовності ID лінії часу %u (після %u) у сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "ідентифікатор блока %u out-of-order в позиції %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "ідентифікатор блока %u out-of-order в позиції %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_COMPRESSED не встановлені, але довжина образу блока дорівнює %u в позиції %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_COMPRESSED не встановлені, але довжина образу блока дорівнює %u в позиції %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%08X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "невірний ідентифікатор блоку %u в позиції %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "невірний ідентифікатор блоку %u в позиції %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "запис з невірною довжиною на %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "запис з невірною довжиною на %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -1024,26 +1024,26 @@ msgstr "не вдалося знайти блок резервної копії
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "не вдалося відновити зображення %X/%X з недійсним вказаним блоком %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "не вдалося відновити зображення %X/%08X з недійсним вказаним блоком %d"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "не вдалося відновити зображення %X/%X з недійсним станом, блок %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "не вдалося відновити зображення %X/%08X з недійсним станом, блок %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "не вдалося відновити зображення в %X/%X, стиснуте %s, не підтримується збіркою, блок %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "не вдалося відновити зображення в %X/%08X, стиснуте %s, не підтримується збіркою, блок %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "не вдалося відновити зображення %X/%X стиснуте з невідомим методом, блок %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "не вдалося відновити зображення %X/%08X стиснуте з невідомим методом, блок %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "не вдалося розпакувати зображення на %X/%X, блок %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "не вдалося розпакувати зображення на %X/%08X, блок %d"
 
diff --git a/src/bin/pg_rewind/po/zh_CN.po b/src/bin/pg_rewind/po/zh_CN.po
index 28d76c30b1a..9551176ca22 100644
--- a/src/bin/pg_rewind/po/zh_CN.po
+++ b/src/bin/pg_rewind/po/zh_CN.po
@@ -419,23 +419,23 @@ msgstr "无法关闭文件 \"%s\": %m"
 
 #: parsexlog.c:89 parsexlog.c:142
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "无法读取%X/%X处的WAL记录:%s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "无法读取%X/%08X处的WAL记录:%s"
 
 #: parsexlog.c:93 parsexlog.c:145
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "无法读取%X/%X处的WAL记录"
+msgid "could not read WAL record at %X/%08X"
+msgstr "无法读取%X/%08X处的WAL记录"
 
 #: parsexlog.c:208
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "无法在%X/%X找到前一个WAL记录:%s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "无法在%X/%08X找到前一个WAL记录:%s"
 
 #: parsexlog.c:212
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "无法在%X/%X找到前一个WAL记录"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "无法在%X/%08X找到前一个WAL记录"
 
 #: parsexlog.c:337
 #, c-format
@@ -444,8 +444,8 @@ msgstr "无法在文件\"%s\"进行查找: %m"
 
 #: parsexlog.c:429
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmgr: %s, info: %02X"
-msgstr "WAL记录修改了一个关系,但是记录类型无法识别: lsn: %X/%X, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmgr: %s, info: %02X"
+msgstr "WAL记录修改了一个关系,但是记录类型无法识别: lsn: %X/%08X, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:84
 #, c-format
@@ -621,7 +621,7 @@ msgstr "源集簇和目标集簇处于同一时间线"
 
 #: pg_rewind.c:346
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
 msgstr "服务器在时间线%3$u上的WAL位置%1$X/%2$X处发生了分歧"
 
 #: pg_rewind.c:394
@@ -631,7 +631,7 @@ msgstr "不需要倒带(rewind)"
 
 #: pg_rewind.c:403
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
 msgstr "从时间线%3$u上%1$X/%2$X处的最后一个普通检查点倒带"
 
 #: pg_rewind.c:413
@@ -825,48 +825,48 @@ msgstr "Timeline ID 必须小于子 timeline 的 ID."
 
 #: xlogreader.c:349
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "%X/%X处有无效的记录偏移量"
+msgid "invalid record offset at %X/%08X"
+msgstr "%X/%08X处有无效的记录偏移量"
 
 #: xlogreader.c:357
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%X位置处要求继续记录"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08X位置处要求继续记录"
 
 #: xlogreader.c:398 xlogreader.c:695
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "%X/%X处有无效记录长度: 应该是%u, 但实际是%u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "%X/%08X处有无效记录长度: 应该是%u, 但实际是%u"
 
 #: xlogreader.c:422
 #, c-format
-msgid "record length %u at %X/%X too long"
+msgid "record length %u at %X/%08X too long"
 msgstr "%2$X/%3$X处的记录长度%1$u太长"
 
 #: xlogreader.c:453
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "在%X/%X处没有继续记录标志"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "在%X/%08X处没有继续记录标志"
 
 #: xlogreader.c:466
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
 msgstr "%3$X/%4$X处有无效的继续记录长度%1$u(应为 %2$lld)"
 
 #: xlogreader.c:703
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "%2$X/%3$X处有无效的资源管理器 ID %1$u"
 
 #: xlogreader.c:716 xlogreader.c:732
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "具有不正确向前链接%X/%X的记录出现在%X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "具有不正确向前链接%X/%08X的记录出现在%X/%08X"
 
 #: xlogreader.c:768
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "在%X/%X处的记录中的资源管理器数据校验和不正确"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "在%X/%08X处的记录中的资源管理器数据校验和不正确"
 
 #: xlogreader.c:805
 #, c-format
@@ -895,7 +895,7 @@ msgstr "WAL文件来自于不同的数据库系统:页头部中有不正确的
 
 #: xlogreader.c:879
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
 msgstr "在日志段%3$s的偏移量%4$u处有意料之外的pageaddr %1$X/%2$X"
 
 #: xlogreader.c:904
@@ -905,55 +905,55 @@ msgstr "在日志段%3$s的偏移量%4$u处有失序的时间线 ID %1$u(在%2
 
 #: xlogreader.c:1249
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
 msgstr "在%2$X/%3$X处有无序的block_id %1$u"
 
 #: xlogreader.c:1271
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA已被设置,但是在%X/%X处没有包括数据"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA已被设置,但是在%X/%08X处没有包括数据"
 
 #: xlogreader.c:1278
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "BKPBLOCK_HAS_DATA没有被设置,但是在%2$X/%3$X处的数据长度为%1$u"
 
 #: xlogreader.c:1314
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLE已被设置,但是%4$X/%5$X处记录了洞偏移量为%1$u、长度为%2$u、块映像长度为%3$u"
 
 #: xlogreader.c:1330
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLE没有被设置,但是%3$X/%4$X处记录了洞偏移量为%1$u、长度为%2$u"
 
 #: xlogreader.c:1345
 #, c-format
-msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_IS_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr "BKPIMAGE_IS_COMPRESSED已被设置,但是%2$X/%3$X处记录的块映像长度为%1$u"
 
 #: xlogreader.c:1360
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_IS_COMPRESSED set, but block image length is %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLE和BKPIMAGE_IS_COMPRESSED都没有被设置,但是%2$X/%3$X处记录的块映像长度为%1$u"
 
 #: xlogreader.c:1376
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "设置了BKPBLOCK_SAME_REL,但是在%X/%X位置没有记录先前的关系"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "设置了BKPBLOCK_SAME_REL,但是在%X/%08X位置没有记录先前的关系"
 
 #: xlogreader.c:1388
 #, c-format
-msgid "invalid block_id %u at %X/%X"
+msgid "invalid block_id %u at %X/%08X"
 msgstr "%2$X/%3$X处的block_id %1$u无效"
 
 #: xlogreader.c:1475
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "在%X/%X处的记录的长度无效"
+msgid "record with invalid length at %X/%08X"
+msgstr "在%X/%08X处的记录的长度无效"
 
 #: xlogreader.c:1564
 #, c-format
-msgid "invalid compressed image at %X/%X, block %d"
-msgstr "%X/%X处是块%d的无效压缩映像"
+msgid "invalid compressed image at %X/%08X, block %d"
+msgstr "%X/%08X处是块%d的无效压缩映像"
diff --git a/src/bin/pg_rewind/po/zh_TW.po b/src/bin/pg_rewind/po/zh_TW.po
index d4593b94d50..47fe126b1bd 100644
--- a/src/bin/pg_rewind/po/zh_TW.po
+++ b/src/bin/pg_rewind/po/zh_TW.po
@@ -512,28 +512,28 @@ msgstr "配置 WAL 讀取處理器時耗盡記憶體"
 
 #: parsexlog.c:92 parsexlog.c:146
 #, c-format
-msgid "could not read WAL record at %X/%X: %s"
-msgstr "無法讀取先前的 WAL 紀錄,位置 %X/%X: %s"
+msgid "could not read WAL record at %X/%08X: %s"
+msgstr "無法讀取先前的 WAL 紀錄,位置 %X/%08X: %s"
 
 #: parsexlog.c:96 parsexlog.c:149
 #, c-format
-msgid "could not read WAL record at %X/%X"
-msgstr "無法讀取先前的 WAL 紀錄,位置 %X/%X"
+msgid "could not read WAL record at %X/%08X"
+msgstr "無法讀取先前的 WAL 紀錄,位置 %X/%08X"
 
 #: parsexlog.c:108
 #, c-format
-msgid "end pointer %X/%X is not a valid end point; expected %X/%X"
-msgstr "結束指標 %X/%X 不是有效的結束點,預期是 %X/%X"
+msgid "end pointer %X/%08X is not a valid end point; expected %X/%08X"
+msgstr "結束指標 %X/%08X 不是有效的結束點,預期是 %X/%08X"
 
 #: parsexlog.c:212
 #, c-format
-msgid "could not find previous WAL record at %X/%X: %s"
-msgstr "無法找到先前的 WAL 紀錄,位置 %X/%X: %s"
+msgid "could not find previous WAL record at %X/%08X: %s"
+msgstr "無法找到先前的 WAL 紀錄,位置 %X/%08X: %s"
 
 #: parsexlog.c:216
 #, c-format
-msgid "could not find previous WAL record at %X/%X"
-msgstr "無法找到先前的 WAL 紀錄,位置 %X/%X"
+msgid "could not find previous WAL record at %X/%08X"
+msgstr "無法找到先前的 WAL 紀錄,位置 %X/%08X"
 
 # access/transam/slru.c:638 access/transam/xlog.c:1631
 # access/transam/xlog.c:2742 access/transam/xlog.c:2832
@@ -547,8 +547,8 @@ msgstr "無法 seek 檔案 \"%s\": %m"
 
 #: parsexlog.c:440
 #, c-format
-msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
-msgstr "WAL 紀錄修改了關聯,但無法識別記錄類型: lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X"
+msgid "WAL record modifies a relation, but record type is not recognized: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
+msgstr "WAL 紀錄修改了關聯,但無法識別記錄類型: lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X"
 
 #: pg_rewind.c:92
 #, c-format
@@ -733,8 +733,8 @@ msgstr "來源和目標叢集在相同的時間軸上"
 
 #: pg_rewind.c:387
 #, c-format
-msgid "servers diverged at WAL location %X/%X on timeline %u"
-msgstr "伺服器分岐,WAL 位置 %X/%X,時間軸 %u"
+msgid "servers diverged at WAL location %X/%08X on timeline %u"
+msgstr "伺服器分岐,WAL 位置 %X/%08X,時間軸 %u"
 
 #: pg_rewind.c:442
 #, c-format
@@ -743,8 +743,8 @@ msgstr "無需回溯"
 
 #: pg_rewind.c:451
 #, c-format
-msgid "rewinding from last common checkpoint at %X/%X on timeline %u"
-msgstr "從最後的共同檢查點回溯,位置 %X/%X,時間軸 %u"
+msgid "rewinding from last common checkpoint at %X/%08X on timeline %u"
+msgstr "從最後的共同檢查點回溯,位置 %X/%08X,時間軸 %u"
 
 #: pg_rewind.c:461
 #, c-format
@@ -924,19 +924,19 @@ msgstr "時間軸 ID 必須小於子時間軸的 ID。"
 
 #: xlogreader.c:626
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "位於 %X/%X 的記錄 offset 無效: 預期至少 %u,實際為 %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "位於 %X/%08X 的記錄 offset 無效: 預期至少 %u,實際為 %u"
 
 # access/transam/xlog.c:2443
 #: xlogreader.c:635
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%X 要求 contrecord"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08X 要求 contrecord"
 
 #: xlogreader.c:676 xlogreader.c:1119
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "位於 %X/%X 的記錄長度無效: 預期至少 %u,實際為 %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "位於 %X/%08X 的記錄長度無效: 預期至少 %u,實際為 %u"
 
 #: xlogreader.c:705
 #, c-format
@@ -946,45 +946,45 @@ msgstr "嘗試解碼長度為 %u 的記錄時耗盡記憶體"
 # access/transam/xlog.c:2503
 #: xlogreader.c:727
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "位於 %X/%X 的記錄長度 %u 過長"
+msgid "record length %u at %X/%08X too long"
+msgstr "位於 %X/%08X 的記錄長度 %u 過長"
 
 #: xlogreader.c:776
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "位於 %X/%X 沒有 contrecord 標誌"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "位於 %X/%08X 沒有 contrecord 標誌"
 
 #: xlogreader.c:789
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
 msgstr "位於 %3$X/%4$X 的 contrecord 長度 %1$u 無效(預期為 %2$lld)"
 
 # access/transam/xlog.c:2465
 #: xlogreader.c:1127
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "位於 %2$X/%3$X 的無效 block_id %1$u"
 
 # access/transam/xlog.c:2458
 #: xlogreader.c:1140 xlogreader.c:1156
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
 msgstr "位於 %3$X/%4$X 的記錄有不正確的 prev-link %1$X/%2$X"
 
 # access/transam/xlog.c:2269
 #: xlogreader.c:1192
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "位於 %X/%X 的記錄中資源管理員資料檢查碼不正確"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "位於 %X/%08X 的記錄中資源管理員資料檢查碼不正確"
 
 #: xlogreader.c:1226
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WAL 片段 %2$s 中的魔數數字 %1$04X 無效,LSN %3$X/%4$X,位移 %5$u"
 
 #: xlogreader.c:1241 xlogreader.c:1283
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WAL 片段 %2$s 中的資訊位元 %1$04X 無效,LSN %3$X/%4$X,位移 %5$u"
 
 #: xlogreader.c:1257
@@ -1004,63 +1004,63 @@ msgstr "WAL 檔案來自不同的資料庫系統: 資料頁標頭中的 XLOG_BLC
 
 #: xlogreader.c:1303
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "非預期的 pageaddr %X/%X 位於 WAL 片段 %s,LSN %X/%X,位移 %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "非預期的 pageaddr %X/%08X 位於 WAL 片段 %s,LSN %X/%08X,位移 %u"
 
 #: xlogreader.c:1329
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "非依序 timeline ID %u(在 %u 之後)位於 WAL 片段 %s,LSN %X/%X,位移 %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "非依序 timeline ID %u(在 %u 之後)位於 WAL 片段 %s,LSN %X/%08X,位移 %u"
 
 #: xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "非循序 block_id %u 位於 %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "非循序 block_id %u 位於 %X/%08X"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "設定了 BKPBLOCK_HAS_DATA,但在 %X/%X 的沒有包含任何資料"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "設定了 BKPBLOCK_HAS_DATA,但在 %X/%08X 的沒有包含任何資料"
 
 #: xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "未設定 BKPBLOCK_HAS_DATA,但在 %2$X/%3$X 的資料長度為 %1$u"
 
 #: xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
 msgstr "設定了 BKPIMAGE_HAS_HOLE,但在 %4$X/%5$X 有 offset %1$u 長度 %2$u 影像長度 %3$u 的空洞"
 
 #: xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr "未設定 BKPIMAGE_HAS_HOLE,但在 %3$X/%4$X 有 offset %1$u 長度 %2$u 的空洞"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr "設定了 BKPIMAGE_COMPRESSED,但在 %2$X/%3$X 的區塊影像長度為 %1$u"
 
 #: xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
 msgstr "未設定 BKPIMAGE_HAS_HOLE 和 BKPIMAGE_COMPRESSED,但在 %2$X/%3$X 的區塊影像長度為 %1$u"
 
 #: xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "設定了 BKPBLOCK_SAME_REL,但在 %X/%X 沒有先前的 rel"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "設定了 BKPBLOCK_SAME_REL,但在 %X/%08X 沒有先前的 rel"
 
 #: xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
+msgid "invalid block_id %u at %X/%08X"
 msgstr "位於 %2$X/%3$X 的無效 block_id %1$u"
 
 #: xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "位於 %X/%X 的記錄長度無效"
+msgid "record with invalid length at %X/%08X"
+msgstr "位於 %X/%08X 的記錄長度無效"
 
 #: xlogreader.c:1968
 #, c-format
@@ -1069,25 +1069,25 @@ msgstr "在 WAL 記錄中找不到具有 ID %d 的備份區塊"
 
 #: xlogreader.c:2052
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
 msgstr "無法還原指定了無效區塊 %3$d 的影像,位置 %1$X/%2$X"
 
 #: xlogreader.c:2059
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "無法還原處於無效狀態的影像,位置 %X/%X,區塊 %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "無法還原處於無效狀態的影像,位置 %X/%08X,區塊 %d"
 
 #: xlogreader.c:2086 xlogreader.c:2103
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "無法還原用此版本不支援的壓縮方法 %3$s 壓縮的影像,位置 %1$X/%2$X,區塊 %4$d"
 
 #: xlogreader.c:2112
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "無法還原使用未知方法壓縮的影像,位置 %X/%X,區塊 %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "無法還原使用未知方法壓縮的影像,位置 %X/%08X,區塊 %d"
 
 #: xlogreader.c:2120
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "無法解壓縮影像,位置 %X/%X,區塊 %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "無法解壓縮影像,位置 %X/%08X,區塊 %d"
diff --git a/src/bin/pg_rewind/timeline.c b/src/bin/pg_rewind/timeline.c
index 4d9f0d8301b..6784969951f 100644
--- a/src/bin/pg_rewind/timeline.c
+++ b/src/bin/pg_rewind/timeline.c
@@ -66,7 +66,7 @@ rewind_parseTimeLineHistory(char *buffer, TimeLineID targetTLI, int *nentries)
 		if (*ptr == '\0' || *ptr == '#')
 			continue;
 
-		nfields = sscanf(fline, "%u\t%X/%X", &tli, &switchpoint_hi, &switchpoint_lo);
+		nfields = sscanf(fline, "%u\t%X/%08X", &tli, &switchpoint_hi, &switchpoint_lo);
 
 		if (nfields < 1)
 		{
diff --git a/src/bin/pg_verifybackup/pg_verifybackup.c b/src/bin/pg_verifybackup/pg_verifybackup.c
index 48994ef9bc6..5e6c13bb921 100644
--- a/src/bin/pg_verifybackup/pg_verifybackup.c
+++ b/src/bin/pg_verifybackup/pg_verifybackup.c
@@ -1207,7 +1207,7 @@ parse_required_wal(verifier_context *context, char *pg_waldump_path,
 	{
 		char	   *pg_waldump_cmd;
 
-		pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=%X/%X --end=%X/%X\n",
+		pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=%X/%08X --end=%X/%08X\n",
 								  pg_waldump_path, wal_directory, this_wal_range->tli,
 								  LSN_FORMAT_ARGS(this_wal_range->start_lsn),
 								  LSN_FORMAT_ARGS(this_wal_range->end_lsn));
diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c
index 51fb76efc48..13d3ec2f5be 100644
--- a/src/bin/pg_waldump/pg_waldump.c
+++ b/src/bin/pg_waldump/pg_waldump.c
@@ -656,7 +656,7 @@ XLogDumpDisplayStats(XLogDumpConfig *config, XLogStats *stats)
 	}
 	total_len = total_rec_len + total_fpi_len;
 
-	printf("WAL statistics between %X/%X and %X/%X:\n",
+	printf("WAL statistics between %X/%08X and %X/%08X:\n",
 		   LSN_FORMAT_ARGS(stats->startptr), LSN_FORMAT_ARGS(stats->endptr));
 
 	/*
@@ -904,7 +904,7 @@ main(int argc, char **argv)
 				config.filter_by_extended = true;
 				break;
 			case 'e':
-				if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2)
+				if (sscanf(optarg, "%X/%08X", &xlogid, &xrecoff) != 2)
 				{
 					pg_log_error("invalid WAL location: \"%s\"",
 								 optarg);
@@ -1002,7 +1002,7 @@ main(int argc, char **argv)
 				config.filter_by_extended = true;
 				break;
 			case 's':
-				if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2)
+				if (sscanf(optarg, "%X/%08X", &xlogid, &xrecoff) != 2)
 				{
 					pg_log_error("invalid WAL location: \"%s\"",
 								 optarg);
@@ -1140,7 +1140,7 @@ main(int argc, char **argv)
 			XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr);
 		else if (!XLByteInSeg(private.startptr, segno, WalSegSz))
 		{
-			pg_log_error("start WAL location %X/%X is not inside file \"%s\"",
+			pg_log_error("start WAL location %X/%08X is not inside file \"%s\"",
 						 LSN_FORMAT_ARGS(private.startptr),
 						 fname);
 			goto bad_argument;
@@ -1182,7 +1182,7 @@ main(int argc, char **argv)
 		if (!XLByteInSeg(private.endptr, segno, WalSegSz) &&
 			private.endptr != (segno + 1) * WalSegSz)
 		{
-			pg_log_error("end WAL location %X/%X is not inside file \"%s\"",
+			pg_log_error("end WAL location %X/%08X is not inside file \"%s\"",
 						 LSN_FORMAT_ARGS(private.endptr),
 						 argv[argc - 1]);
 			goto bad_argument;
@@ -1214,7 +1214,7 @@ main(int argc, char **argv)
 	first_record = XLogFindNextRecord(xlogreader_state, private.startptr);
 
 	if (first_record == InvalidXLogRecPtr)
-		pg_fatal("could not find a valid record after %X/%X",
+		pg_fatal("could not find a valid record after %X/%08X",
 				 LSN_FORMAT_ARGS(private.startptr));
 
 	/*
@@ -1224,8 +1224,8 @@ main(int argc, char **argv)
 	 */
 	if (first_record != private.startptr &&
 		XLogSegmentOffset(private.startptr, WalSegSz) != 0)
-		pg_log_info(ngettext("first record is after %X/%X, at %X/%X, skipping over %u byte",
-							 "first record is after %X/%X, at %X/%X, skipping over %u bytes",
+		pg_log_info(ngettext("first record is after %X/%08X, at %X/%08X, skipping over %u byte",
+							 "first record is after %X/%08X, at %X/%08X, skipping over %u bytes",
 							 (first_record - private.startptr)),
 					LSN_FORMAT_ARGS(private.startptr),
 					LSN_FORMAT_ARGS(first_record),
@@ -1309,7 +1309,7 @@ main(int argc, char **argv)
 		exit(0);
 
 	if (errormsg)
-		pg_fatal("error in WAL record at %X/%X: %s",
+		pg_fatal("error in WAL record at %X/%08X: %s",
 				 LSN_FORMAT_ARGS(xlogreader_state->ReadRecPtr),
 				 errormsg);
 
diff --git a/src/bin/pg_waldump/po/cs.po b/src/bin/pg_waldump/po/cs.po
index b8b1278500b..c79d055cd06 100644
--- a/src/bin/pg_waldump/po/cs.po
+++ b/src/bin/pg_waldump/po/cs.po
@@ -263,8 +263,8 @@ msgstr "nelze otevřít soubor \"%s\""
 
 #: pg_waldump.c:979
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "počátační WAL pozice %X/%X není v souboru \"%s\""
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "počátační WAL pozice %X/%08X není v souboru \"%s\""
 
 #: pg_waldump.c:1007
 #, c-format
@@ -273,8 +273,8 @@ msgstr "ENDSEG %s je před STARTSEG %s"
 
 #: pg_waldump.c:1022
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "koncová WAL pozice %X/%X není v souboru \"%s\""
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "koncová WAL pozice %X/%08X není v souboru \"%s\""
 
 #: pg_waldump.c:1035
 #, c-format
@@ -288,21 +288,21 @@ msgstr "nedostatek paměti"
 
 #: pg_waldump.c:1055
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "nelze najít platný záznam po %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "nelze najít platný záznam po %X/%08X"
 
 #: pg_waldump.c:1066
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n"
-msgstr[0] "první záznam po %X/%X, na %X/%X, přeskakuji %u bytů\n"
-msgstr[1] "první záznam po %X/%X, na %X/%X, přeskakuji %u byty\n"
-msgstr[2] "první záznam po %X/%X, na %X/%X, přeskakuji %u bytů\n"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte\n"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes\n"
+msgstr[0] "první záznam po %X/%08X, na %X/%08X, přeskakuji %u bytů\n"
+msgstr[1] "první záznam po %X/%08X, na %X/%08X, přeskakuji %u byty\n"
+msgstr[2] "první záznam po %X/%08X, na %X/%08X, přeskakuji %u bytů\n"
 
 #: pg_waldump.c:1117
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "chyba ve WAL záznamu na %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "chyba ve WAL záznamu na %X/%08X: %s"
 
 #: pg_waldump.c:1127
 #, c-format
diff --git a/src/bin/pg_waldump/po/de.po b/src/bin/pg_waldump/po/de.po
index 8c5487e6487..2fa437a6e3e 100644
--- a/src/bin/pg_waldump/po/de.po
+++ b/src/bin/pg_waldump/po/de.po
@@ -407,8 +407,8 @@ msgstr "konnte Datei »%s« nicht öffnen"
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "WAL-Startposition %X/%X ist nicht innerhalb der Datei »%s«"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "WAL-Startposition %X/%08X ist nicht innerhalb der Datei »%s«"
 
 #: pg_waldump.c:1170
 #, c-format
@@ -417,8 +417,8 @@ msgstr "ENDSEG %s kommt vor STARTSEG %s"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "WAL-Endposition %X/%X ist nicht innerhalb der Datei »%s«"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "WAL-Endposition %X/%08X ist nicht innerhalb der Datei »%s«"
 
 #: pg_waldump.c:1197
 #, c-format
@@ -432,20 +432,20 @@ msgstr "Speicher aufgebraucht beim Anlegen eines WAL-Leseprozessors"
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "konnte keinen gültigen Datensatz nach %X/%X finden"
+msgid "could not find a valid record after %X/%08X"
+msgstr "konnte keinen gültigen Datensatz nach %X/%08X finden"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "erster Datensatz kommt nach %X/%X, bei %X/%X, %u Byte wurde übersprungen"
-msgstr[1] "erster Datensatz kommt nach %X/%X, bei %X/%X, %u Bytes wurden übersprungen"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "erster Datensatz kommt nach %X/%08X, bei %X/%08X, %u Byte wurde übersprungen"
+msgstr[1] "erster Datensatz kommt nach %X/%08X, bei %X/%08X, %u Bytes wurden übersprungen"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "Fehler in WAL-Eintrag bei %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "Fehler in WAL-Eintrag bei %X/%08X: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -454,53 +454,53 @@ msgstr "Versuchen Sie »%s --help« für weitere Informationen."
 
 #: xlogreader.c:620
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ungültiger Datensatz-Offset bei %X/%X: mindestens %u erwartet, %u erhalten"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ungültiger Datensatz-Offset bei %X/%08X: mindestens %u erwartet, %u erhalten"
 
 #: xlogreader.c:629
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "Contrecord angefordert von %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "Contrecord angefordert von %X/%08X"
 
 #: xlogreader.c:670 xlogreader.c:1135
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ungültige Datensatzlänge bei %X/%X: mindestens %u erwartet, %u erhalten"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ungültige Datensatzlänge bei %X/%08X: mindestens %u erwartet, %u erhalten"
 
 #: xlogreader.c:759
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "keine Contrecord-Flag bei %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "keine Contrecord-Flag bei %X/%08X"
 
 #: xlogreader.c:772
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "ungültige Contrecord-Länge %u (erwartet %lld) bei %X/%08X"
 
 #: xlogreader.c:1143
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ungültige Resource-Manager-ID %u bei %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ungültige Resource-Manager-ID %u bei %X/%08X"
 
 #: xlogreader.c:1156 xlogreader.c:1172
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "Datensatz mit falschem Prev-Link %X/%X bei %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "Datensatz mit falschem Prev-Link %X/%08X bei %X/%08X"
 
 #: xlogreader.c:1210
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "ungültige Resource-Manager-Datenprüfsumme in Datensatz bei %X/%08X"
 
 #: xlogreader.c:1244
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ungültige magische Zahl %04X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ungültige magische Zahl %04X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1259 xlogreader.c:1301
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ungültige Info-Bits %04X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ungültige Info-Bits %04X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1275
 #, c-format
@@ -519,63 +519,63 @@ msgstr "WAL-Datei ist von einem anderen Datenbanksystem: falsche XLOG_BLCKSZ im
 
 #: xlogreader.c:1321
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "unerwartete Pageaddr %X/%X in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "unerwartete Pageaddr %X/%08X in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1347
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in WAL-Segment %s, LSN %X/%X, Offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "Zeitleisten-ID %u außer der Reihe (nach %u) in WAL-Segment %s, LSN %X/%08X, Offset %u"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u außer der Reihe bei %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u außer der Reihe bei %X/%08X"
 
 #: xlogreader.c:1783
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA gesetzt, aber keine Daten enthalten bei %X/%08X"
 
 #: xlogreader.c:1790
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA nicht gesetzt, aber Datenlänge ist %u bei %X/%08X"
 
 #: xlogreader.c:1826
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE gesetzt, aber Loch Offset %u Länge %u Block-Abbild-Länge %u bei %X/%08X"
 
 #: xlogreader.c:1842
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE nicht gesetzt, aber Loch Offset %u Länge %u bei %X/%08X"
 
 #: xlogreader.c:1856
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge %u bei %X/%08X"
 
 #: xlogreader.c:1871
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "weder BKPIMAGE_HAS_HOLE noch BKPIMAGE_COMPRESSED gesetzt, aber Block-Abbild-Länge ist %u bei %X/%08X"
 
 #: xlogreader.c:1887
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL gesetzt, aber keine vorangehende Relation bei %X/%08X"
 
 #: xlogreader.c:1899
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "ungültige block_id %u bei %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "ungültige block_id %u bei %X/%08X"
 
 #: xlogreader.c:1966
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "Datensatz mit ungültiger Länge bei %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "Datensatz mit ungültiger Länge bei %X/%08X"
 
 #: xlogreader.c:1992
 #, c-format
@@ -584,25 +584,25 @@ msgstr "konnte Backup-Block mit ID %d nicht im WAL-Eintrag finden"
 
 #: xlogreader.c:2076
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "konnte Abbild bei %X/%X mit ungültigem angegebenen Block %d nicht wiederherstellen"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "konnte Abbild bei %X/%08X mit ungültigem angegebenen Block %d nicht wiederherstellen"
 
 #: xlogreader.c:2083
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "konnte Abbild mit ungültigem Zustand bei %X/%X nicht wiederherstellen, Block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "konnte Abbild mit ungültigem Zustand bei %X/%08X nicht wiederherstellen, Block %d"
 
 #: xlogreader.c:2110 xlogreader.c:2127
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "konnte Abbild bei %X/%X nicht wiederherstellen, komprimiert mit %s, nicht unterstützt von dieser Installation, Block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht wiederherstellen, komprimiert mit %s, nicht unterstützt von dieser Installation, Block %d"
 
 #: xlogreader.c:2136
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "konnte Abbild bei %X/%X nicht wiederherstellen, komprimiert mit unbekannter Methode, Block %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht wiederherstellen, komprimiert mit unbekannter Methode, Block %d"
 
 #: xlogreader.c:2144
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "konnte Abbild bei %X/%X nicht dekomprimieren, Block %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "konnte Abbild bei %X/%08X nicht dekomprimieren, Block %d"
diff --git a/src/bin/pg_waldump/po/el.po b/src/bin/pg_waldump/po/el.po
index 5cc4cbd142a..a6c8e728ebd 100644
--- a/src/bin/pg_waldump/po/el.po
+++ b/src/bin/pg_waldump/po/el.po
@@ -358,8 +358,8 @@ msgstr "δεν ήταν δυνατό το άνοιγμα του αρχείου 
 
 #: pg_waldump.c:1139
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "τοποθεσία εκκίνησης WAL %X/%X δεν βρίσκεται μέσα στο αρχείο «%s»"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "τοποθεσία εκκίνησης WAL %X/%08X δεν βρίσκεται μέσα στο αρχείο «%s»"
 
 #: pg_waldump.c:1166
 #, c-format
@@ -368,8 +368,8 @@ msgstr "ENDSEG %s βρίσκεται πριν από STARTSEG %s"
 
 #: pg_waldump.c:1181
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "η τελική τοποθεσία WAL %X/%X δεν βρίσκεται μέσα στο αρχείο «%s»"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "η τελική τοποθεσία WAL %X/%08X δεν βρίσκεται μέσα στο αρχείο «%s»"
 
 #: pg_waldump.c:1193
 #, c-format
@@ -383,20 +383,20 @@ msgstr "η μνήμη δεν επαρκεί για την εκχώρηση επ
 
 #: pg_waldump.c:1213
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "δεν ήταν δυνατή η εύρεση έγκυρης εγγραφής μετά %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "δεν ήταν δυνατή η εύρεση έγκυρης εγγραφής μετά %X/%08X"
 
 #: pg_waldump.c:1223
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n"
-msgstr[0] "πρώτη εγγραφή βρίσκεται μετά από %X/%X, σε %X/%X, παρακάμπτοντας %u byte\n"
-msgstr[1] "πρώτη εγγραφή βρίσκεται μετά από %X/%X, σε %X/%X, παρακάμπτοντας %u bytes\n"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte\n"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes\n"
+msgstr[0] "πρώτη εγγραφή βρίσκεται μετά από %X/%08X, σε %X/%08X, παρακάμπτοντας %u byte\n"
+msgstr[1] "πρώτη εγγραφή βρίσκεται μετά από %X/%08X, σε %X/%08X, παρακάμπτοντας %u bytes\n"
 
 #: pg_waldump.c:1308
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "σφάλμα στην εγγραφή WAL στο %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "σφάλμα στην εγγραφή WAL στο %X/%08X: %s"
 
 #: pg_waldump.c:1317
 #, c-format
@@ -405,18 +405,18 @@ msgstr "Δοκιμάστε «%s --help» για περισσότερες πλη
 
 #: xlogreader.c:626
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "μη έγκυρο μήκος εγγραφής σε %X/%X: ανέμενε τουλάχιστον %u, έλαβε %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "μη έγκυρο μήκος εγγραφής σε %X/%08X: ανέμενε τουλάχιστον %u, έλαβε %u"
 
 #: xlogreader.c:635
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord ζητείται από %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord ζητείται από %X/%08X"
 
 #: xlogreader.c:676 xlogreader.c:1119
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "μη έγκυρο μήκος εγγραφής σε %X/%X: ανένεμενε τουλάχιστον %u, έλαβε %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "μη έγκυρο μήκος εγγραφής σε %X/%08X: ανένεμενε τουλάχιστον %u, έλαβε %u"
 
 #: xlogreader.c:705
 #, c-format
@@ -425,43 +425,43 @@ msgstr "έλλειψη μνήμης κατά την προσπάθεια απο
 
 #: xlogreader.c:727
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "μήκος εγγραφής %u σε %X/%X πολύ μακρύ"
+msgid "record length %u at %X/%08X too long"
+msgstr "μήκος εγγραφής %u σε %X/%08X πολύ μακρύ"
 
 #: xlogreader.c:776
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "δεν υπάρχει σημαία contrecord στο %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "δεν υπάρχει σημαία contrecord στο %X/%08X"
 
 #: xlogreader.c:789
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "μη έγκυρο μήκος contrecord %u (αναμένεται %lld) σε %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "μη έγκυρο μήκος contrecord %u (αναμένεται %lld) σε %X/%08X"
 
 #: xlogreader.c:1127
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "μη έγκυρο ID %u διαχειριστή πόρων στο %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "μη έγκυρο ID %u διαχειριστή πόρων στο %X/%08X"
 
 #: xlogreader.c:1140 xlogreader.c:1156
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "εγγραφή με εσφαλμένο prev-link %X/%X σε %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "εγγραφή με εσφαλμένο prev-link %X/%08X σε %X/%08X"
 
 #: xlogreader.c:1192
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "εσφαλμένο άθροισμα ελέγχου δεδομένων διαχειριστή πόρων σε εγγραφή στο %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "εσφαλμένο άθροισμα ελέγχου δεδομένων διαχειριστή πόρων σε εγγραφή στο %X/%08X"
 
 #: xlogreader.c:1226
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "μη έγκυρος μαγικός αριθμός %04X στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "μη έγκυρος μαγικός αριθμός %04X στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1241 xlogreader.c:1283
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "μη έγκυρα info bits %04X στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "μη έγκυρα info bits %04X στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1257
 #, c-format
@@ -480,63 +480,63 @@ msgstr "WAL αρχείο προέρχεται από διαφορετικό σύ
 
 #: xlogreader.c:1303
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "μη αναμενόμενο pageaddr %X/%X στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "μη αναμενόμενο pageaddr %X/%08X στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1329
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "εκτός ακολουθίας ID χρονογραμμής %u (μετά %u) στο τμήμα WAL %s, LSN %X/%X, μετατόπιση %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "εκτός ακολουθίας ID χρονογραμμής %u (μετά %u) στο τμήμα WAL %s, LSN %X/%08X, μετατόπιση %u"
 
 #: xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "εκτός ακολουθίας block_id %u στο %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "εκτός ακολουθίας block_id %u στο %X/%08X"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA έχει οριστεί, αλλά δεν περιλαμβάνονται δεδομένα σε %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA έχει οριστεί, αλλά δεν περιλαμβάνονται δεδομένα σε %X/%08X"
 
 #: xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA δεν έχει οριστεί, αλλά το μήκος των δεδομένων είναι %u σε %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA δεν έχει οριστεί, αλλά το μήκος των δεδομένων είναι %u σε %X/%08X"
 
 #: xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u μήκος μπλοκ εικόνας %u σε %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u μήκος μπλοκ εικόνας %u σε %X/%08X"
 
 #: xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE δεν έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u σε %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE δεν έχει οριστεί, αλλά οπή με μετατόπιση %u μήκος %u σε %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_IS_COMPRESSED έχει οριστεί, αλλά μέγεθος μπλοκ εικόνας %u σε %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_IS_COMPRESSED έχει οριστεί, αλλά μέγεθος μπλοκ εικόνας %u σε %X/%08X"
 
 #: xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ούτε BKPIMAGE_HAS_HOLE ούτε BKPIMAGE_IS_COMPRESSED είναι ορισμένα, αλλά το μήκος της εικόνας μπλοκ είναι %u στο %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ούτε BKPIMAGE_HAS_HOLE ούτε BKPIMAGE_IS_COMPRESSED είναι ορισμένα, αλλά το μήκος της εικόνας μπλοκ είναι %u στο %X/%08X"
 
 #: xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL είναι ορισμένο, αλλά καμία προηγούμενη rel στο %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL είναι ορισμένο, αλλά καμία προηγούμενη rel στο %X/%08X"
 
 #: xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "μη έγκυρο block_id %u στο %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "μη έγκυρο block_id %u στο %X/%08X"
 
 #: xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "εγγραφή με μη έγκυρο μήκος στο %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "εγγραφή με μη έγκυρο μήκος στο %X/%08X"
 
 #: xlogreader.c:1968
 #, c-format
@@ -545,28 +545,28 @@ msgstr "δεν ήταν δυνατή η εύρεση μπλοκ αντιγράφ
 
 #: xlogreader.c:2052
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%X με ορισμένο άκυρο μπλοκ %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%08X με ορισμένο άκυρο μπλοκ %d"
 
 #: xlogreader.c:2059
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%X με άκυρη κατάσταση, μπλοκ %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας στο %X/%08X με άκυρη κατάσταση, μπλοκ %d"
 
 #: xlogreader.c:2086 xlogreader.c:2103
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%X συμπιεσμένη με %s που δεν υποστηρίζεται από την υλοποίηση, μπλοκ %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%08X συμπιεσμένη με %s που δεν υποστηρίζεται από την υλοποίηση, μπλοκ %d"
 
 #: xlogreader.c:2112
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%X συμπιεσμένη με άγνωστη μέθοδο, μπλοκ %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "δεν ήταν δυνατή η επαναφορά εικόνας σε %X/%08X συμπιεσμένη με άγνωστη μέθοδο, μπλοκ %d"
 
 #: xlogreader.c:2120
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "δεν ήταν δυνατή η αποσυμπιέση εικόνας στο %X/%X, μπλοκ %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "δεν ήταν δυνατή η αποσυμπιέση εικόνας στο %X/%08X, μπλοκ %d"
 
 #~ msgid "Try \"%s --help\" for more information.\n"
 #~ msgstr "Δοκιμάστε «%s --help» για περισσότερες πληροφορίες.\n"
@@ -592,14 +592,14 @@ msgstr "δεν ήταν δυνατή η αποσυμπιέση εικόνας σ
 #~ msgid "fatal: "
 #~ msgstr "κρίσιμο: "
 
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "μη έγκυρη μετατόπιση εγγραφών σε %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "μη έγκυρη μετατόπιση εγγραφών σε %X/%08X"
 
 #~ msgid "invalid timeline specification: \"%s\""
 #~ msgstr "άκυρη προδιαγραφή χρονοδιαγραμμής: «%s»"
 
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "λείπει contrecord στο %X/%X"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "λείπει contrecord στο %X/%08X"
 
 #~ msgid "out of memory"
 #~ msgstr "έλλειψη μνήμης"
diff --git a/src/bin/pg_waldump/po/es.po b/src/bin/pg_waldump/po/es.po
index 18864a7bcd4..a9d242286bb 100644
--- a/src/bin/pg_waldump/po/es.po
+++ b/src/bin/pg_waldump/po/es.po
@@ -409,8 +409,8 @@ msgstr "no se pudo abrir el archivo «%s»"
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "la posición inicial de WAL %X/%X no está en el archivo «%s»"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "la posición inicial de WAL %X/%08X no está en el archivo «%s»"
 
 #: pg_waldump.c:1170
 #, c-format
@@ -419,8 +419,8 @@ msgstr "SEGFINAL %s está antes del SEGINICIAL %s"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "la posición final de WAL %X/%X no está en el archivo «%s»"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "la posición final de WAL %X/%08X no está en el archivo «%s»"
 
 #: pg_waldump.c:1197
 #, c-format
@@ -434,20 +434,20 @@ msgstr "se agotó la memoria mientras se emplazaba un procesador de lectura de W
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "no se pudo encontrar un registro válido después de %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "no se pudo encontrar un registro válido después de %X/%08X"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "el primer registro está ubicado después de %X/%X, en %X/%X, saltándose %u byte"
-msgstr[1] "el primer registro está ubicado después de %X/%X, en %X/%X, saltándose %u bytes"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "el primer registro está ubicado después de %X/%08X, en %X/%08X, saltándose %u byte"
+msgstr[1] "el primer registro está ubicado después de %X/%08X, en %X/%08X, saltándose %u bytes"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "error en registro de WAL en %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "error en registro de WAL en %X/%08X: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -456,53 +456,53 @@ msgstr "Pruebe «%s --help» para mayor información."
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "desplazamiento de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "desplazamiento de registro no válido en %X/%08X: se esperaba al menos %u, se obtuvo %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord solicitado por %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord solicitado por %X/%08X"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "largo de registro no válido en %X/%X: se esperaba al menos %u, se obtuvo %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "largo de registro no válido en %X/%08X: se esperaba al menos %u, se obtuvo %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "no hay bandera de contrecord en %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "no hay bandera de contrecord en %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "largo de contrecord %u no válido (se esperaba %lld) en %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ID de gestor de recursos %u no válido en %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ID de gestor de recursos %u no válido en %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "registro con prev-link %X/%X incorrecto en %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "registro con prev-link %X/%08X incorrecto en %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "suma de verificación de los datos del gestor de recursos incorrecta en el registro en %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "número mágico %04X no válido en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "número mágico %04X no válido en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "info bits %04X no válidos en segment WAL %s, LSN %X/%X, posición %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "info bits %04X no válidos en segment WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -521,63 +521,63 @@ msgstr "archivo WAL es de un sistema de bases de datos distinto: XLOG_BLCKSZ inc
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "pageaddr %X/%X inesperado en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "pageaddr %X/%08X inesperado en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ID de timeline %u fuera de secuencia (después de %u) en segmento WAL %s, LSN %X/%X, posición %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ID de timeline %u fuera de secuencia (después de %u) en segmento WAL %s, LSN %X/%08X, posición %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u fuera de orden en %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u fuera de orden en %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA está definido, pero no hay datos en %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA no está definido, pero el largo de los datos es %u en %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE está definido, pero posición del agujero es %u largo %u largo de imagen %u en %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE no está definido, pero posición del agujero es %u largo %u en %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED definido, pero largo de imagen de bloque es %u en %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED están definidos, pero el largo de imagen de bloque es %u en %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED están definidos, pero el largo de imagen de bloque es %u en %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%X "
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL está definido, pero no hay «rel» anterior en %X/%08X "
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u no válido en %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u no válido en %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "registro con largo no válido en %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "registro con largo no válido en %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -586,25 +586,25 @@ msgstr "no se pudo localizar un bloque de respaldo con ID %d en el registro WAL"
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "no se pudo restaurar la imagen en %X/%X con bloque especificado %d no válido"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "no se pudo restaurar la imagen en %X/%08X con bloque especificado %d no válido"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X con estado no válido, bloque %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X con estado no válido, bloque %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X comprimida con %s que no está soportado por esta instalación, bloque %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X comprimida con %s que no está soportado por esta instalación, bloque %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "no se pudo restaurar la imagen en %X/%X comprimida con un método desconocido, bloque %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "no se pudo restaurar la imagen en %X/%08X comprimida con un método desconocido, bloque %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "no se pudo descomprimir la imagen en %X/%X, bloque %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "no se pudo descomprimir la imagen en %X/%08X, bloque %d"
diff --git a/src/bin/pg_waldump/po/fr.po b/src/bin/pg_waldump/po/fr.po
index f127e5e7aab..b70eea4cfa4 100644
--- a/src/bin/pg_waldump/po/fr.po
+++ b/src/bin/pg_waldump/po/fr.po
@@ -432,8 +432,8 @@ msgstr "n'a pas pu ouvrir le fichier « %s »"
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "l'emplacement de début des journaux de transactions %X/%X n'est pas à l'intérieur du fichier « %s »"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "l'emplacement de début des journaux de transactions %X/%08X n'est pas à l'intérieur du fichier « %s »"
 
 #: pg_waldump.c:1170
 #, c-format
@@ -442,8 +442,8 @@ msgstr "SEG_FIN %s est avant SEG_DÉBUT %s"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "l'emplacement de fin des journaux de transactions %X/%X n'est pas à l'intérieur du fichier « %s »"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "l'emplacement de fin des journaux de transactions %X/%08X n'est pas à l'intérieur du fichier « %s »"
 
 #: pg_waldump.c:1197
 #, c-format
@@ -457,20 +457,20 @@ msgstr "plus de mémoire lors de l'allocation d'un processeur de lecture de jour
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "n'a pas pu trouver un enregistrement valide après %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "n'a pas pu trouver un enregistrement valide après %X/%08X"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "le premier enregistrement se trouve après %X/%X, à %X/%X, ignore %u octet"
-msgstr[1] "le premier enregistrement se trouve après %X/%X, à %X/%X, ignore %u octets"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "le premier enregistrement se trouve après %X/%08X, à %X/%08X, ignore %u octet"
+msgstr[1] "le premier enregistrement se trouve après %X/%08X, à %X/%08X, ignore %u octets"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "erreur dans l'enregistrement des journaux de transactions à %X/%X : %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "erreur dans l'enregistrement des journaux de transactions à %X/%08X : %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -479,55 +479,55 @@ msgstr "Essayez « %s --help » pour plus d'informations."
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "décalage invalide de l'enregistrement à %X/%X : attendait au moins %u, a eu %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "décalage invalide de l'enregistrement à %X/%08X : attendait au moins %u, a eu %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "« contrecord » est requis par %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "« contrecord » est requis par %X/%08X"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "longueur invalide de l'enregistrement à %X/%X : attendait au moins %u, a eu %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "longueur invalide de l'enregistrement à %X/%08X : attendait au moins %u, a eu %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "il n'existe pas de drapeau contrecord à %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "il n'existe pas de drapeau contrecord à %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "longueur %u invalide du contrecord (%lld attendu) à %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "identifiant du gestionnaire de ressources invalide %u à %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "enregistrement avec prev-link %X/%X incorrect à %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "enregistrement avec prev-link %X/%08X incorrect à %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
 msgstr ""
 "somme de contrôle des données du gestionnaire de ressources incorrecte à\n"
-"l'enregistrement %X/%X"
+"l'enregistrement %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "numéro magique invalide %04X dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "numéro magique invalide %04X dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "bits d'information %04X invalides dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "bits d'information %04X invalides dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -546,63 +546,63 @@ msgstr "Le fichier WAL provient d'une instance différente : XLOG_BLCKSZ incorre
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "pageaddr %X/%X inattendue dans le journal de transactions %s, LSN %X/%X, segment %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "pageaddr %X/%08X inattendue dans le journal de transactions %s, LSN %X/%08X, segment %u"
 
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment WAL %s, LSN %X/%X, décalage %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "identifiant timeline %u hors de la séquence (après %u) dans le segment WAL %s, LSN %X/%08X, décalage %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %u désordonné à %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %u désordonné à %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA configuré, mais aucune donnée inclus à %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA non configuré, mais la longueur des données est %u à %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE activé, mais décalage trou %u longueur %u longueur image bloc %u à %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE désactivé, mais décalage trou %u longueur %u à %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ni BKPIMAGE_HAS_HOLE ni BKPIMAGE_COMPRESSED configuré, mais la longueur de l'image du bloc est %u à %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL configuré, mais pas de relation précédente à %X/%08X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u invalide à %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u invalide à %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "enregistrement de longueur invalide à %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "enregistrement de longueur invalide à %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -611,25 +611,25 @@ msgstr "n'a pas pu localiser le bloc de sauvegarde d'ID %d dans l'enregistrement
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "n'a pas pu restaurer l'image à %X/%X avec le bloc invalide %d indiqué"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "n'a pas pu restaurer l'image à %X/%08X avec le bloc invalide %d indiqué"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X avec un état invalide, bloc %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X avec un état invalide, bloc %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X compressé avec %s, qui est non supporté par le serveur, bloc %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X compressé avec %s, qui est non supporté par le serveur, bloc %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "n'a pas pu restaurer l'image à %X/%X compressé avec une méthode inconnue, bloc %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "n'a pas pu restaurer l'image à %X/%08X compressé avec une méthode inconnue, bloc %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "n'a pas pu décompresser l'image à %X/%X, bloc %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "n'a pas pu décompresser l'image à %X/%08X, bloc %d"
diff --git a/src/bin/pg_waldump/po/it.po b/src/bin/pg_waldump/po/it.po
index 61d7bdaa3c1..aa94e9fe77a 100644
--- a/src/bin/pg_waldump/po/it.po
+++ b/src/bin/pg_waldump/po/it.po
@@ -316,8 +316,8 @@ msgstr "impossibile aprire il file \"%s\""
 
 #: pg_waldump.c:1006
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "avviare la posizione WAL %X/%X non è all'interno del file \"%s\""
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "avviare la posizione WAL %X/%08X non è all'interno del file \"%s\""
 
 #: pg_waldump.c:1033
 #, c-format
@@ -326,8 +326,8 @@ msgstr "ENDSEG %s è prima di STARTSEG %s"
 
 #: pg_waldump.c:1048
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "posizione WAL finale %X/%X non è all'interno del file \"%s\""
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "posizione WAL finale %X/%08X non è all'interno del file \"%s\""
 
 #: pg_waldump.c:1060
 #, c-format
@@ -341,20 +341,20 @@ msgstr "memoria insufficiente durante l'allocazione di un processore di lettura
 
 #: pg_waldump.c:1080
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "impossibile trovare un record valido dopo %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "impossibile trovare un record valido dopo %X/%08X"
 
 #: pg_waldump.c:1090
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n"
-msgstr[0] "il primo record è dopo %X/%X, a %X/%X, saltando %u byte\n"
-msgstr[1] "i primi records sono dopo %X/%X, a %X/%X, saltando  %u byte\n"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte\n"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes\n"
+msgstr[0] "il primo record è dopo %X/%08X, a %X/%08X, saltando %u byte\n"
+msgstr[1] "i primi records sono dopo %X/%08X, a %X/%08X, saltando  %u byte\n"
 
 #: pg_waldump.c:1171
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "errore nel record WAL a %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "errore nel record WAL a %X/%08X: %s"
 
 #: pg_waldump.c:1180
 #, c-format
@@ -363,18 +363,18 @@ msgstr "Prova \"%s --help\" per maggiori informazioni."
 
 #: xlogreader.c:625
 #, c-format
-msgid "invalid record offset at %X/%X"
-msgstr "offset del record non valido a %X/%X"
+msgid "invalid record offset at %X/%08X"
+msgstr "offset del record non valido a %X/%08X"
 
 #: xlogreader.c:633
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord richiesto da %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord richiesto da %X/%08X"
 
 #: xlogreader.c:674 xlogreader.c:1121
 #, c-format
-msgid "invalid record length at %X/%X: wanted %u, got %u"
-msgstr "lunghezza del record a %X/%X non valida: atteso %u, ricevuto %u"
+msgid "invalid record length at %X/%08X: wanted %u, got %u"
+msgstr "lunghezza del record a %X/%08X non valida: atteso %u, ricevuto %u"
 
 #: xlogreader.c:703
 #, c-format
@@ -383,38 +383,38 @@ msgstr "memoria insufficiente durante il tentativo di decodificare un record di
 
 #: xlogreader.c:725
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "lunghezza del record %u a %X/%X eccessiva"
+msgid "record length %u at %X/%08X too long"
+msgstr "lunghezza del record %u a %X/%08X eccessiva"
 
 #: xlogreader.c:774
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "non c'è un flag di contrecord a %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "non c'è un flag di contrecord a %X/%08X"
 
 #: xlogreader.c:787
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "lunghezza contrada non valida %u (prevista %lld) a %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "lunghezza contrada non valida %u (prevista %lld) a %X/%08X"
 
 #: xlogreader.c:922
 #, c-format
-msgid "missing contrecord at %X/%X"
-msgstr "missing contrecord at %X/%X"
+msgid "missing contrecord at %X/%08X"
+msgstr "missing contrecord at %X/%08X"
 
 #: xlogreader.c:1129
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "l'ID di gestione risorse %u non è valido a %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "l'ID di gestione risorse %u non è valido a %X/%08X"
 
 #: xlogreader.c:1142 xlogreader.c:1158
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "record con link-precedente %X/%X non corretto a %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "record con link-precedente %X/%08X non corretto a %X/%08X"
 
 #: xlogreader.c:1194
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "checksum dei dati del manager di risorse non corretto nel record a %X/%08X"
 
 #: xlogreader.c:1231
 #, c-format
@@ -443,8 +443,8 @@ msgstr "il file di WAL è di un database diverso: XLOG_BLCKSZ non corretto nell'
 
 #: xlogreader.c:1305
 #, c-format
-msgid "unexpected pageaddr %X/%X in log segment %s, offset %u"
-msgstr "pageaddr inaspettato %X/%X nel segmento di log %s, offset %u"
+msgid "unexpected pageaddr %X/%08X in log segment %s, offset %u"
+msgstr "pageaddr inaspettato %X/%08X nel segmento di log %s, offset %u"
 
 #: xlogreader.c:1330
 #, c-format
@@ -453,53 +453,53 @@ msgstr "l'ID della timeline %u (dopo %u) è fuori sequenza nel segmento di log %
 
 #: xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id fuori sequenza %u a %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id fuori sequenza %u a %X/%08X"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA impostato, ma dati non inclusi a %X/%08X"
 
 #: xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA non impostato, ma la lunghezza dei dati è %u a %X/%08X"
 
 #: xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE impostato, ma offset buco %u lunghezza %u lunghezza dell'immagine del blocco %u a %X/%08X"
 
 #: xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE non impostato, ma offset buco %u lunghezza %u a %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED impostato, ma blocca la lunghezza dell'immagine %u a %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED impostato, ma blocca la lunghezza dell'immagine %u a %X/%08X"
 
 #: xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "né BKPIMAGE_HAS_HOLE né BKPIMAGE_COMPRESSED impostati, ma la lunghezza dell'immagine del blocco è %u a %X/%08X"
 
 #: xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL impostato ma non c'è un rel precedente a %X/%08X"
 
 #: xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "block_id %u non valido a %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "block_id %u non valido a %X/%08X"
 
 #: xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "record con lunghezza non valida a %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "record con lunghezza non valida a %X/%08X"
 
 #: xlogreader.c:1967
 #, c-format
@@ -508,25 +508,25 @@ msgstr "impossibile individuare il blocco di backup con ID %d nel record WAL"
 
 #: xlogreader.c:2051
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "impossibile ripristinare l'immagine in %X/%X con il blocco %d non valido specificato"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "impossibile ripristinare l'immagine in %X/%08X con il blocco %d non valido specificato"
 
 #: xlogreader.c:2058
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X con stato non valido, blocco %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X con stato non valido, blocco %d"
 
 #: xlogreader.c:2085 xlogreader.c:2102
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X compressa con %s non supportata da build, blocco %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X compressa con %s non supportata da build, blocco %d"
 
 #: xlogreader.c:2111
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "impossibile ripristinare l'immagine in %X/%X compressa con metodo sconosciuto, blocco %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "impossibile ripristinare l'immagine in %X/%08X compressa con metodo sconosciuto, blocco %d"
 
 #: xlogreader.c:2119
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "impossibile decomprimere l'immagine in %X/%X, blocco %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "impossibile decomprimere l'immagine in %X/%08X, blocco %d"
diff --git a/src/bin/pg_waldump/po/ja.po b/src/bin/pg_waldump/po/ja.po
index 3b3a5714a33..057c1aa8ec0 100644
--- a/src/bin/pg_waldump/po/ja.po
+++ b/src/bin/pg_waldump/po/ja.po
@@ -362,8 +362,8 @@ msgstr "ファイル\"%s\"を開くことができませんでした"
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "WALの開始位置%X/%Xはファイル\"%s\"の中ではありません"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "WALの開始位置%X/%08Xはファイル\"%s\"の中ではありません"
 
 #: pg_waldump.c:1170
 #, c-format
@@ -372,8 +372,8 @@ msgstr "ENDSEG%sがSTARTSEG %sより前に現れました"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "WALの終了位置%X/%Xはファイル\"%s\"の中ではありません"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "WALの終了位置%X/%08Xはファイル\"%s\"の中ではありません"
 
 #: pg_waldump.c:1197
 #, c-format
@@ -387,19 +387,19 @@ msgstr "WAL読み取り機構でのメモリ割り当てに中にメモリ不足
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%Xの後に有効なレコードが見つかりませんでした"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08Xの後に有効なレコードが見つかりませんでした"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "先頭レコードが%X/%Xの後の%X/%Xの後にあります。%uバイト分をスキップします"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "先頭レコードが%X/%08Xの後の%X/%08Xの後にあります。%uバイト分をスキップします"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "WALレコードの%X/%Xでエラー: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "WALレコードの%X/%08Xでエラー: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -408,18 +408,18 @@ msgstr "詳細は\"%s --help\"を実行してください。"
 
 #: xlogreader.c:626
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "%X/%Xのレコードオフセットが不正です:最低でも%uを期待していましたが、実際は%uでした"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "%X/%08Xのレコードオフセットが不正です:最低でも%uを期待していましたが、実際は%uでした"
 
 #: xlogreader.c:635
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%Xでは継続レコードが必要です"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08Xでは継続レコードが必要です"
 
 #: xlogreader.c:676 xlogreader.c:1119
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "%X/%Xのレコード長が不正です:最低でも%uを期待していましたが、実際は%uでした"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "%X/%08Xのレコード長が不正です:最低でも%uを期待していましたが、実際は%uでした"
 
 #: xlogreader.c:705
 #, c-format
@@ -428,42 +428,42 @@ msgstr "長さ%uのレコードのデコード中のメモリ不足"
 
 #: xlogreader.c:727
 #, c-format
-msgid "record length %u at %X/%X too long"
+msgid "record length %u at %X/%08X too long"
 msgstr "%2$X/%3$Xのレコード長%1$uが大きすぎます"
 
 #: xlogreader.c:776
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%Xでcontrecordフラグがありません"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08Xでcontrecordフラグがありません"
 
 #: xlogreader.c:789
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
 msgstr "%3$X/%4$Xの継続レコードの長さ%1$u(正しくは%2$lld)は不正です"
 
 #: xlogreader.c:1127
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
 msgstr "%2$X/%3$XのリソースマネージャID %1$uは不正です"
 
 #: xlogreader.c:1140 xlogreader.c:1156
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
 msgstr "%3$X/%4$Xのレコードの後方リンク%1$X/%2$Xが不正です"
 
 #: xlogreader.c:1192
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "%X/%Xのレコード内のリソースマネージャデータのチェックサムが不正です"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "%X/%08Xのレコード内のリソースマネージャデータのチェックサムが不正です"
 
 #: xlogreader.c:1226
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%2$s、LSN %3$X/%4$X、オフセット%5$uで不正なマジックナンバー%1$04X"
 
 #: xlogreader.c:1241 xlogreader.c:1283
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント %2$s、LSN %3$X/%4$X、オフセット%5$uで不正な情報ビット列%1$04X"
 
 #: xlogreader.c:1257
@@ -483,63 +483,63 @@ msgstr "WAL ファイルは異なるデータベースシステム由来のも
 
 #: xlogreader.c:1303
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで想定外のページアドレス%1$X/%2$X"
 
 #: xlogreader.c:1329
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WALセグメント%3$s、LSN %4$X/%5$X、オフセット%6$uで異常な順序のタイムラインID %1$u(%2$uの後)"
 
 #: xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "block_id %uが%X/%Xで不正です"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "block_id %uが%X/%08Xで不正です"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%Xにデータがありません"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATAが設定されていますが、%X/%08Xにデータがありません"
 
 #: xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "BKPBLOCK_HAS_DATAが設定されていませんが、%2$X/%3$Xのデータ長は%1$uです"
 
 #: xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEが設定されていますが、%4$X/%5$Xでホールオフセット%1$u、長さ%2$u、ブロックイメージ長%3$uです"
 
 #: xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEが設定されていませんが、%3$X/%4$Xにおけるホールオフセット%1$uの長さが%2$uです"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr "BKPIMAGE_COMPRESSEDが設定されていますが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです"
 
 #: xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
 msgstr "BKPIMAGE_HAS_HOLEもBKPIMAGE_COMPRESSEDも設定されていませんが、%2$X/%3$Xにおいてブロックイメージ長が%1$uです"
 
 #: xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%Xにおいて以前のリレーションがありません"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_RELが設定されていますが、%X/%08Xにおいて以前のリレーションがありません"
 
 #: xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
+msgid "invalid block_id %u at %X/%08X"
 msgstr "%2$X/%3$Xにおけるblock_id %1$uが不正です"
 
 #: xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "%X/%Xのレコードのサイズが不正です"
+msgid "record with invalid length at %X/%08X"
+msgstr "%X/%08Xのレコードのサイズが不正です"
 
 #: xlogreader.c:1968
 #, c-format
@@ -548,25 +548,25 @@ msgstr "WALレコード中のID %dのバックアップブロックを特定で
 
 #: xlogreader.c:2052
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "%X/%Xで不正なブロック%dが指定されているためイメージが復元できませんでした"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "%X/%08Xで不正なブロック%dが指定されているためイメージが復元できませんでした"
 
 #: xlogreader.c:2059
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "%X/%Xでブロック%dのイメージが不正な状態であるため復元できませんでした"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "%X/%08Xでブロック%dのイメージが不正な状態であるため復元できませんでした"
 
 #: xlogreader.c:2086 xlogreader.c:2103
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "%1$X/%2$Xで、ブロック%4$dがこのビルドでサポートされない圧縮方式%3$sで圧縮されているため復元できませんでした"
 
 #: xlogreader.c:2112
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "%X/%Xでブロック%dのイメージが不明な方式で圧縮されているため復元できませんでした"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "%X/%08Xでブロック%dのイメージが不明な方式で圧縮されているため復元できませんでした"
 
 #: xlogreader.c:2120
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "%X/%Xのブロック%dが伸張できませんでした"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "%X/%08Xのブロック%dが伸張できませんでした"
diff --git a/src/bin/pg_waldump/po/ka.po b/src/bin/pg_waldump/po/ka.po
index 5a73cda44f7..c8cef1a61ad 100644
--- a/src/bin/pg_waldump/po/ka.po
+++ b/src/bin/pg_waldump/po/ka.po
@@ -405,8 +405,8 @@ msgstr "შეუძლებელია ფაილის გახსნა:
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "საწყისი WAL მდებარეობა %X/%X ფაილის (\"%s\") შიგნით არაა"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "საწყისი WAL მდებარეობა %X/%08X ფაილის (\"%s\") შიგნით არაა"
 
 #: pg_waldump.c:1170
 #, c-format
@@ -415,8 +415,8 @@ msgstr "ENDSEG %s STARTSEG %s -ის წინაა"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "დასასრულის WAL მდებარეობა %X/%X ფაილის (\"%s\") შიგნით არაა"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "დასასრულის WAL მდებარეობა %X/%08X ფაილის (\"%s\") შიგნით არაა"
 
 #: pg_waldump.c:1197
 #, c-format
@@ -430,20 +430,20 @@ msgstr "არასაკმარისი მეხსიერება WAL-
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%X -ის შემდეგ სწორი ჩანაწერი არ არსებობს"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08X -ის შემდეგ სწორი ჩანაწერი არ არსებობს"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "პირველი ჩანაწერი %X/%X-ის შემდეგაა, მისამართზე %X/%X-სთან. გამოტოვებული იქნება %u ბაიტი"
-msgstr[1] "პირველი ჩანაწერი %X/%X-ის შემდეგაა, მისამართზე %X/%X-სთან. გამოტოვებული იქნება %u ბაიტი"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "პირველი ჩანაწერი %X/%08X-ის შემდეგაა, მისამართზე %X/%08X-სთან. გამოტოვებული იქნება %u ბაიტი"
+msgstr[1] "პირველი ჩანაწერი %X/%08X-ის შემდეგაა, მისამართზე %X/%08X-სთან. გამოტოვებული იქნება %u ბაიტი"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "შეცდომა WAL ჩანაწერში %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "შეცდომა WAL ჩანაწერში %X/%08X: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -452,53 +452,53 @@ msgstr "მეტი ინფორმაციისთვის სცად
 
 #: xlogreader.c:620
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X: მოველოდი მინიმუმ %u, მივიღე %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%08X: მოველოდი მინიმუმ %u, მივიღე %u"
 
 #: xlogreader.c:629
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord მოთხოვნილია %X/%X-ის მიერ"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord მოთხოვნილია %X/%08X-ის მიერ"
 
 #: xlogreader.c:670 xlogreader.c:1135
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ჩანაწერის არასწორი სიგრძე მისამართზე %X/%X: მოველოდი მინიმუმ %u, მივიღე %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ჩანაწერის არასწორი სიგრძე მისამართზე %X/%08X: მოველოდი მინიმუმ %u, მივიღე %u"
 
 #: xlogreader.c:759
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "contrecord ალამი მისამართზე %X/%X არ არსებობს"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "contrecord ალამი მისამართზე %X/%08X არ არსებობს"
 
 #: xlogreader.c:772
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "contrecord -ის არასწორი სიგრძე %u (მოველოდი %lld) მისამართზე %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "contrecord -ის არასწორი სიგრძე %u (მოველოდი %lld) მისამართზე %X/%08X"
 
 #: xlogreader.c:1143
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "რესურსის მმართველის არასწორი ID %u მისამართზე %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "რესურსის მმართველის არასწორი ID %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1156 xlogreader.c:1172
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "ჩანაწერი არასწორი წინა ბმულით %X/%X მისამართზე %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "ჩანაწერი არასწორი წინა ბმულით %X/%08X მისამართზე %X/%08X"
 
 #: xlogreader.c:1210
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "რესურსის მმართველის მონაცემების არასწორი საკონტროლო რიცხვი ჩანაწერში მისამართზე %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "რესურსის მმართველის მონაცემების არასწორი საკონტროლო რიცხვი ჩანაწერში მისამართზე %X/%08X"
 
 #: xlogreader.c:1244
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "არასწორი მაგიური რიცხვი %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "არასწორი მაგიური რიცხვი %04X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1259 xlogreader.c:1301
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "არასწორი საინფორმაციო ბიტები %04X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "არასწორი საინფორმაციო ბიტები %04X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1275
 #, c-format
@@ -517,63 +517,63 @@ msgstr "WAL ფაილი სხვა მონაცემთა ბაზ
 
 #: xlogreader.c:1321
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "მოულოდნელი pageaddr %X/%X ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "მოულოდნელი pageaddr %X/%08X ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1347
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "მიმდევრობის-გარე დროის ხაზის ID %u (%u-ის შემდეგ) ჟურნალის სეგმენტში %s, LSN %X/%X, წანაცვლება %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "მიმდევრობის-გარე დროის ხაზის ID %u (%u-ის შემდეგ) ჟურნალის სეგმენტში %s, LSN %X/%08X, წანაცვლება %u"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "ურიგო block_id %u მისამართზე %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "ურიგო block_id %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1783
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ მონაცემები მისამართზე %X/%X არ არსებობს"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ მონაცემები მისამართზე %X/%08X არ არსებობს"
 
 #: xlogreader.c:1790
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ არსებობს მონაცემები სიგრძით %u მისამართზე %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA დაყენებულია, მაგრამ არსებობს მონაცემები სიგრძით %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1826
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE დაყენებულია, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u ბლოკის ასლის სიგრძე %u მისამართზე %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE დაყენებულია, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u ბლოკის ასლის სიგრძე %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1842
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE დაყენებული არაა, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u მისანართზე %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE დაყენებული არაა, მაგრამ ნახვრეტის წანაცვლება %u სიგრძე %u მისანართზე %X/%08X"
 
 #: xlogreader.c:1856
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED დაყენებულია, მაგრამ ბლოკის ასლის სიგრძეა %u მისამართზე %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED დაყენებულია, მაგრამ ბლოკის ასლის სიგრძეა %u მისამართზე %X/%08X"
 
 #: xlogreader.c:1871
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "არც BKPIMAGE_HAS_HOLE და არც BKPIMAGE_COMPRESSED დაყენებული არაა, მაგრამ ბლოკის ასლის სიგრძე %u-ა, მისამართზე %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "არც BKPIMAGE_HAS_HOLE და არც BKPIMAGE_COMPRESSED დაყენებული არაა, მაგრამ ბლოკის ასლის სიგრძე %u-ა, მისამართზე %X/%08X"
 
 #: xlogreader.c:1887
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL დაყენებულია, მაგრამ წინა მნიშვნელობა მითითებული არაა მისამართზე %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL დაყენებულია, მაგრამ წინა მნიშვნელობა მითითებული არაა მისამართზე %X/%08X"
 
 #: xlogreader.c:1899
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "არასწორი block_id %u %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "არასწორი block_id %u %X/%08X"
 
 #: xlogreader.c:1966
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "ჩანაწერი არასწორი სიგრძით მისამართზე %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "ჩანაწერი არასწორი სიგრძით მისამართზე %X/%08X"
 
 #: xlogreader.c:1992
 #, c-format
@@ -582,28 +582,28 @@ msgstr "შეცდომა WAL ჩანაწერში მარქაფ
 
 #: xlogreader.c:2076
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X, როცა მითითებულია არასწორი ბლოკი %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%08X, როცა მითითებულია არასწორი ბლოკი %d"
 
 #: xlogreader.c:2083
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X არასწორი მდგომარეობით, ბლოკი %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%08X არასწორი მდგომარეობით, ბლოკი %d"
 
 #: xlogreader.c:2110 xlogreader.c:2127
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "%3$s მეთოდით შეკუმშული ასლის აღდგენა მისამართზე %1$X/%2$X, ბლოკი %4$d შეუძლებელია. მხარდაუჭერელია ამ აგების მიერ"
 
 #: xlogreader.c:2136
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%X, შეკუმშულია უცნობი მეთოდით, ბლოკი %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "შეუძლებელია ასლის აღდგენა მისამართზე %X/%08X, შეკუმშულია უცნობი მეთოდით, ბლოკი %d"
 
 #: xlogreader.c:2144
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "შეუძლებელია ასლის გაშლა მისამართზე %X/%X, ბლოკი %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "შეუძლებელია ასლის გაშლა მისამართზე %X/%08X, ბლოკი %d"
 
 #, c-format
 #~ msgid "WAL segment size must be a power of two between 1 MB and 1 GB, but the WAL file \"%s\" header specifies %d byte"
@@ -612,21 +612,21 @@ msgstr "შეუძლებელია ასლის გაშლა მი
 #~ msgstr[1] "WAL სეგმენტის ზომა ორის ხარისხი უნდა იყოს, 1 მბ-სა და 1 გბ-ს სორის, მაგრამ WAL ფაილის \"%s\" თავსართი %d ბაიტზე მიუთითებს"
 
 #, c-format
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "ჩანაწერის არასწორი წანაცვლება მისამართზე %X/%08X"
 
 #, c-format
 #~ msgid "invalid timeline specification: \"%s\""
 #~ msgstr "დროის ხაზის არასწორი სპეციფიკაცია: \"%s\""
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "contrecord მისამართზე %X/%X არ არსებობს"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "contrecord მისამართზე %X/%08X არ არსებობს"
 
 #, c-format
 #~ msgid "out of memory while trying to decode a record of length %u"
 #~ msgstr "%u სიგრძის მქონე ჩანაწერის დეკოდირებისთვის მეხსიერება საკმარისი არაა"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "ჩანაწერის სიგრძე %u მისამართზე %X/%X ძალიან გრძელია"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "ჩანაწერის სიგრძე %u მისამართზე %X/%08X ძალიან გრძელია"
diff --git a/src/bin/pg_waldump/po/ko.po b/src/bin/pg_waldump/po/ko.po
index 25e4c0cfe2c..4332a2b8717 100644
--- a/src/bin/pg_waldump/po/ko.po
+++ b/src/bin/pg_waldump/po/ko.po
@@ -412,8 +412,8 @@ msgstr "\"%s\" 파일을 열 수 없음"
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "%X/%X WAL 시작 위치가 \"%s\" 파일에 없음"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "%X/%08X WAL 시작 위치가 \"%s\" 파일에 없음"
 
 #: pg_waldump.c:1170
 #, c-format
@@ -422,8 +422,8 @@ msgstr "%s ENDSEG가 %s STARTSEG 앞에 있음"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "%X/%X WAL 끝 위치가 \"%s\" 파일에 없음"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "%X/%08X WAL 끝 위치가 \"%s\" 파일에 없음"
 
 #: pg_waldump.c:1197
 #, c-format
@@ -437,19 +437,19 @@ msgstr "WAL 읽기 프로세서를 할당하는 중에 메모리 부족 발생"
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%X 위치 뒤에 올바른 레코드가 없음"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08X 위치 뒤에 올바른 레코드가 없음"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "첫 레코드가 %X/%X 뒤에 있고, (%X/%X), %u 바이트 건너 뜀"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "첫 레코드가 %X/%08X 뒤에 있고, (%X/%08X), %u 바이트 건너 뜀"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "%X/%X 위치에서 WAL 레코드 오류: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "%X/%08X 위치에서 WAL 레코드 오류: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -458,53 +458,53 @@ msgstr "자세한 사항은 \"%s --help\" 명령으로 살펴보세요."
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "잘못된 레코드 오프셋: 위치 %X/%X, 기대값 %u, 실재값 %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "잘못된 레코드 오프셋: 위치 %X/%08X, 기대값 %u, 실재값 %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%X에서 contrecord를 필요로 함"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08X에서 contrecord를 필요로 함"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "잘못된 레코드 길이: 위치 %X/%X, 기대값 %u, 실재값 %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "잘못된 레코드 길이: 위치 %X/%08X, 기대값 %u, 실재값 %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "%X/%X 위치에 contrecord 플래그가 없음"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "%X/%08X 위치에 contrecord 플래그가 없음"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "잘못된 contrecord 길이 %u (기대값: %lld), 위치 %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "잘못된 contrecord 길이 %u (기대값: %lld), 위치 %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "잘못된 자원 관리 ID %u, 위치: %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "잘못된 자원 관리 ID %u, 위치: %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "레코드의 잘못된 프리링크 %X/%X, 해당 레코드 %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "레코드의 잘못된 프리링크 %X/%08X, 해당 레코드 %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%X 레코드"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "잘못된 자원관리자 데이터 체크섬, 위치: %X/%08X 레코드"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "%04X 매직 번호가 잘못됨, WAL 조각 파일 %s, LSN %X/%X, 오프셋 %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "%04X 매직 번호가 잘못됨, WAL 조각 파일 %s, LSN %X/%08X, 오프셋 %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "잘못된 정보 비트 %04X, WAL 조각 파일 %s, LSN %X/%X, 오프셋 %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "잘못된 정보 비트 %04X, WAL 조각 파일 %s, LSN %X/%08X, 오프셋 %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -535,77 +535,77 @@ msgstr ""
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "잘못된 페이지 주소 %X/%X, WAL 조각 파일 %s, LSN %X/%X, 오프셋 %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "잘못된 페이지 주소 %X/%08X, WAL 조각 파일 %s, LSN %X/%08X, 오프셋 %u"
 
 #: xlogreader.c:1346
 #, c-format
 msgid ""
-"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, "
+"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, "
 "offset %u"
 msgstr ""
-"타임라인 범위 벗어남 %u (이전 번호 %u), WAL 조각 파일 %s, LSN %X/%X, 오프셋 "
+"타임라인 범위 벗어남 %u (이전 번호 %u), WAL 조각 파일 %s, LSN %X/%08X, 오프셋 "
 "%u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "%u block_id는 범위를 벗어남, 위치 %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "%u block_id는 범위를 벗어남, 위치 %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%X 에 자료가 없음"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA 지정했지만, %X/%08X 에 자료가 없음"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA 지정 않았지만, %u 길이의 자료가 있음, 위치 %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
 msgid ""
 "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at "
-"%X/%X"
+"%X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE 설정이 되어 있지만, 옵셋: %u, 길이: %u, 블록 이미지 길이: "
-"%u, 대상: %X/%X"
+"%u, 대상: %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr ""
-"BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%X"
+"BKPIMAGE_HAS_HOLE 설정이 안되어 있지만, 옵셋: %u, 길이: %u, 대상: %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr ""
-"BKPIMAGE_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%X"
+"BKPIMAGE_COMPRESSED 설정이 되어 있지만, 블록 이미지 길이: %u, 대상: %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
 msgid ""
 "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image "
-"length is %u at %X/%X"
+"length is %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE, BKPIMAGE_COMPRESSED 지정 안되어 있으나, 블록 이미지 길이"
-"는 %u, 대상: %X/%X"
+"는 %u, 대상: %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%X 에 이전 릴레이션 없음"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL 설정이 되어 있지만, %X/%08X 에 이전 릴레이션 없음"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "잘못된 block_id %u, 위치 %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "잘못된 block_id %u, 위치 %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "잘못된 레코드 길이, 위치 %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "잘못된 레코드 길이, 위치 %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -614,43 +614,43 @@ msgstr "WAL 레코드에서 %d ID의 백업 블록 위치를 바르게 잡을 
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "%X/%X 위치에 이미지를 복원할 수 없음, 해당 %d 블록이 깨졌음"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "%X/%08X 위치에 이미지를 복원할 수 없음, 해당 %d 블록이 깨졌음"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "이미지 복원 실패, 잘못된 상태의 압축 이미지, 위치 %X/%X, 블록 %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "이미지 복원 실패, 잘못된 상태의 압축 이미지, 위치 %X/%08X, 블록 %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with %s not supported by build, "
+"could not restore image at %X/%08X compressed with %s not supported by build, "
 "block %d"
 msgstr ""
-"%X/%X 압축 위치에 이미지 복원할 수 없음, %s 압축을 지원하지 않음, 해당 블록: "
+"%X/%08X 압축 위치에 이미지 복원할 수 없음, %s 압축을 지원하지 않음, 해당 블록: "
 "%d"
 
 #: xlogreader.c:2126
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with unknown method, block %d"
+"could not restore image at %X/%08X compressed with unknown method, block %d"
 msgstr ""
-"%X/%X 압축 위치에 이미지 복원할 수 없음, 알 수 없은 방법, 해당 블록: %d"
+"%X/%08X 압축 위치에 이미지 복원할 수 없음, 알 수 없은 방법, 해당 블록: %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "압축 이미지 풀기 실패, 위치 %X/%X, 블록 %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "압축 이미지 풀기 실패, 위치 %X/%08X, 블록 %d"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "%X/%X 위치에 contrecord 없음"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "%X/%08X 위치에 contrecord 없음"
 
 #, c-format
 #~ msgid "out of memory while trying to decode a record of length %u"
 #~ msgstr "%u 길이 레코드를 디코드 작업을 위한 메모리가 부족함"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "너무 긴 길이(%u)의 레코드가 %X/%X에 있음"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "너무 긴 길이(%u)의 레코드가 %X/%08X에 있음"
diff --git a/src/bin/pg_waldump/po/ru.po b/src/bin/pg_waldump/po/ru.po
index bafe5a3233c..86b60d7d691 100644
--- a/src/bin/pg_waldump/po/ru.po
+++ b/src/bin/pg_waldump/po/ru.po
@@ -441,8 +441,8 @@ msgstr "не удалось открыть файл \"%s\""
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "начальная позиция в WAL %X/%X находится не в файле \"%s\""
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "начальная позиция в WAL %X/%08X находится не в файле \"%s\""
 
 #: pg_waldump.c:1170
 #, c-format
@@ -451,8 +451,8 @@ msgstr "КОНЕЧНЫЙ_СЕГМЕНТ %s меньше, чем НАЧАЛЬНЫ
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "конечная позиция в WAL %X/%X находится не в файле \"%s\""
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "конечная позиция в WAL %X/%08X находится не в файле \"%s\""
 
 #: pg_waldump.c:1197
 #, c-format
@@ -466,24 +466,24 @@ msgstr "не удалось выделить память для чтения WA
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "не удалось найти корректную запись после %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "не удалось найти корректную запись после %X/%08X"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
 msgstr[0] ""
-"первая запись обнаружена после %X/%X, в позиции %X/%X, пропускается %u Б"
+"первая запись обнаружена после %X/%08X, в позиции %X/%08X, пропускается %u Б"
 msgstr[1] ""
-"первая запись обнаружена после %X/%X, в позиции %X/%X, пропускается %u Б"
+"первая запись обнаружена после %X/%08X, в позиции %X/%08X, пропускается %u Б"
 msgstr[2] ""
-"первая запись обнаружена после %X/%X, в позиции %X/%X, пропускается %u Б"
+"первая запись обнаружена после %X/%08X, в позиции %X/%08X, пропускается %u Б"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "ошибка в записи WAL в позиции %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "ошибка в записи WAL в позиции %X/%08X: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -492,59 +492,59 @@ msgstr "Для дополнительной информации попробу
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
 msgstr ""
-"неверное смещение записи в позиции %X/%X: ожидалось минимум %u, получено %u"
+"неверное смещение записи в позиции %X/%08X: ожидалось минимум %u, получено %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "в позиции %X/%X запрошено продолжение записи"
+msgid "contrecord is requested by %X/%08X"
+msgstr "в позиции %X/%08X запрошено продолжение записи"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
 msgstr ""
-"неверная длина записи в позиции %X/%X: ожидалось минимум %u, получено %u"
+"неверная длина записи в позиции %X/%08X: ожидалось минимум %u, получено %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "нет флага contrecord в позиции %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "нет флага contrecord в позиции %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "неверная длина contrecord: %u (ожидалась %lld) в позиции %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "неверный ID менеджера ресурсов %u в позиции %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "неверный ID менеджера ресурсов %u в позиции %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "запись с неверной ссылкой назад %X/%X в позиции %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "запись с неверной ссылкой назад %X/%08X в позиции %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
 msgstr ""
 "некорректная контрольная сумма данных менеджера ресурсов в записи в позиции "
-"%X/%X"
+"%X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr ""
-"неверное магическое число %04X в сегменте WAL %s, LSN %X/%X, смещение %u"
+"неверное магическое число %04X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr ""
-"неверные информационные биты %04X в сегменте WAL %s, LSN %X/%X, смещение %u"
+"неверные информационные биты %04X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -575,53 +575,53 @@ msgstr ""
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "неожиданный pageaddr %X/%X в сегменте WAL %s, LSN %X/%X, смещение %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "неожиданный pageaddr %X/%08X в сегменте WAL %s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1346
 #, c-format
 msgid ""
-"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, "
+"out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, "
 "offset %u"
 msgstr ""
 "нарушение последовательности ID линии времени %u (после %u) в сегменте WAL "
-"%s, LSN %X/%X, смещение %u"
+"%s, LSN %X/%08X, смещение %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "идентификатор блока %u идёт не по порядку в позиции %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%X нет"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA установлен, но данных в позиции %X/%08X нет"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr ""
-"BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%X"
+"BKPBLOCK_HAS_DATA не установлен, но длина данных равна %u в позиции %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
 msgid ""
 "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at "
-"%X/%X"
+"%X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE установлен, но для пропуска заданы смещение %u и длина %u "
-"при длине образа блока %u в позиции %X/%X"
+"при длине образа блока %u в позиции %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_HAS_HOLE не установлен, но для пропуска заданы смещение %u и длина "
-"%u в позиции %X/%X"
+"%u в позиции %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr ""
 "BKPIMAGE_COMPRESSED установлен, но длина образа блока равна %u в позиции %X/"
 "%X"
@@ -630,27 +630,27 @@ msgstr ""
 #, c-format
 msgid ""
 "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image "
-"length is %u at %X/%X"
+"length is %u at %X/%08X"
 msgstr ""
 "ни BKPIMAGE_HAS_HOLE, ни BKPIMAGE_COMPRESSED не установлены, но длина образа "
-"блока равна %u в позиции %X/%X"
+"блока равна %u в позиции %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
 msgstr ""
 "BKPBLOCK_SAME_REL установлен, но предыдущее значение не задано в позиции %X/"
 "%X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "неверный идентификатор блока %u в позиции %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "неверный идентификатор блока %u в позиции %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "запись с неверной длиной в позиции %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "запись с неверной длиной в позиции %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -659,57 +659,57 @@ msgstr "не удалось найти копию блока с ID %d в зап
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X с указанным неверным блоком %d"
+"не удалось восстановить образ в позиции %X/%08X с указанным неверным блоком %d"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X с неверным состоянием, блок %d"
+"не удалось восстановить образ в позиции %X/%08X с неверным состоянием, блок %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with %s not supported by build, "
+"could not restore image at %X/%08X compressed with %s not supported by build, "
 "block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X, сжатый методом %s, который не "
+"не удалось восстановить образ в позиции %X/%08X, сжатый методом %s, который не "
 "поддерживается этой сборкой, блок %d"
 
 #: xlogreader.c:2126
 #, c-format
 msgid ""
-"could not restore image at %X/%X compressed with unknown method, block %d"
+"could not restore image at %X/%08X compressed with unknown method, block %d"
 msgstr ""
-"не удалось восстановить образ в позиции %X/%X, сжатый неизвестным методом, "
+"не удалось восстановить образ в позиции %X/%08X, сжатый неизвестным методом, "
 "блок %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "не удалось развернуть образ в позиции %X/%X, блок %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "не удалось развернуть образ в позиции %X/%08X, блок %d"
 
 #, c-format
 #~ msgid "out of memory while trying to decode a record of length %u"
 #~ msgstr "не удалось выделить память для декодирования записи длины %u"
 
 #, c-format
-#~ msgid "record length %u at %X/%X too long"
-#~ msgstr "длина записи %u в позиции %X/%X слишком велика"
+#~ msgid "record length %u at %X/%08X too long"
+#~ msgstr "длина записи %u в позиции %X/%08X слишком велика"
 
 #, c-format
 #~ msgid "invalid timeline specification: \"%s\""
 #~ msgstr "неверное указание линии времени: \"%s\""
 
 #, c-format
-#~ msgid "invalid record offset at %X/%X"
-#~ msgstr "неверное смещение записи: %X/%X"
+#~ msgid "invalid record offset at %X/%08X"
+#~ msgstr "неверное смещение записи: %X/%08X"
 
 #, c-format
-#~ msgid "missing contrecord at %X/%X"
-#~ msgstr "нет записи contrecord в %X/%X"
+#~ msgid "missing contrecord at %X/%08X"
+#~ msgstr "нет записи contrecord в %X/%08X"
 
 #~ msgid ""
 #~ "\n"
diff --git a/src/bin/pg_waldump/po/sv.po b/src/bin/pg_waldump/po/sv.po
index 24173636e1a..49e66b9c986 100644
--- a/src/bin/pg_waldump/po/sv.po
+++ b/src/bin/pg_waldump/po/sv.po
@@ -406,8 +406,8 @@ msgstr "kunde inte öppna filen \"%s\""
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "start-WAL-position %X/%X är inte i filen \"%s\""
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "start-WAL-position %X/%08X är inte i filen \"%s\""
 
 #: pg_waldump.c:1170
 #, c-format
@@ -416,8 +416,8 @@ msgstr "SLUTSEG %s är före STARTSEG %s"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "slut-WAL-position %X/%X är inte i filen \"%s\""
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "slut-WAL-position %X/%08X är inte i filen \"%s\""
 
 #: pg_waldump.c:1197
 #, c-format
@@ -431,20 +431,20 @@ msgstr "slut på minne vid allokering av en WAL-läs-processor"
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "kunde inte hitta en giltig post efter %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "kunde inte hitta en giltig post efter %X/%08X"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "första posten är efter %X/%X, vid %X/%X, hoppar över %u byte"
-msgstr[1] "första posten är efter %X/%X, vid %X/%X, hoppar över %u byte"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "första posten är efter %X/%08X, vid %X/%08X, hoppar över %u byte"
+msgstr[1] "första posten är efter %X/%08X, vid %X/%08X, hoppar över %u byte"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "fel i WAL-post vid %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "fel i WAL-post vid %X/%08X: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -453,53 +453,53 @@ msgstr "Försök med \"%s --help\" för mer information."
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "ogiltig postoffset vid %X/%X: förväntade minst %u, fick %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "ogiltig postoffset vid %X/%08X: förväntade minst %u, fick %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "contrecord är begärd vid %X/%X"
+msgid "contrecord is requested by %X/%08X"
+msgstr "contrecord är begärd vid %X/%08X"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "ogiltig postlängd vid %X/%X: förväntade minst %u, fick %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "ogiltig postlängd vid %X/%08X: förväntade minst %u, fick %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "det finns ingen contrecord-flagga vid %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "det finns ingen contrecord-flagga vid %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "ogiltig contrecord-längd %u (förväntade %lld) vid %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "ogiltig contrecord-längd %u (förväntade %lld) vid %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "ogiltigt resurshanterar-ID %u vid %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "ogiltigt resurshanterar-ID %u vid %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "post med inkorrekt prev-link %X/%X vid %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "post med inkorrekt prev-link %X/%08X vid %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "felaktig resurshanterardatakontrollsumma i post vid %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "felaktigt magiskt nummer %04X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "felaktigt magiskt nummer %04X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "ogiltiga infobitar %04X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "ogiltiga infobitar %04X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -518,64 +518,64 @@ msgstr "WAL-fil är från ett annat databassystem: inkorrekt XLOG_BLCKSZ i sidhu
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "oväntad sidadress %X/%X i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "oväntad sidadress %X/%08X i WAL-segment %s, LSN %X/%08X, offset %u"
 
 # FIXME
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "\"ej i sekvens\"-fel på tidslinje-ID %u (efter %u) i WAL-segment %s, LSN %X/%X, offset %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "\"ej i sekvens\"-fel på tidslinje-ID %u (efter %u) i WAL-segment %s, LSN %X/%08X, offset %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "\"ej i sekvens\"-block_id %u vid %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "\"ej i sekvens\"-block_id %u vid %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA är satt men ingen data inkluderad vid %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA är ej satt men datalängden är %u vid %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE är satt men håloffset %u längd %u blockavbildlängd %u vid %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE är inte satt men håloffset %u längd %u vid %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED är satt men blockavbildlängd %u vid %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED är satt men blockavbildlängd %u vid %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_COMPRESSED är satt men blockavbildlängd är %u vid %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "varken BKPIMAGE_HAS_HOLE eller BKPIMAGE_COMPRESSED är satt men blockavbildlängd är %u vid %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL är satt men ingen tidigare rel vid %X/%08X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "ogiltig block_id %u vid %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "ogiltig block_id %u vid %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "post med ogiltig längd vid %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "post med ogiltig längd vid %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -584,25 +584,25 @@ msgstr "kunde inte hitta backup-block med ID %d i WAL-post"
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt block %d angivet"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "kunde inte återställa avbild vid %X/%08X med ogiltigt block %d angivet"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X med ogiltigt state, block %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X med ogiltigt state, block %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med %s stöds inte av bygget, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X, komprimerad med %s stöds inte av bygget, block %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "kunde inte återställa avbild vid %X/%X, komprimerad med okänd metod, block %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "kunde inte återställa avbild vid %X/%08X, komprimerad med okänd metod, block %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "kunde inte packa upp avbild vid %X/%X, block %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "kunde inte packa upp avbild vid %X/%08X, block %d"
diff --git a/src/bin/pg_waldump/po/tr.po b/src/bin/pg_waldump/po/tr.po
index e572031f870..7f97b88055c 100644
--- a/src/bin/pg_waldump/po/tr.po
+++ b/src/bin/pg_waldump/po/tr.po
@@ -254,8 +254,8 @@ msgstr "\"%s\" dosyası açılamadı"
 
 #: pg_waldump.c:1033
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "başlama WAL konumu %X/%X \"%s\" dosyası içinde yok"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "başlama WAL konumu %X/%08X \"%s\" dosyası içinde yok"
 
 #: pg_waldump.c:1061
 #, c-format
@@ -264,8 +264,8 @@ msgstr "BİTİŞSEG %s BAŞLAMASEG %s den önce"
 
 #: pg_waldump.c:1076
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "bitiş WAL konumu %X/%X \"%s\" dosyası içinde yok"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "bitiş WAL konumu %X/%08X \"%s\" dosyası içinde yok"
 
 #: pg_waldump.c:1089
 #, c-format
@@ -279,20 +279,20 @@ msgstr "yetersiz bellek"
 
 #: pg_waldump.c:1105
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%X den sonra geçerli bir kayıt bulunamadı"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08X den sonra geçerli bir kayıt bulunamadı"
 
 #: pg_waldump.c:1116
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n"
-msgstr[0] "ilk kayıt %X/%X 'den sonra, %X/%X 'dedir, %u bayt atlanıyor\n"
-msgstr[1] "ilk kayıt %X/%X 'den sonra, %X/%X 'dedir, %u bayt atlanıyor\n"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte\n"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes\n"
+msgstr[0] "ilk kayıt %X/%08X 'den sonra, %X/%08X 'dedir, %u bayt atlanıyor\n"
+msgstr[1] "ilk kayıt %X/%08X 'den sonra, %X/%08X 'dedir, %u bayt atlanıyor\n"
 
 #: pg_waldump.c:1167
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "%X/%X de WAL kaydında hata: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "%X/%08X de WAL kaydında hata: %s"
 
 #: pg_waldump.c:1177
 #, c-format
diff --git a/src/bin/pg_waldump/po/uk.po b/src/bin/pg_waldump/po/uk.po
index 09da6eebce3..dbdf7e9246f 100644
--- a/src/bin/pg_waldump/po/uk.po
+++ b/src/bin/pg_waldump/po/uk.po
@@ -387,8 +387,8 @@ msgstr "не вдалося відкрити файл \"%s\""
 
 #: pg_waldump.c:1143
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "початкове розташування WAL %X/%X не всередині файлу \"%s\""
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "початкове розташування WAL %X/%08X не всередині файлу \"%s\""
 
 #: pg_waldump.c:1170
 #, c-format
@@ -397,8 +397,8 @@ msgstr "ENDSEG %s перед STARTSEG %s"
 
 #: pg_waldump.c:1185
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "кінцеве розташування WAL %X/%X не всередині файлу \"%s\""
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "кінцеве розташування WAL %X/%08X не всередині файлу \"%s\""
 
 #: pg_waldump.c:1197
 #, c-format
@@ -412,22 +412,22 @@ msgstr "недостатньо пам'яті під час виділення о
 
 #: pg_waldump.c:1217
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "не вдалося знайти припустимий запис після %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "не вдалося знайти припустимий запис після %X/%08X"
 
 #: pg_waldump.c:1227
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes"
-msgstr[0] "перший запис після %X/%X, за адресою %X/%X, пропускаючи байт %u"
-msgstr[1] "перший запис після %X/%X, за адресою %X/%X, пропускаючи %u байти"
-msgstr[2] "перший запис після %X/%X, за адресою %X/%X, пропускаючи %u байти"
-msgstr[3] "перший запис після %X/%X, за адресою %X/%X, пропускаючи %u байти"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes"
+msgstr[0] "перший запис після %X/%08X, за адресою %X/%08X, пропускаючи байт %u"
+msgstr[1] "перший запис після %X/%08X, за адресою %X/%08X, пропускаючи %u байти"
+msgstr[2] "перший запис після %X/%08X, за адресою %X/%08X, пропускаючи %u байти"
+msgstr[3] "перший запис після %X/%08X, за адресою %X/%08X, пропускаючи %u байти"
 
 #: pg_waldump.c:1312
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "помилка у записі WAL у %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "помилка у записі WAL у %X/%08X: %s"
 
 #: pg_waldump.c:1321
 #, c-format
@@ -436,53 +436,53 @@ msgstr "Спробуйте \"%s --help\" для додаткової інфор
 
 #: xlogreader.c:619
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "неприпустиме зміщення запису в %X/%X: очікувалось хоча б %u, отримано %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "неприпустиме зміщення запису в %X/%08X: очікувалось хоча б %u, отримано %u"
 
 #: xlogreader.c:628
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "по зсуву %X/%X запитано продовження запису"
+msgid "contrecord is requested by %X/%08X"
+msgstr "по зсуву %X/%08X запитано продовження запису"
 
 #: xlogreader.c:669 xlogreader.c:1134
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "неприпустима довжина запису %X/%X: очікувалась мінімум %u, отримано %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "неприпустима довжина запису %X/%08X: очікувалась мінімум %u, отримано %u"
 
 #: xlogreader.c:758
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "немає прапорця contrecord в позиції %X/%X"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "немає прапорця contrecord в позиції %X/%08X"
 
 #: xlogreader.c:771
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
-msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
+msgstr "неприпустима довжина contrecord %u (очікувалось %lld) на %X/%08X"
 
 #: xlogreader.c:1142
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "невірний ID менеджера ресурсів %u в %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "невірний ID менеджера ресурсів %u в %X/%08X"
 
 #: xlogreader.c:1155 xlogreader.c:1171
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
-msgstr "запис з неправильним попереднім посиланням %X/%X на %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
+msgstr "запис з неправильним попереднім посиланням %X/%08X на %X/%08X"
 
 #: xlogreader.c:1209
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%X"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "некоректна контрольна сума даних менеджера ресурсів у запису по зсуву %X/%08X"
 
 #: xlogreader.c:1243
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "невірне магічне число %04X в сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "невірне магічне число %04X в сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: xlogreader.c:1258 xlogreader.c:1300
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "невірні інформаційні біти %04X в сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "невірні інформаційні біти %04X в сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: xlogreader.c:1274
 #, c-format
@@ -501,63 +501,63 @@ msgstr "Файл WAL належить іншій системі баз дани
 
 #: xlogreader.c:1320
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "неочікуваний pageaddr %X/%X у сегменті WAL %s, LSN %X/%X, зміщення %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "неочікуваний pageaddr %X/%08X у сегменті WAL %s, LSN %X/%08X, зміщення %u"
 
 #: xlogreader.c:1346
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "порушення послідовності ID лінії часу %u (після %u) у сегменті WAL %s, LSN %X/%X, зсув %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "порушення послідовності ID лінії часу %u (після %u) у сегменті WAL %s, LSN %X/%08X, зсув %u"
 
 #: xlogreader.c:1749
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "ідентифікатор блока %u out-of-order в позиції %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "ідентифікатор блока %u out-of-order в позиції %X/%08X"
 
 #: xlogreader.c:1773
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%X"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA встановлений, але немає даних в позиції %X/%08X"
 
 #: xlogreader.c:1780
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
-msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
+msgstr "BKPBLOCK_HAS_DATA встановлений, але довжина даних дорівнює %u в позиції %X/%08X"
 
 #: xlogreader.c:1816
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE встановлений, але для пропуску задані: зсув %u, довжина %u, при довжині образу блока %u в позиції %X/%08X"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
-msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
+msgstr "BKPIMAGE_HAS_HOLE не встановлений, але для пропуску задані: зсув %u, довжина %u в позиції %X/%08X"
 
 #: xlogreader.c:1846
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
-msgstr "BKPIMAGE_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
+msgstr "BKPIMAGE_COMPRESSED встановлений, але довжина образу блока дорівнює %u в позиції %X/%08X"
 
 #: xlogreader.c:1861
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
-msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_COMPRESSED не встановлені, але довжина образу блока дорівнює %u в позиції %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
+msgstr "ні BKPIMAGE_HAS_HOLE, ні BKPIMAGE_COMPRESSED не встановлені, але довжина образу блока дорівнює %u в позиції %X/%08X"
 
 #: xlogreader.c:1877
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%X"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "BKPBLOCK_SAME_REL встановлений, але попереднє значення не задано в позиції %X/%08X"
 
 #: xlogreader.c:1889
 #, c-format
-msgid "invalid block_id %u at %X/%X"
-msgstr "невірний ідентифікатор блоку %u в позиції %X/%X"
+msgid "invalid block_id %u at %X/%08X"
+msgstr "невірний ідентифікатор блоку %u в позиції %X/%08X"
 
 #: xlogreader.c:1956
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "запис з невірною довжиною на %X/%X"
+msgid "record with invalid length at %X/%08X"
+msgstr "запис з невірною довжиною на %X/%08X"
 
 #: xlogreader.c:1982
 #, c-format
@@ -566,26 +566,26 @@ msgstr "не вдалося знайти блок резервної копії
 
 #: xlogreader.c:2066
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
-msgstr "не вдалося відновити зображення %X/%X з недійсним вказаним блоком %d"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
+msgstr "не вдалося відновити зображення %X/%08X з недійсним вказаним блоком %d"
 
 #: xlogreader.c:2073
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "не вдалося відновити зображення %X/%X з недійсним станом, блок %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "не вдалося відновити зображення %X/%08X з недійсним станом, блок %d"
 
 #: xlogreader.c:2100 xlogreader.c:2117
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
-msgstr "не вдалося відновити зображення в %X/%X, стиснуте %s, не підтримується збіркою, блок %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
+msgstr "не вдалося відновити зображення в %X/%08X, стиснуте %s, не підтримується збіркою, блок %d"
 
 #: xlogreader.c:2126
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "не вдалося відновити зображення %X/%X стиснуте з невідомим методом, блок %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "не вдалося відновити зображення %X/%08X стиснуте з невідомим методом, блок %d"
 
 #: xlogreader.c:2134
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "не вдалося розпакувати зображення на %X/%X, блок %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "не вдалося розпакувати зображення на %X/%08X, блок %d"
 
diff --git a/src/bin/pg_waldump/po/vi.po b/src/bin/pg_waldump/po/vi.po
index 037d9955842..6d7d957bb29 100644
--- a/src/bin/pg_waldump/po/vi.po
+++ b/src/bin/pg_waldump/po/vi.po
@@ -261,8 +261,8 @@ msgstr "không thể mở tệp \"%s\""
 
 #: pg_waldump.c:1044
 #, c-format
-msgid "%s: start WAL location %X/%X is not inside file \"%s\"\n"
-msgstr "%s: vị trí bắt đầu WAL %X/%X không nằm trong tệp \"%s\"\n"
+msgid "%s: start WAL location %X/%08X is not inside file \"%s\"\n"
+msgstr "%s: vị trí bắt đầu WAL %X/%08X không nằm trong tệp \"%s\"\n"
 
 #: pg_waldump.c:1073
 #, c-format
@@ -271,9 +271,9 @@ msgstr "ENDSEG %s ở trước STARTSEG %s"
 
 #: pg_waldump.c:1089
 #, c-format
-msgid "%s: end WAL location %X/%X is not inside file \"%s\"\n"
+msgid "%s: end WAL location %X/%08X is not inside file \"%s\"\n"
 msgstr ""
-"%s: vị trí kết thúc WAL %X/%X không nằm trong tệp \"%s\"\n"
+"%s: vị trí kết thúc WAL %X/%08X không nằm trong tệp \"%s\"\n"
 "\n"
 
 #: pg_waldump.c:1103
@@ -288,20 +288,20 @@ msgstr "hết bộ nhớ"
 
 #: pg_waldump.c:1119
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "không thể tìm thấy bản ghi hợp lệ sau %X/%X"
+msgid "could not find a valid record after %X/%08X"
+msgstr "không thể tìm thấy bản ghi hợp lệ sau %X/%08X"
 
 #: pg_waldump.c:1130
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte\n"
 msgid_plural ""
-"first record is after %X/%X, at %X/%X, skipping over %u bytes\n"
-msgstr[0] "bản ghi đầu tiên sau %X/%X, at %X/%X, bỏ qua %u bytes\n"
+"first record is after %X/%08X, at %X/%08X, skipping over %u bytes\n"
+msgstr[0] "bản ghi đầu tiên sau %X/%08X, at %X/%08X, bỏ qua %u bytes\n"
 
 #: pg_waldump.c:1181
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "lỗi trong bản ghi WAL ở %X/%X: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "lỗi trong bản ghi WAL ở %X/%08X: %s"
 
 #: pg_waldump.c:1191
 #, c-format
diff --git a/src/bin/pg_waldump/po/zh_CN.po b/src/bin/pg_waldump/po/zh_CN.po
index 5aeb92882f7..00bbb50fac7 100644
--- a/src/bin/pg_waldump/po/zh_CN.po
+++ b/src/bin/pg_waldump/po/zh_CN.po
@@ -261,8 +261,8 @@ msgstr "could not open file\"%s\""
 
 #: pg_waldump.c:979
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "WAL开始位置%X/%X不在文件\"%s\"中"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "WAL开始位置%X/%08X不在文件\"%s\"中"
 
 #: pg_waldump.c:1007
 #, c-format
@@ -271,8 +271,8 @@ msgstr "ENDSEG %s在STARTSEG %s之前"
 
 #: pg_waldump.c:1022
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "WAL结束位置%X/%X不在文件\"%s\"中"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "WAL结束位置%X/%08X不在文件\"%s\"中"
 
 #: pg_waldump.c:1035
 #, c-format
@@ -286,20 +286,20 @@ msgstr "内存用尽"
 
 #: pg_waldump.c:1055
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "在%X/%X之后找不到有效记录"
+msgid "could not find a valid record after %X/%08X"
+msgstr "在%X/%08X之后找不到有效记录"
 
 #: pg_waldump.c:1066
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n"
-msgstr[0] "第一条记录在%X/%X之后,位于%X/%X,跳过了%u个字节\n"
-msgstr[1] "第一条记录在%X/%X之后,位于%X/%X,跳过了%u个字节\n"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte\n"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes\n"
+msgstr[0] "第一条记录在%X/%08X之后,位于%X/%08X,跳过了%u个字节\n"
+msgstr[1] "第一条记录在%X/%08X之后,位于%X/%08X,跳过了%u个字节\n"
 
 #: pg_waldump.c:1117
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "在WAL记录中的%X/%X处错误为: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "在WAL记录中的%X/%08X处错误为: %s"
 
 #: pg_waldump.c:1127
 #, c-format
diff --git a/src/bin/pg_waldump/po/zh_TW.po b/src/bin/pg_waldump/po/zh_TW.po
index 5eb35fb7019..9df1fc2028b 100644
--- a/src/bin/pg_waldump/po/zh_TW.po
+++ b/src/bin/pg_waldump/po/zh_TW.po
@@ -375,8 +375,8 @@ msgstr "無法開啟檔案 \"%s\""
 
 #: pg_waldump.c:1139
 #, c-format
-msgid "start WAL location %X/%X is not inside file \"%s\""
-msgstr "WAL 開始位置 %X/%X 不在檔案 \"%s\" 內"
+msgid "start WAL location %X/%08X is not inside file \"%s\""
+msgstr "WAL 開始位置 %X/%08X 不在檔案 \"%s\" 內"
 
 #: pg_waldump.c:1166
 #, c-format
@@ -385,8 +385,8 @@ msgstr "ENDSEG %s 在 STARTSEG %s 之前"
 
 #: pg_waldump.c:1181
 #, c-format
-msgid "end WAL location %X/%X is not inside file \"%s\""
-msgstr "WAL 結束位置 %X/%X 不在檔案 \"%s\" 內"
+msgid "end WAL location %X/%08X is not inside file \"%s\""
+msgstr "WAL 結束位置 %X/%08X 不在檔案 \"%s\" 內"
 
 #: pg_waldump.c:1193
 #, c-format
@@ -400,19 +400,19 @@ msgstr "配置 WAL 讀取處理器時耗盡記憶體"
 
 #: pg_waldump.c:1213
 #, c-format
-msgid "could not find a valid record after %X/%X"
-msgstr "%X/%X 之後找不到有效的記錄"
+msgid "could not find a valid record after %X/%08X"
+msgstr "%X/%08X 之後找不到有效的記錄"
 
 #: pg_waldump.c:1223
 #, c-format
-msgid "first record is after %X/%X, at %X/%X, skipping over %u byte\n"
-msgid_plural "first record is after %X/%X, at %X/%X, skipping over %u bytes\n"
-msgstr[0] "第一筆記錄在 %X/%X 之後,位於 %X/%X,跳過 %u 個位元組\n"
+msgid "first record is after %X/%08X, at %X/%08X, skipping over %u byte\n"
+msgid_plural "first record is after %X/%08X, at %X/%08X, skipping over %u bytes\n"
+msgstr[0] "第一筆記錄在 %X/%08X 之後,位於 %X/%08X,跳過 %u 個位元組\n"
 
 #: pg_waldump.c:1308
 #, c-format
-msgid "error in WAL record at %X/%X: %s"
-msgstr "WAL 記錄在 %X/%X 出現錯誤: %s"
+msgid "error in WAL record at %X/%08X: %s"
+msgstr "WAL 記錄在 %X/%08X 出現錯誤: %s"
 
 # tcop/postgres.c:2636 tcop/postgres.c:2652
 #: pg_waldump.c:1317
@@ -422,19 +422,19 @@ msgstr "用 \"%s --help\" 取得更多資訊。"
 
 #: xlogreader.c:626
 #, c-format
-msgid "invalid record offset at %X/%X: expected at least %u, got %u"
-msgstr "位於 %X/%X 的記錄 offset 無效: 預期至少 %u,實際為 %u"
+msgid "invalid record offset at %X/%08X: expected at least %u, got %u"
+msgstr "位於 %X/%08X 的記錄 offset 無效: 預期至少 %u,實際為 %u"
 
 # access/transam/xlog.c:2443
 #: xlogreader.c:635
 #, c-format
-msgid "contrecord is requested by %X/%X"
-msgstr "%X/%X 要求 contrecord"
+msgid "contrecord is requested by %X/%08X"
+msgstr "%X/%08X 要求 contrecord"
 
 #: xlogreader.c:676 xlogreader.c:1119
 #, c-format
-msgid "invalid record length at %X/%X: expected at least %u, got %u"
-msgstr "位於 %X/%X 的記錄長度無效: 預期至少 %u,實際為 %u"
+msgid "invalid record length at %X/%08X: expected at least %u, got %u"
+msgstr "位於 %X/%08X 的記錄長度無效: 預期至少 %u,實際為 %u"
 
 #: xlogreader.c:705
 #, c-format
@@ -444,45 +444,45 @@ msgstr "嘗試解碼長度為 %u 的記錄時耗盡記憶體"
 # access/transam/xlog.c:2503
 #: xlogreader.c:727
 #, c-format
-msgid "record length %u at %X/%X too long"
-msgstr "位於 %X/%X 的記錄長度 %u 過長"
+msgid "record length %u at %X/%08X too long"
+msgstr "位於 %X/%08X 的記錄長度 %u 過長"
 
 #: xlogreader.c:776
 #, c-format
-msgid "there is no contrecord flag at %X/%X"
-msgstr "位於 %X/%X 沒有 contrecord 標誌"
+msgid "there is no contrecord flag at %X/%08X"
+msgstr "位於 %X/%08X 沒有 contrecord 標誌"
 
 #: xlogreader.c:789
 #, c-format
-msgid "invalid contrecord length %u (expected %lld) at %X/%X"
+msgid "invalid contrecord length %u (expected %lld) at %X/%08X"
 msgstr "位於 %3$X/%4$X 的 contrecord 長度 %1$u 無效(預期為 %2$lld)"
 
 # access/transam/xlog.c:2465
 #: xlogreader.c:1127
 #, c-format
-msgid "invalid resource manager ID %u at %X/%X"
-msgstr "無效的資源管理器 ID %u 於 %X/%X"
+msgid "invalid resource manager ID %u at %X/%08X"
+msgstr "無效的資源管理器 ID %u 於 %X/%08X"
 
 # access/transam/xlog.c:2458
 #: xlogreader.c:1140 xlogreader.c:1156
 #, c-format
-msgid "record with incorrect prev-link %X/%X at %X/%X"
+msgid "record with incorrect prev-link %X/%08X at %X/%08X"
 msgstr "位於 %3$X/%4$X 的記錄有不正確的 prev-link %1$X/%2$X"
 
 # access/transam/xlog.c:2269
 #: xlogreader.c:1192
 #, c-format
-msgid "incorrect resource manager data checksum in record at %X/%X"
-msgstr "位於 %X/%X 的記錄中資源管理員資料檢查碼不正確"
+msgid "incorrect resource manager data checksum in record at %X/%08X"
+msgstr "位於 %X/%08X 的記錄中資源管理員資料檢查碼不正確"
 
 #: xlogreader.c:1226
 #, c-format
-msgid "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WAL 片段 %2$s 中的魔數數字 %1$04X 無效,LSN %3$X/%4$X,位移 %5$u"
 
 #: xlogreader.c:1241 xlogreader.c:1283
 #, c-format
-msgid "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u"
+msgid "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u"
 msgstr "WAL 片段 %2$s 中的資訊位元 %1$04X 無效,LSN %3$X/%4$X,位移 %5$u"
 
 #: xlogreader.c:1257
@@ -502,63 +502,63 @@ msgstr "WAL 檔案來自不同的資料庫系統: 資料頁標頭中的 XLOG_BLC
 
 #: xlogreader.c:1303
 #, c-format
-msgid "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "非預期的 pageaddr %X/%X 位於 WAL 片段 %s,LSN %X/%X,位移 %u"
+msgid "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "非預期的 pageaddr %X/%08X 位於 WAL 片段 %s,LSN %X/%08X,位移 %u"
 
 #: xlogreader.c:1329
 #, c-format
-msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u"
-msgstr "非依序 timeline ID %u(在 %u 之後)位於 WAL 片段 %s,LSN %X/%X,位移 %u"
+msgid "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u"
+msgstr "非依序 timeline ID %u(在 %u 之後)位於 WAL 片段 %s,LSN %X/%08X,位移 %u"
 
 #: xlogreader.c:1735
 #, c-format
-msgid "out-of-order block_id %u at %X/%X"
-msgstr "非循序 block_id %u 位於 %X/%X"
+msgid "out-of-order block_id %u at %X/%08X"
+msgstr "非循序 block_id %u 位於 %X/%08X"
 
 #: xlogreader.c:1759
 #, c-format
-msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%X"
-msgstr "設定了 BKPBLOCK_HAS_DATA,但在 %X/%X 的沒有包含任何資料"
+msgid "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X"
+msgstr "設定了 BKPBLOCK_HAS_DATA,但在 %X/%08X 的沒有包含任何資料"
 
 #: xlogreader.c:1766
 #, c-format
-msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X"
+msgid "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X"
 msgstr "未設定 BKPBLOCK_HAS_DATA,但在 %2$X/%3$X 的資料長度為 %1$u"
 
 #: xlogreader.c:1802
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X"
 msgstr "設定了 BKPIMAGE_HAS_HOLE,但在 %4$X/%5$X 有 offset %1$u 長度 %2$u 影像長度 %3$u 的空洞"
 
 #: xlogreader.c:1818
 #, c-format
-msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X"
+msgid "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X"
 msgstr "未設定 BKPIMAGE_HAS_HOLE,但在 %3$X/%4$X 有 offset %1$u 長度 %2$u 的空洞"
 
 #: xlogreader.c:1832
 #, c-format
-msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X"
+msgid "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X"
 msgstr "設定了 BKPIMAGE_COMPRESSED,但在 %2$X/%3$X 的區塊影像長度為 %1$u"
 
 #: xlogreader.c:1847
 #, c-format
-msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X"
+msgid "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X"
 msgstr "未設定 BKPIMAGE_HAS_HOLE 和 BKPIMAGE_COMPRESSED,但在 %2$X/%3$X 的區塊影像長度為 %1$u"
 
 #: xlogreader.c:1863
 #, c-format
-msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%X"
-msgstr "設定了 BKPBLOCK_SAME_REL,但在 %X/%X 沒有先前的 rel"
+msgid "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X"
+msgstr "設定了 BKPBLOCK_SAME_REL,但在 %X/%08X 沒有先前的 rel"
 
 #: xlogreader.c:1875
 #, c-format
-msgid "invalid block_id %u at %X/%X"
+msgid "invalid block_id %u at %X/%08X"
 msgstr "位於 %2$X/%3$X 的無效 block_id %1$u"
 
 #: xlogreader.c:1942
 #, c-format
-msgid "record with invalid length at %X/%X"
-msgstr "位於 %X/%X 的記錄長度無效"
+msgid "record with invalid length at %X/%08X"
+msgstr "位於 %X/%08X 的記錄長度無效"
 
 #: xlogreader.c:1968
 #, c-format
@@ -567,25 +567,25 @@ msgstr "在 WAL 記錄中找不到具有 ID %d 的備份區塊"
 
 #: xlogreader.c:2052
 #, c-format
-msgid "could not restore image at %X/%X with invalid block %d specified"
+msgid "could not restore image at %X/%08X with invalid block %d specified"
 msgstr "無法還原指定了無效區塊 %3$d 的影像,位置 %1$X/%2$X"
 
 #: xlogreader.c:2059
 #, c-format
-msgid "could not restore image at %X/%X with invalid state, block %d"
-msgstr "無法還原處於無效狀態的影像,位置 %X/%X,區塊 %d"
+msgid "could not restore image at %X/%08X with invalid state, block %d"
+msgstr "無法還原處於無效狀態的影像,位置 %X/%08X,區塊 %d"
 
 #: xlogreader.c:2086 xlogreader.c:2103
 #, c-format
-msgid "could not restore image at %X/%X compressed with %s not supported by build, block %d"
+msgid "could not restore image at %X/%08X compressed with %s not supported by build, block %d"
 msgstr "無法還原用此版本不支援的壓縮方法 %3$s 壓縮的影像,位置 %1$X/%2$X,區塊 %4$d"
 
 #: xlogreader.c:2112
 #, c-format
-msgid "could not restore image at %X/%X compressed with unknown method, block %d"
-msgstr "無法還原使用未知方法壓縮的影像,位置 %X/%X,區塊 %d"
+msgid "could not restore image at %X/%08X compressed with unknown method, block %d"
+msgstr "無法還原使用未知方法壓縮的影像,位置 %X/%08X,區塊 %d"
 
 #: xlogreader.c:2120
 #, c-format
-msgid "could not decompress image at %X/%X, block %d"
-msgstr "無法解壓縮影像,位置 %X/%X,區塊 %d"
+msgid "could not decompress image at %X/%08X, block %d"
+msgstr "無法解壓縮影像,位置 %X/%08X,區塊 %d"
diff --git a/src/common/parse_manifest.c b/src/common/parse_manifest.c
index 71973af199b..58e0948100f 100644
--- a/src/common/parse_manifest.c
+++ b/src/common/parse_manifest.c
@@ -942,7 +942,7 @@ parse_xlogrecptr(XLogRecPtr *result, char *input)
 	uint32		hi;
 	uint32		lo;
 
-	if (sscanf(input, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(input, "%X/%08X", &hi, &lo) != 2)
 		return false;
 	*result = ((uint64) hi) << 32 | lo;
 	return true;
diff --git a/src/include/access/xlogdefs.h b/src/include/access/xlogdefs.h
index 9e41c9f6e84..67158bc5ab0 100644
--- a/src/include/access/xlogdefs.h
+++ b/src/include/access/xlogdefs.h
@@ -38,7 +38,7 @@ typedef uint64 XLogRecPtr;
 /*
  * Handy macro for printing XLogRecPtr in conventional format, e.g.,
  *
- * printf("%X/%X", LSN_FORMAT_ARGS(lsn));
+ * printf("%X/%08X", LSN_FORMAT_ARGS(lsn));
  */
 #define LSN_FORMAT_ARGS(lsn) (AssertVariableIsOfTypeMacro((lsn), XLogRecPtr), (uint32) ((lsn) >> 32)), ((uint32) (lsn))
 
diff --git a/src/test/recovery/t/016_min_consistency.pl b/src/test/recovery/t/016_min_consistency.pl
index 9a3b4866fce..b381d0c21b5 100644
--- a/src/test/recovery/t/016_min_consistency.pl
+++ b/src/test/recovery/t/016_min_consistency.pl
@@ -39,7 +39,7 @@ sub find_largest_lsn
 	defined($len) or die "read error on $filename: $!";
 	close($fh);
 
-	return sprintf("%X/%X", $max_hi, $max_lo);
+	return sprintf("%X/%08X", $max_hi, $max_lo);
 }
 
 # Initialize primary node
diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out
index 072d76ce131..34aa1a6c94e 100644
--- a/src/test/regress/expected/numeric.out
+++ b/src/test/regress/expected/numeric.out
@@ -3860,15 +3860,15 @@ ERROR:  factorial of a negative number is undefined
 -- Tests for pg_lsn()
 --
 SELECT pg_lsn(23783416::numeric);
-  pg_lsn   
------------
- 0/16AE7F8
+   pg_lsn   
+------------
+ 0/016AE7F8
 (1 row)
 
 SELECT pg_lsn(0::numeric);
- pg_lsn 
---------
- 0/0
+   pg_lsn   
+------------
+ 0/00000000
 (1 row)
 
 SELECT pg_lsn(18446744073709551615::numeric);
diff --git a/src/test/regress/expected/pg_lsn.out b/src/test/regress/expected/pg_lsn.out
index b27eec7c015..8ab59b2e445 100644
--- a/src/test/regress/expected/pg_lsn.out
+++ b/src/test/regress/expected/pg_lsn.out
@@ -41,9 +41,9 @@ SELECT * FROM pg_input_error_info('16AE7F7', 'pg_lsn');
 
 -- Min/Max aggregation
 SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL;
- min |        max        
------+-------------------
- 0/0 | FFFFFFFF/FFFFFFFF
+    min     |        max        
+------------+-------------------
+ 0/00000000 | FFFFFFFF/FFFFFFFF
 (1 row)
 
 DROP TABLE PG_LSN_TBL;
@@ -85,21 +85,21 @@ SELECT '0/16AE7F8'::pg_lsn - '0/16AE7F7'::pg_lsn;
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn + 16::numeric;
- ?column?  
------------
- 0/16AE807
+  ?column?  
+------------
+ 0/016AE807
 (1 row)
 
 SELECT 16::numeric + '0/16AE7F7'::pg_lsn;
- ?column?  
------------
- 0/16AE807
+  ?column?  
+------------
+ 0/016AE807
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn - 16::numeric;
- ?column?  
------------
- 0/16AE7E7
+  ?column?  
+------------
+ 0/016AE7E7
 (1 row)
 
 SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 1::numeric;
@@ -111,9 +111,9 @@ SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 1::numeric;
 SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 2::numeric; -- out of range error
 ERROR:  pg_lsn out of range
 SELECT '0/1'::pg_lsn - 1::numeric;
- ?column? 
-----------
- 0/0
+  ?column?  
+------------
+ 0/00000000
 (1 row)
 
 SELECT '0/1'::pg_lsn - 2::numeric; -- out of range error
@@ -125,9 +125,9 @@ SELECT '0/0'::pg_lsn + ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
 (1 row)
 
 SELECT 'FFFFFFFF/FFFFFFFF'::pg_lsn - ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
- ?column? 
-----------
- 0/0
+  ?column?  
+------------
+ 0/00000000
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn + 'NaN'::numeric;
@@ -164,107 +164,107 @@ SELECT DISTINCT (i || '/' || j)::pg_lsn f
        generate_series(1, 5) k
   WHERE i <= 10 AND j > 0 AND j <= 10
   ORDER BY f;
-   f   
--------
- 1/1
- 1/2
- 1/3
- 1/4
- 1/5
- 1/6
- 1/7
- 1/8
- 1/9
- 1/10
- 2/1
- 2/2
- 2/3
- 2/4
- 2/5
- 2/6
- 2/7
- 2/8
- 2/9
- 2/10
- 3/1
- 3/2
- 3/3
- 3/4
- 3/5
- 3/6
- 3/7
- 3/8
- 3/9
- 3/10
- 4/1
- 4/2
- 4/3
- 4/4
- 4/5
- 4/6
- 4/7
- 4/8
- 4/9
- 4/10
- 5/1
- 5/2
- 5/3
- 5/4
- 5/5
- 5/6
- 5/7
- 5/8
- 5/9
- 5/10
- 6/1
- 6/2
- 6/3
- 6/4
- 6/5
- 6/6
- 6/7
- 6/8
- 6/9
- 6/10
- 7/1
- 7/2
- 7/3
- 7/4
- 7/5
- 7/6
- 7/7
- 7/8
- 7/9
- 7/10
- 8/1
- 8/2
- 8/3
- 8/4
- 8/5
- 8/6
- 8/7
- 8/8
- 8/9
- 8/10
- 9/1
- 9/2
- 9/3
- 9/4
- 9/5
- 9/6
- 9/7
- 9/8
- 9/9
- 9/10
- 10/1
- 10/2
- 10/3
- 10/4
- 10/5
- 10/6
- 10/7
- 10/8
- 10/9
- 10/10
+      f      
+-------------
+ 1/00000001
+ 1/00000002
+ 1/00000003
+ 1/00000004
+ 1/00000005
+ 1/00000006
+ 1/00000007
+ 1/00000008
+ 1/00000009
+ 1/00000010
+ 2/00000001
+ 2/00000002
+ 2/00000003
+ 2/00000004
+ 2/00000005
+ 2/00000006
+ 2/00000007
+ 2/00000008
+ 2/00000009
+ 2/00000010
+ 3/00000001
+ 3/00000002
+ 3/00000003
+ 3/00000004
+ 3/00000005
+ 3/00000006
+ 3/00000007
+ 3/00000008
+ 3/00000009
+ 3/00000010
+ 4/00000001
+ 4/00000002
+ 4/00000003
+ 4/00000004
+ 4/00000005
+ 4/00000006
+ 4/00000007
+ 4/00000008
+ 4/00000009
+ 4/00000010
+ 5/00000001
+ 5/00000002
+ 5/00000003
+ 5/00000004
+ 5/00000005
+ 5/00000006
+ 5/00000007
+ 5/00000008
+ 5/00000009
+ 5/00000010
+ 6/00000001
+ 6/00000002
+ 6/00000003
+ 6/00000004
+ 6/00000005
+ 6/00000006
+ 6/00000007
+ 6/00000008
+ 6/00000009
+ 6/00000010
+ 7/00000001
+ 7/00000002
+ 7/00000003
+ 7/00000004
+ 7/00000005
+ 7/00000006
+ 7/00000007
+ 7/00000008
+ 7/00000009
+ 7/00000010
+ 8/00000001
+ 8/00000002
+ 8/00000003
+ 8/00000004
+ 8/00000005
+ 8/00000006
+ 8/00000007
+ 8/00000008
+ 8/00000009
+ 8/00000010
+ 9/00000001
+ 9/00000002
+ 9/00000003
+ 9/00000004
+ 9/00000005
+ 9/00000006
+ 9/00000007
+ 9/00000008
+ 9/00000009
+ 9/00000010
+ 10/00000001
+ 10/00000002
+ 10/00000003
+ 10/00000004
+ 10/00000005
+ 10/00000006
+ 10/00000007
+ 10/00000008
+ 10/00000009
+ 10/00000010
 (100 rows)
 
diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 1443e1d9292..529b2241731 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -116,18 +116,18 @@ CREATE SUBSCRIPTION regress_testsub4 CONNECTION 'dbname=regress_doesnotexist' PU
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+ regress_testsub4
-                                                                                                                 List of subscriptions
-       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | none   | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                  List of subscriptions
+       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | none   | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub4 SET (origin = any);
 \dRs+ regress_testsub4
-                                                                                                                 List of subscriptions
-       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                  List of subscriptions
+       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub3;
@@ -145,10 +145,10 @@ ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar';
 ERROR:  invalid connection string syntax: missing "=" after "foobar" in connection info string
 
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH (refresh = false);
@@ -157,10 +157,10 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = 'newname');
 ALTER SUBSCRIPTION regress_testsub SET (password_required = false);
 ALTER SUBSCRIPTION regress_testsub SET (run_as_owner = true);
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | f                 | t             | f        | off                | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | f                 | t             | f        | off                | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (password_required = true);
@@ -176,10 +176,10 @@ ERROR:  unrecognized subscription parameter: "create_slot"
 -- ok
 ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/12345');
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/12345
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/00012345
 (1 row)
 
 -- ok - with lsn = NONE
@@ -188,10 +188,10 @@ ALTER SUBSCRIPTION regress_testsub SKIP (lsn = NONE);
 ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/0');
 ERROR:  invalid WAL location (LSN): 0/0
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 BEGIN;
@@ -223,10 +223,10 @@ ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar);
 ERROR:  invalid value for parameter "synchronous_commit": "foobar"
 HINT:  Available values: local, remote_write, remote_apply, on, off.
 \dRs+
-                                                                                                                       List of subscriptions
-        Name         |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
----------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub_foo | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | local              | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                        List of subscriptions
+        Name         |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+---------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub_foo | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | local              | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 -- rename back to keep the rest simple
@@ -255,19 +255,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | t      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | t      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (binary = false);
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub;
@@ -279,27 +279,27 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (streaming = parallel);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (streaming = false);
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- fail - publication already exists
@@ -314,10 +314,10 @@ ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refr
 ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
 ERROR:  publication "testpub1" is already in subscription "regress_testsub"
 \dRs+
-                                                                                                                        List of subscriptions
-      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                         List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- fail - publication used more than once
@@ -332,10 +332,10 @@ ERROR:  publication "testpub3" is not in subscription "regress_testsub"
 -- ok - delete publications
 ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub;
@@ -371,19 +371,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- we can alter streaming when two_phase enabled
 ALTER SUBSCRIPTION regress_testsub SET (streaming = true);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -393,10 +393,10 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -409,18 +409,18 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (disable_on_error = true);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | t                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | t                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
-- 
2.43.0

#5Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Japin Li (#1)
Re: Inconsistent LSN format in pg_waldump output

On Tue, Jul 1, 2025 at 6:46 PM Japin Li <japinli@hotmail.com> wrote:

Hi, all

I've noticed an inconsistency in the LSN format printed by pg_waldump,
specifically concerning the lsn: and prev fields in the output.

$ pg_waldump /tmp/pgdata02/pg_wal/00000001000000000000000A 2>/dev/null |grep 'AB10260'
rmgr: XLOG len (rec/tot): 114/ 114, tx: 0, lsn: 0/0AB10260, prev 0/0AB10228, desc: CHECKPOINT_SHUTDOWN redo 0/AB10260; ...
^ ^

In the output above, the LSN 0/AB10260 and 0/0AB10260 refer to the same logical
LSN, but are presented with a different number of leading zeros in the lower
32-bit part.

Upon further investigation, I grepped the source code for the format specifier
used:

$ grep '%X\/%08X' -rn src/
src/bin/pg_waldump/pg_waldump.c:558: printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",

This inconsistency, while minor, could be confusing when cross-referencing
LSNs within pg_waldump's own output or when parsing it programmatically.

Yeah, it seems that this is the only place where we output an LSN in a
mixed style of with and without leading zeros. And when writing an LSN
we typically use the format "%X/%X", so I agree with the proposed
change.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#6Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Japin Li (#4)
Re: Inconsistent LSN format in pg_waldump output

On Wed, Jul 2, 2025 at 10:56 PM Japin Li <japinli@hotmail.com> wrote:

On Tue, 01 Jul 2025 at 22:00, Japin Li <japinli@hotmail.com> wrote:

On Tue, 01 Jul 2025 at 13:39, Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-01, Japin Li wrote:

This inconsistency, while minor, could be confusing when cross-referencing
LSNs within pg_waldump's own output or when parsing it programmatically.

I agree that we should fix this, but I'd rather add the missing zeros
than remove these ones (the only ones we have):

XLogRecGetLen(record, &rec_len, &fpi_len);

-   printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",
+   printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%X, prev %X/%X, ",
desc->rm_name,
rec_len, XLogRecGetTotalLen(record),
XLogRecGetXid(record),

I think pg_waldump did things right in this regard, and all other places
were cargo-culting the older broken practice.

I initially considered using the %X/%08X format, but observing %X/%X
consistently elsewhere led me to abandon that idea.

IOW I think we should change all occurrences of %X/%X to %X/%08X
instead. There's a ton of them though. See also
/messages/by-id/CAExHW5ub5NaTELZ3hJUCE6amuvqAtsSxc7O+uK7y4t9Rrk23cw@mail.gmail.com
where LSN_FORMAT_ARGS was invented, but where the width of the second %X
was not discussed.

Interesting. While this is a better format, could it break
compatibility with existing tools that for example compares LSN
strings?

Agreed. I believe %X/%08X is better.

Patch to standardize LSN formatting with zero-padding.

Thank you for updating the patch. I think this patch doesn't need to
update .po files as we do that at once when doing the translation
update.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#7Álvaro Herrera
alvherre@kurilemu.de
In reply to: Masahiko Sawada (#6)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-03, Masahiko Sawada wrote:

On Wed, Jul 2, 2025 at 10:56 PM Japin Li <japinli@hotmail.com> wrote:

Interesting. While this is a better format, could it break
compatibility with existing tools that for example compares LSN
strings?

I think a tool would have to be severely miswritten in order to become
broken from this change. Our own code to scan LSNs is to use
scanf('%X/%X') which should work just fine with and without the leading
zeroes. I honestly don't see anybody coding this in any different way
that could not cope with the leading zeroes :-)

Agreed. I believe %X/%08X is better.

Patch to standardize LSN formatting with zero-padding.

Thank you for updating the patch. I think this patch doesn't need to
update .po files as we do that at once when doing the translation
update.

Agreed. In fact these updates are probably harmful (they certainly
bloat the patch quite a bit). These files come from a different
repository, which you're welcome to provide a patch for, after the code
change lands in Postgres.
https://git.postgresql.org/cgit/pgtranslation/messages.git/

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"Porque Kim no hacía nada, pero, eso sí,
con extraordinario éxito" ("Kim", Kipling)

#8Michael Paquier
michael@paquier.xyz
In reply to: Álvaro Herrera (#7)
Re: Inconsistent LSN format in pg_waldump output

On Wed, Jul 02, 2025 at 08:57:45PM +0200, Alvaro Herrera wrote:

I think a tool would have to be severely miswritten in order to become
broken from this change. Our own code to scan LSNs is to use
scanf('%X/%X') which should work just fine with and without the leading
zeroes. I honestly don't see anybody coding this in any different way
that could not cope with the leading zeroes :-)

Yep. If you do not want this new policy to be forgotten by new paths,
I'd suggested to standarize that with something like that, close to
the existing LSN_FORMAT_ARGS():
#define LSN_FORMAT "%X/%08X"

I was pretty sure that this point was mentioned when LSN_FORMAT_ARGS
got discussed, but my impression is wrong as Alvaro already said
upthread. I'd suggest to take this extra step now instead of
hardcoding %08X everywhere. We may perhaps go down to backpatch
LSN_FORMAT_ARGS() and this LSN_FORMAT in the back-branches, leading to
less friction when backpatching fixes, but we don't deal with many
stable fixes that would require these.
--
Michael

#9Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#8)
Re: Inconsistent LSN format in pg_waldump output

On Thu, Jul 3, 2025 at 7:32 AM Michael Paquier <michael@paquier.xyz> wrote:

On Wed, Jul 02, 2025 at 08:57:45PM +0200, Alvaro Herrera wrote:

I think a tool would have to be severely miswritten in order to become
broken from this change. Our own code to scan LSNs is to use
scanf('%X/%X') which should work just fine with and without the leading
zeroes. I honestly don't see anybody coding this in any different way
that could not cope with the leading zeroes :-)

I had concerns regarding scenarios where users or tools
programmatically search for LSNs or perform string comparisons without
proper parsing, as initially raised by Japin Li. For instance, if a
newer version of the server records an LSN as '0/0AB10228' in the
server log, users attempting to search for this LSN won't find matches
in logs generated by older server versions. While such differences
might be acceptable across major version upgrades, I'm uncertain
whether this inconsistency is appropriate between minor versions.

Yep. If you do not want this new policy to be forgotten by new paths,
I'd suggested to standarize that with something like that, close to
the existing LSN_FORMAT_ARGS():
#define LSN_FORMAT "%X/%08X"

+1

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#10Japin Li
japinli@hotmail.com
In reply to: Masahiko Sawada (#9)
1 attachment(s)
Re: Inconsistent LSN format in pg_waldump output

On Thu, 03 Jul 2025 at 10:16, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Thu, Jul 3, 2025 at 7:32 AM Michael Paquier <michael@paquier.xyz> wrote:

On Wed, Jul 02, 2025 at 08:57:45PM +0200, Alvaro Herrera wrote:

I think a tool would have to be severely miswritten in order to become
broken from this change. Our own code to scan LSNs is to use
scanf('%X/%X') which should work just fine with and without the leading
zeroes. I honestly don't see anybody coding this in any different way
that could not cope with the leading zeroes :-)

I had concerns regarding scenarios where users or tools
programmatically search for LSNs or perform string comparisons without
proper parsing, as initially raised by Japin Li. For instance, if a
newer version of the server records an LSN as '0/0AB10228' in the
server log, users attempting to search for this LSN won't find matches
in logs generated by older server versions. While such differences
might be acceptable across major version upgrades, I'm uncertain
whether this inconsistency is appropriate between minor versions.

Yep. If you do not want this new policy to be forgotten by new paths,
I'd suggested to standarize that with something like that, close to
the existing LSN_FORMAT_ARGS():
#define LSN_FORMAT "%X/%08X"

+1

Thanks everyone for reviewing this patch. Please find v3 attached.

--
Regards,
Japin Li

Attachments:

v3-0001-Standardize-LSN-formatting-by-zero-padding.patchtext/x-diffDownload
From 67397a9b7254a4aaec0c5f9ef072d339ae9c3b00 Mon Sep 17 00:00:00 2001
From: Li Jianping <jianping.li@ww-it.cn>
Date: Thu, 3 Jul 2025 12:00:11 +0800
Subject: [PATCH v3] Standardize LSN formatting by zero padding

This commit standardizes the output format for LSNs to ensure consistent
representation across various tools and messages.

Previously, LSNs were inconsistently printed as `%X/%X` in some contexts,
while others used zero-padding.  This often led to confusion when comparing.

To address this, the LSN output format is now uniformly set to `%X/%08X`,
ensuring the lower 32-bit part is always zero-padded to eight hexadecimal
digits.  This consistent format is now encapsulated within a new macro,
`LSN_FORMAT`, promoting easier maintenance and preventing future
discrepancies.
---
 contrib/amcheck/verify_nbtree.c               |  44 ++--
 contrib/pageinspect/expected/gist.out         |  18 +-
 contrib/pageinspect/expected/page.out         |   6 +-
 contrib/pageinspect/rawpage.c                 |   2 +-
 .../pg_walinspect/expected/pg_walinspect.out  |   8 +-
 contrib/pg_walinspect/pg_walinspect.c         |  18 +-
 src/backend/access/rmgrdesc/replorigindesc.c  |   2 +-
 src/backend/access/rmgrdesc/xactdesc.c        |   6 +-
 src/backend/access/rmgrdesc/xlogdesc.c        |   6 +-
 src/backend/access/transam/timeline.c         |   4 +-
 src/backend/access/transam/twophase.c         |   8 +-
 src/backend/access/transam/xlog.c             |  40 +--
 src/backend/access/transam/xlogbackup.c       |   8 +-
 src/backend/access/transam/xlogprefetcher.c   |  16 +-
 src/backend/access/transam/xlogreader.c       |  62 ++---
 src/backend/access/transam/xlogrecovery.c     |  72 +++---
 src/backend/access/transam/xlogutils.c        |   2 +-
 src/backend/backup/backup_manifest.c          |   2 +-
 src/backend/backup/basebackup_copy.c          |   2 +-
 src/backend/backup/basebackup_incremental.c   |  14 +-
 src/backend/commands/subscriptioncmds.c       |   2 +-
 src/backend/postmaster/walsummarizer.c        |  26 +-
 .../libpqwalreceiver/libpqwalreceiver.c       |   2 +-
 src/backend/replication/logical/logical.c     |  14 +-
 src/backend/replication/logical/origin.c      |   2 +-
 src/backend/replication/logical/slotsync.c    |  10 +-
 src/backend/replication/logical/snapbuild.c   |  16 +-
 src/backend/replication/logical/tablesync.c   |   2 +-
 src/backend/replication/logical/worker.c      |  18 +-
 src/backend/replication/repl_gram.y           |   4 +-
 src/backend/replication/repl_scanner.l        |   2 +-
 src/backend/replication/slot.c                |   4 +-
 src/backend/replication/slotfuncs.c           |   2 +-
 src/backend/replication/syncrep.c             |   4 +-
 src/backend/replication/walreceiver.c         |  12 +-
 src/backend/replication/walsender.c           |  20 +-
 src/backend/storage/ipc/standby.c             |   4 +-
 src/backend/utils/adt/pg_lsn.c                |   2 +-
 src/bin/pg_basebackup/pg_basebackup.c         |   6 +-
 src/bin/pg_basebackup/pg_createsubscriber.c   |   4 +-
 src/bin/pg_basebackup/pg_receivewal.c         |  10 +-
 src/bin/pg_basebackup/pg_recvlogical.c        |  14 +-
 src/bin/pg_basebackup/receivelog.c            |   6 +-
 src/bin/pg_basebackup/streamutil.c            |   4 +-
 src/bin/pg_combinebackup/backup_label.c       |   2 +-
 src/bin/pg_combinebackup/pg_combinebackup.c   |   2 +-
 src/bin/pg_combinebackup/write_manifest.c     |   2 +-
 src/bin/pg_controldata/pg_controldata.c       |  12 +-
 src/bin/pg_rewind/libpq_source.c              |   2 +-
 src/bin/pg_rewind/parsexlog.c                 |  16 +-
 src/bin/pg_rewind/pg_rewind.c                 |  10 +-
 src/bin/pg_rewind/timeline.c                  |   2 +-
 src/bin/pg_verifybackup/pg_verifybackup.c     |   2 +-
 src/bin/pg_waldump/pg_waldump.c               |  20 +-
 src/common/parse_manifest.c                   |   2 +-
 src/include/access/xlogdefs.h                 |   3 +-
 src/test/recovery/t/016_min_consistency.pl    |   2 +-
 src/test/regress/expected/numeric.out         |  12 +-
 src/test/regress/expected/pg_lsn.out          | 240 +++++++++---------
 src/test/regress/expected/subscription.out    | 152 +++++------
 60 files changed, 506 insertions(+), 505 deletions(-)

diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c
index f11c43a0ed7..833dfa42f68 100644
--- a/contrib/amcheck/verify_nbtree.c
+++ b/contrib/amcheck/verify_nbtree.c
@@ -913,7 +913,7 @@ bt_report_duplicate(BtreeCheckState *state,
 			(errcode(ERRCODE_INDEX_CORRUPTED),
 			 errmsg("index uniqueness is violated for index \"%s\"",
 					RelationGetRelationName(state->rel)),
-			 errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%X.",
+			 errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=" LSN_FORMAT ".",
 					   itid, pposting, nitid, pnposting, htid, nhtid,
 					   LSN_FORMAT_ARGS(state->targetlsn))));
 }
@@ -1058,7 +1058,7 @@ bt_leftmost_ignoring_half_dead(BtreeCheckState *state,
 					(errcode(ERRCODE_NO_DATA),
 					 errmsg_internal("harmless interrupted page deletion detected in index \"%s\"",
 									 RelationGetRelationName(state->rel)),
-					 errdetail_internal("Block=%u right block=%u page lsn=%X/%X.",
+					 errdetail_internal("Block=%u right block=%u page lsn=" LSN_FORMAT ".",
 										reached, reached_from,
 										LSN_FORMAT_ARGS(pagelsn))));
 
@@ -1283,7 +1283,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("wrong number of high key index tuple attributes in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%X.",
+					 errdetail_internal("Index block=%u natts=%u block type=%s page lsn=" LSN_FORMAT ".",
 										state->targetblock,
 										BTreeTupleGetNAtts(itup, state->rel),
 										P_ISLEAF(topaque) ? "heap" : "index",
@@ -1332,7 +1332,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("index tuple size does not equal lp_len in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%X.",
+					 errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=" LSN_FORMAT ".",
 										state->targetblock, offset,
 										tupsize, ItemIdGetLength(itemid),
 										LSN_FORMAT_ARGS(state->targetlsn)),
@@ -1356,7 +1356,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("wrong number of index tuple attributes in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=" LSN_FORMAT ".",
 										itid,
 										BTreeTupleGetNAtts(itup, state->rel),
 										P_ISLEAF(topaque) ? "heap" : "index",
@@ -1406,7 +1406,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("could not find tuple using search from root page in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to heap tid=%s page lsn=" LSN_FORMAT ".",
 										itid, htid,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 		}
@@ -1435,7 +1435,7 @@ bt_target_page_check(BtreeCheckState *state)
 							(errcode(ERRCODE_INDEX_CORRUPTED),
 							 errmsg_internal("posting list contains misplaced TID in index \"%s\"",
 											 RelationGetRelationName(state->rel)),
-							 errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%X.",
+							 errdetail_internal("Index tid=%s posting list offset=%d page lsn=" LSN_FORMAT ".",
 												itid, i,
 												LSN_FORMAT_ARGS(state->targetlsn))));
 				}
@@ -1488,7 +1488,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("index row size %zu exceeds maximum for index \"%s\"",
 							tupsize, RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=" LSN_FORMAT ".",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1595,7 +1595,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("high key invariant violated for index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=" LSN_FORMAT ".",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1643,7 +1643,7 @@ bt_target_page_check(BtreeCheckState *state)
 							RelationGetRelationName(state->rel)),
 					 errdetail_internal("Lower index tid=%s (points to %s tid=%s) "
 										"higher index tid=%s (points to %s tid=%s) "
-										"page lsn=%X/%X.",
+										"page lsn=" LSN_FORMAT ".",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1760,7 +1760,7 @@ bt_target_page_check(BtreeCheckState *state)
 						(errcode(ERRCODE_INDEX_CORRUPTED),
 						 errmsg("cross page item order invariant violated for index \"%s\"",
 								RelationGetRelationName(state->rel)),
-						 errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%X.",
+						 errdetail_internal("Last item on page tid=(%u,%u) page lsn=" LSN_FORMAT ".",
 											state->targetblock, offset,
 											LSN_FORMAT_ARGS(state->targetlsn))));
 			}
@@ -1813,7 +1813,7 @@ bt_target_page_check(BtreeCheckState *state)
 								(errcode(ERRCODE_INDEX_CORRUPTED),
 								 errmsg("right block of leaf block is non-leaf for index \"%s\"",
 										RelationGetRelationName(state->rel)),
-								 errdetail_internal("Block=%u page lsn=%X/%X.",
+								 errdetail_internal("Block=%u page lsn=" LSN_FORMAT ".",
 													state->targetblock,
 													LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2237,7 +2237,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("the first child of leftmost target page is not leftmost of its level in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+					 errdetail_internal("Target block=%u child block=%u target page lsn=" LSN_FORMAT ".",
 										state->targetblock, blkno,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2323,7 +2323,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 								(errcode(ERRCODE_INDEX_CORRUPTED),
 								 errmsg("child high key is greater than rightmost pivot key on target level in index \"%s\"",
 										RelationGetRelationName(state->rel)),
-								 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+								 errdetail_internal("Target block=%u child block=%u target page lsn=" LSN_FORMAT ".",
 													state->targetblock, blkno,
 													LSN_FORMAT_ARGS(state->targetlsn))));
 					pivotkey_offset = P_HIKEY;
@@ -2353,7 +2353,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 							(errcode(ERRCODE_INDEX_CORRUPTED),
 							 errmsg("can't find left sibling high key in index \"%s\"",
 									RelationGetRelationName(state->rel)),
-							 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+							 errdetail_internal("Target block=%u child block=%u target page lsn=" LSN_FORMAT ".",
 												state->targetblock, blkno,
 												LSN_FORMAT_ARGS(state->targetlsn))));
 				itup = state->lowkey;
@@ -2365,7 +2365,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 						(errcode(ERRCODE_INDEX_CORRUPTED),
 						 errmsg("mismatch between parent key and child high key in index \"%s\"",
 								RelationGetRelationName(state->rel)),
-						 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+						 errdetail_internal("Target block=%u child block=%u target page lsn=" LSN_FORMAT ".",
 											state->targetblock, blkno,
 											LSN_FORMAT_ARGS(state->targetlsn))));
 			}
@@ -2505,7 +2505,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg("downlink to deleted page found in index \"%s\"",
 						RelationGetRelationName(state->rel)),
-				 errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%X.",
+				 errdetail_internal("Parent block=%u child block=%u parent page lsn=" LSN_FORMAT ".",
 									state->targetblock, childblock,
 									LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2546,7 +2546,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("down-link lower bound invariant violated for index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%X.",
+					 errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=" LSN_FORMAT ".",
 										state->targetblock, childblock, offset,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 	}
@@ -2616,7 +2616,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_NO_DATA),
 				 errmsg_internal("harmless interrupted page split detected in index \"%s\"",
 								 RelationGetRelationName(state->rel)),
-				 errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.",
+				 errdetail_internal("Block=%u level=%u left sibling=%u page lsn=" LSN_FORMAT ".",
 									blkno, opaque->btpo_level,
 									opaque->btpo_prev,
 									LSN_FORMAT_ARGS(pagelsn))));
@@ -2638,7 +2638,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg("leaf index block lacks downlink in index \"%s\"",
 						RelationGetRelationName(state->rel)),
-				 errdetail_internal("Block=%u page lsn=%X/%X.",
+				 errdetail_internal("Block=%u page lsn=" LSN_FORMAT ".",
 									blkno,
 									LSN_FORMAT_ARGS(pagelsn))));
 
@@ -2704,7 +2704,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg_internal("downlink to deleted leaf page found in index \"%s\"",
 								 RelationGetRelationName(state->rel)),
-				 errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%X.",
+				 errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=" LSN_FORMAT ".",
 									blkno, childblk,
 									LSN_FORMAT_ARGS(pagelsn))));
 
@@ -2730,7 +2730,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 			(errcode(ERRCODE_INDEX_CORRUPTED),
 			 errmsg("internal index block lacks downlink in index \"%s\"",
 					RelationGetRelationName(state->rel)),
-			 errdetail_internal("Block=%u level=%u page lsn=%X/%X.",
+			 errdetail_internal("Block=%u level=%u page lsn=" LSN_FORMAT ".",
 								blkno, opaque->btpo_level,
 								LSN_FORMAT_ARGS(pagelsn))));
 }
diff --git a/contrib/pageinspect/expected/gist.out b/contrib/pageinspect/expected/gist.out
index 2b1d54a6279..8502f9efb41 100644
--- a/contrib/pageinspect/expected/gist.out
+++ b/contrib/pageinspect/expected/gist.out
@@ -5,21 +5,21 @@ CREATE UNLOGGED TABLE test_gist AS SELECT point(i,i) p, i::text t FROM
 CREATE INDEX test_gist_idx ON test_gist USING gist (p);
 -- Page 0 is the root, the rest are leaf pages
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 0));
- lsn | nsn | rightlink  | flags 
------+-----+------------+-------
- 0/1 | 0/0 | 4294967295 | {}
+    lsn     |    nsn     | rightlink  | flags 
+------------+------------+------------+-------
+ 0/00000001 | 0/00000000 | 4294967295 | {}
 (1 row)
 
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 1));
- lsn | nsn | rightlink  | flags  
------+-----+------------+--------
- 0/1 | 0/0 | 4294967295 | {leaf}
+    lsn     |    nsn     | rightlink  | flags  
+------------+------------+------------+--------
+ 0/00000001 | 0/00000000 | 4294967295 | {leaf}
 (1 row)
 
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2));
- lsn | nsn | rightlink | flags  
------+-----+-----------+--------
- 0/1 | 0/0 |         1 | {leaf}
+    lsn     |    nsn     | rightlink | flags  
+------------+------------+-----------+--------
+ 0/00000001 | 0/00000000 |         1 | {leaf}
 (1 row)
 
 SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx');
diff --git a/contrib/pageinspect/expected/page.out b/contrib/pageinspect/expected/page.out
index e42fd9747fd..fcf19c5ca5a 100644
--- a/contrib/pageinspect/expected/page.out
+++ b/contrib/pageinspect/expected/page.out
@@ -265,9 +265,9 @@ SELECT fsm_page_contents(decode(repeat('00', :block_size), 'hex'));
 (1 row)
 
 SELECT page_header(decode(repeat('00', :block_size), 'hex'));
-      page_header      
------------------------
- (0/0,0,0,0,0,0,0,0,0)
+         page_header          
+------------------------------
+ (0/00000000,0,0,0,0,0,0,0,0)
 (1 row)
 
 SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1);
diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c
index 0d57123aa26..4a9616b1a54 100644
--- a/contrib/pageinspect/rawpage.c
+++ b/contrib/pageinspect/rawpage.c
@@ -282,7 +282,7 @@ page_header(PG_FUNCTION_ARGS)
 	{
 		char		lsnchar[64];
 
-		snprintf(lsnchar, sizeof(lsnchar), "%X/%X", LSN_FORMAT_ARGS(lsn));
+		snprintf(lsnchar, sizeof(lsnchar), LSN_FORMAT, LSN_FORMAT_ARGS(lsn));
 		values[0] = CStringGetTextDatum(lsnchar);
 	}
 	else
diff --git a/contrib/pg_walinspect/expected/pg_walinspect.out b/contrib/pg_walinspect/expected/pg_walinspect.out
index c010eed8c5d..f955ff5d3c5 100644
--- a/contrib/pg_walinspect/expected/pg_walinspect.out
+++ b/contrib/pg_walinspect/expected/pg_walinspect.out
@@ -19,14 +19,14 @@ INSERT INTO sample_tbl SELECT * FROM generate_series(3, 4);
 -- ===================================================================
 -- Invalid input LSN.
 SELECT * FROM pg_get_wal_record_info('0/0');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 -- Invalid start LSN.
 SELECT * FROM pg_get_wal_records_info('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 SELECT * FROM pg_get_wal_stats('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 SELECT * FROM pg_get_wal_block_info('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 -- Start LSN > End LSN.
 SELECT * FROM pg_get_wal_records_info(:'wal_lsn2', :'wal_lsn1');
 ERROR:  WAL start LSN must be less than end LSN
diff --git a/contrib/pg_walinspect/pg_walinspect.c b/contrib/pg_walinspect/pg_walinspect.c
index 64745564cc2..149492fa488 100644
--- a/contrib/pg_walinspect/pg_walinspect.c
+++ b/contrib/pg_walinspect/pg_walinspect.c
@@ -105,7 +105,7 @@ InitXLogReaderState(XLogRecPtr lsn)
 	if (lsn < XLOG_BLCKSZ)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not read WAL at LSN %X/%X",
+				 errmsg("could not read WAL at LSN " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lsn))));
 
 	private_data = (ReadLocalXLogPageNoWaitPrivate *)
@@ -128,7 +128,7 @@ InitXLogReaderState(XLogRecPtr lsn)
 
 	if (XLogRecPtrIsInvalid(first_valid_record))
 		ereport(ERROR,
-				(errmsg("could not find a valid record after %X/%X",
+				(errmsg("could not find a valid record after " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lsn))));
 
 	return xlogreader;
@@ -168,12 +168,12 @@ ReadNextXLogRecord(XLogReaderState *xlogreader)
 		if (errormsg)
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read WAL at %X/%X: %s",
+					 errmsg("could not read WAL at " LSN_FORMAT ": %s",
 							LSN_FORMAT_ARGS(xlogreader->EndRecPtr), errormsg)));
 		else
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read WAL at %X/%X",
+					 errmsg("could not read WAL at " LSN_FORMAT,
 							LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 	}
 
@@ -479,7 +479,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL input LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at " LSN_FORMAT ".",
 						   LSN_FORMAT_ARGS(curr_lsn))));
 
 	/* Build a tuple descriptor for our result type. */
@@ -491,7 +491,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS)
 	if (!ReadNextXLogRecord(xlogreader))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not read WAL at %X/%X",
+				 errmsg("could not read WAL at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 
 	GetWALRecordInfo(xlogreader, values, nulls, PG_GET_WAL_RECORD_INFO_COLS);
@@ -521,7 +521,7 @@ ValidateInputLSNs(XLogRecPtr start_lsn, XLogRecPtr *end_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at " LSN_FORMAT ".",
 						   LSN_FORMAT_ARGS(curr_lsn))));
 
 	if (start_lsn > *end_lsn)
@@ -827,7 +827,7 @@ pg_get_wal_records_info_till_end_of_wal(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at " LSN_FORMAT ".",
 						   LSN_FORMAT_ARGS(end_lsn))));
 
 	GetWALRecordsInfo(fcinfo, start_lsn, end_lsn);
@@ -846,7 +846,7 @@ pg_get_wal_stats_till_end_of_wal(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at " LSN_FORMAT ".",
 						   LSN_FORMAT_ARGS(end_lsn))));
 
 	GetWalStats(fcinfo, start_lsn, end_lsn, stats_per_record);
diff --git a/src/backend/access/rmgrdesc/replorigindesc.c b/src/backend/access/rmgrdesc/replorigindesc.c
index 5dd74233996..f7171a0b595 100644
--- a/src/backend/access/rmgrdesc/replorigindesc.c
+++ b/src/backend/access/rmgrdesc/replorigindesc.c
@@ -29,7 +29,7 @@ replorigin_desc(StringInfo buf, XLogReaderState *record)
 
 				xlrec = (xl_replorigin_set *) rec;
 
-				appendStringInfo(buf, "set %u; lsn %X/%X; force: %d",
+				appendStringInfo(buf, "set %u; lsn " LSN_FORMAT "; force: %d",
 								 xlrec->node_id,
 								 LSN_FORMAT_ARGS(xlrec->remote_lsn),
 								 xlrec->force);
diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c
index 305598e2865..7aeb2089183 100644
--- a/src/backend/access/rmgrdesc/xactdesc.c
+++ b/src/backend/access/rmgrdesc/xactdesc.c
@@ -359,7 +359,7 @@ xact_desc_commit(StringInfo buf, uint8 info, xl_xact_commit *xlrec, RepOriginId
 
 	if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN)
 	{
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn " LSN_FORMAT ", at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
@@ -384,7 +384,7 @@ xact_desc_abort(StringInfo buf, uint8 info, xl_xact_abort *xlrec, RepOriginId or
 
 	if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN)
 	{
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn " LSN_FORMAT ", at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
@@ -418,7 +418,7 @@ xact_desc_prepare(StringInfo buf, uint8 info, xl_xact_prepare *xlrec, RepOriginI
 	 * way as PrepareRedoAdd().
 	 */
 	if (origin_id != InvalidRepOriginId)
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn " LSN_FORMAT ", at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c
index 58040f28656..04dfc694548 100644
--- a/src/backend/access/rmgrdesc/xlogdesc.c
+++ b/src/backend/access/rmgrdesc/xlogdesc.c
@@ -65,7 +65,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 	{
 		CheckPoint *checkpoint = (CheckPoint *) rec;
 
-		appendStringInfo(buf, "redo %X/%X; "
+		appendStringInfo(buf, "redo " LSN_FORMAT "; "
 						 "tli %u; prev tli %u; fpw %s; wal_level %s; xid %u:%u; oid %u; multi %u; offset %u; "
 						 "oldest xid %u in DB %u; oldest multi %u in DB %u; "
 						 "oldest/newest commit timestamp xid: %u/%u; "
@@ -111,7 +111,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 		XLogRecPtr	startpoint;
 
 		memcpy(&startpoint, rec, sizeof(XLogRecPtr));
-		appendStringInfo(buf, "%X/%X", LSN_FORMAT_ARGS(startpoint));
+		appendStringInfo(buf, LSN_FORMAT, LSN_FORMAT_ARGS(startpoint));
 	}
 	else if (info == XLOG_PARAMETER_CHANGE)
 	{
@@ -156,7 +156,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 		xl_overwrite_contrecord xlrec;
 
 		memcpy(&xlrec, rec, sizeof(xl_overwrite_contrecord));
-		appendStringInfo(buf, "lsn %X/%X; time %s",
+		appendStringInfo(buf, "lsn " LSN_FORMAT "; time %s",
 						 LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 						 timestamptz_to_str(xlrec.overwrite_time));
 	}
diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c
index a27f27cc037..9fd483ee0a6 100644
--- a/src/backend/access/transam/timeline.c
+++ b/src/backend/access/transam/timeline.c
@@ -154,7 +154,7 @@ readTimeLineHistory(TimeLineID targetTLI)
 		if (*ptr == '\0' || *ptr == '#')
 			continue;
 
-		nfields = sscanf(fline, "%u\t%X/%X", &tli, &switchpoint_hi, &switchpoint_lo);
+		nfields = sscanf(fline, "%u\t" LSN_FORMAT, &tli, &switchpoint_hi, &switchpoint_lo);
 
 		if (nfields < 1)
 		{
@@ -399,7 +399,7 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
 	 * parent file failed to end with one.
 	 */
 	snprintf(buffer, sizeof(buffer),
-			 "%s%u\t%X/%X\t%s\n",
+			 "%s%u\t" LSN_FORMAT "\t%s\n",
 			 (srcfd < 0) ? "" : "\n",
 			 parentTLI,
 			 LSN_FORMAT_ARGS(switchpoint),
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index 73a80559194..e75c248358f 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1426,12 +1426,12 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
 		if (errormsg)
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read two-phase state from WAL at %X/%X: %s",
+					 errmsg("could not read two-phase state from WAL at " LSN_FORMAT ": %s",
 							LSN_FORMAT_ARGS(lsn), errormsg)));
 		else
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read two-phase state from WAL at %X/%X",
+					 errmsg("could not read two-phase state from WAL at " LSN_FORMAT,
 							LSN_FORMAT_ARGS(lsn))));
 	}
 
@@ -1439,7 +1439,7 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
 		(XLogRecGetInfo(xlogreader) & XLOG_XACT_OPMASK) != XLOG_XACT_PREPARE)
 		ereport(ERROR,
 				(errcode_for_file_access(),
-				 errmsg("expected two-phase state data is not present in WAL at %X/%X",
+				 errmsg("expected two-phase state data is not present in WAL at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lsn))));
 
 	if (len != NULL)
@@ -2512,7 +2512,7 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn,
 			ereport(reachedConsistency ? ERROR : WARNING,
 					(errmsg("could not recover two-phase state file for transaction %u",
 							hdr->xid),
-					 errdetail("Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk.",
+					 errdetail("Two-phase state file has been found in WAL record " LSN_FORMAT ", but this transaction has already been restored from disk.",
 							   LSN_FORMAT_ARGS(start_lsn))));
 			return;
 		}
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 47ffc0a2307..894f2f7b2dd 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -1028,7 +1028,7 @@ XLogInsertRecord(XLogRecData *rdata,
 		oldCxt = MemoryContextSwitchTo(walDebugCxt);
 
 		initStringInfo(&buf);
-		appendStringInfo(&buf, "INSERT @ %X/%X: ", LSN_FORMAT_ARGS(EndPos));
+		appendStringInfo(&buf, "INSERT @ " LSN_FORMAT ": ", LSN_FORMAT_ARGS(EndPos));
 
 		/*
 		 * We have to piece together the WAL record data from the XLogRecData
@@ -1549,7 +1549,7 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto)
 	if (upto > reservedUpto)
 	{
 		ereport(LOG,
-				(errmsg("request to flush past end of generated WAL; request %X/%X, current position %X/%X",
+				(errmsg("request to flush past end of generated WAL; request " LSN_FORMAT ", current position " LSN_FORMAT,
 						LSN_FORMAT_ARGS(upto), LSN_FORMAT_ARGS(reservedUpto))));
 		upto = reservedUpto;
 	}
@@ -1716,7 +1716,7 @@ GetXLogBuffer(XLogRecPtr ptr, TimeLineID tli)
 		endptr = pg_atomic_read_u64(&XLogCtl->xlblocks[idx]);
 
 		if (expectedEndPtr != endptr)
-			elog(PANIC, "could not find WAL buffer for %X/%X",
+			elog(PANIC, "could not find WAL buffer for " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(ptr));
 	}
 	else
@@ -1776,7 +1776,7 @@ WALReadFromBuffers(char *dstbuf, XLogRecPtr startptr, Size count,
 	inserted = pg_atomic_read_u64(&XLogCtl->logInsertResult);
 	if (startptr + count > inserted)
 		ereport(ERROR,
-				errmsg("cannot read past end of generated WAL: requested %X/%X, current position %X/%X",
+				errmsg("cannot read past end of generated WAL: requested " LSN_FORMAT ", current position " LSN_FORMAT,
 					   LSN_FORMAT_ARGS(startptr + count),
 					   LSN_FORMAT_ARGS(inserted)));
 
@@ -2281,7 +2281,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, TimeLineID tli, bool opportunistic)
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG && npages > 0)
 	{
-		elog(DEBUG1, "initialized %d pages, up to %X/%X",
+		elog(DEBUG1, "initialized %d pages, up to " LSN_FORMAT,
 			 npages, LSN_FORMAT_ARGS(NewPageEndPtr));
 	}
 #endif
@@ -2492,7 +2492,7 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible)
 		XLogRecPtr	EndPtr = pg_atomic_read_u64(&XLogCtl->xlblocks[curridx]);
 
 		if (LogwrtResult.Write >= EndPtr)
-			elog(PANIC, "xlog write request %X/%X is past end of log %X/%X",
+			elog(PANIC, "xlog write request " LSN_FORMAT " is past end of log " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(LogwrtResult.Write),
 				 LSN_FORMAT_ARGS(EndPtr));
 
@@ -2892,7 +2892,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
 		newMinRecoveryPoint = GetCurrentReplayRecPtr(&newMinRecoveryPointTLI);
 		if (!force && newMinRecoveryPoint < lsn)
 			elog(WARNING,
-				 "xlog min recovery request %X/%X is past current point %X/%X",
+				 "xlog min recovery request " LSN_FORMAT " is past current point " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(lsn), LSN_FORMAT_ARGS(newMinRecoveryPoint));
 
 		/* update control file */
@@ -2905,7 +2905,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
 			LocalMinRecoveryPointTLI = newMinRecoveryPointTLI;
 
 			ereport(DEBUG2,
-					(errmsg_internal("updated min recovery point to %X/%X on timeline %u",
+					(errmsg_internal("updated min recovery point to " LSN_FORMAT " on timeline %u",
 									 LSN_FORMAT_ARGS(newMinRecoveryPoint),
 									 newMinRecoveryPointTLI)));
 		}
@@ -2945,7 +2945,7 @@ XLogFlush(XLogRecPtr record)
 
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG)
-		elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
+		elog(LOG, "xlog flush request " LSN_FORMAT "; write " LSN_FORMAT "; flush " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(record),
 			 LSN_FORMAT_ARGS(LogwrtResult.Write),
 			 LSN_FORMAT_ARGS(LogwrtResult.Flush));
@@ -3078,7 +3078,7 @@ XLogFlush(XLogRecPtr record)
 	 */
 	if (LogwrtResult.Flush < record)
 		elog(ERROR,
-			 "xlog flush request %X/%X is not satisfied --- flushed only to %X/%X",
+			 "xlog flush request " LSN_FORMAT " is not satisfied --- flushed only to " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(record),
 			 LSN_FORMAT_ARGS(LogwrtResult.Flush));
 }
@@ -3205,7 +3205,7 @@ XLogBackgroundFlush(void)
 
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG)
-		elog(LOG, "xlog bg flush request write %X/%X; flush: %X/%X, current is write %X/%X; flush %X/%X",
+		elog(LOG, "xlog bg flush request write " LSN_FORMAT "; flush: " LSN_FORMAT ", current is write " LSN_FORMAT "; flush " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(WriteRqst.Write),
 			 LSN_FORMAT_ARGS(WriteRqst.Flush),
 			 LSN_FORMAT_ARGS(LogwrtResult.Write),
@@ -6921,7 +6921,7 @@ LogCheckpointEnd(bool restartpoint)
 						"%d removed, %d recycled; write=%ld.%03d s, "
 						"sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, "
 						"longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-						"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X",
+						"estimate=%d kB; lsn=" LSN_FORMAT ", redo lsn=" LSN_FORMAT,
 						CheckpointStats.ckpt_bufs_written,
 						(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
 						CheckpointStats.ckpt_slru_written,
@@ -6945,7 +6945,7 @@ LogCheckpointEnd(bool restartpoint)
 						"%d removed, %d recycled; write=%ld.%03d s, "
 						"sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, "
 						"longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-						"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X",
+						"estimate=%d kB; lsn=" LSN_FORMAT ", redo lsn=" LSN_FORMAT,
 						CheckpointStats.ckpt_bufs_written,
 						(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
 						CheckpointStats.ckpt_slru_written,
@@ -7641,7 +7641,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 	if (!RecoveryInProgress())
 		elog(ERROR, "can only be used at end of recovery");
 	if (pagePtr % XLOG_BLCKSZ != 0)
-		elog(ERROR, "invalid position for missing continuation record %X/%X",
+		elog(ERROR, "invalid position for missing continuation record " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(pagePtr));
 
 	/* The current WAL insert position should be right after the page header */
@@ -7652,7 +7652,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 		startPos += SizeOfXLogShortPHD;
 	recptr = GetXLogInsertRecPtr();
 	if (recptr != startPos)
-		elog(ERROR, "invalid WAL insert position %X/%X for OVERWRITE_CONTRECORD",
+		elog(ERROR, "invalid WAL insert position " LSN_FORMAT " for OVERWRITE_CONTRECORD",
 			 LSN_FORMAT_ARGS(recptr));
 
 	START_CRIT_SECTION();
@@ -7682,7 +7682,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 
 	/* check that the record was inserted to the right place */
 	if (ProcLastRecPtr != startPos)
-		elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position %X/%X",
+		elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(ProcLastRecPtr));
 
 	XLogFlush(recptr);
@@ -7751,7 +7751,7 @@ RecoveryRestartPoint(const CheckPoint *checkPoint, XLogReaderState *record)
 	if (XLogHaveInvalidPages())
 	{
 		elog(DEBUG2,
-			 "could not record restart point at %X/%X because there "
+			 "could not record restart point at " LSN_FORMAT " because there "
 			 "are unresolved references to invalid pages",
 			 LSN_FORMAT_ARGS(checkPoint->redo));
 		return;
@@ -7832,7 +7832,7 @@ CreateRestartPoint(int flags)
 		lastCheckPoint.redo <= ControlFile->checkPointCopy.redo)
 	{
 		ereport(DEBUG2,
-				(errmsg_internal("skipping restartpoint, already performed at %X/%X",
+				(errmsg_internal("skipping restartpoint, already performed at " LSN_FORMAT,
 								 LSN_FORMAT_ARGS(lastCheckPoint.redo))));
 
 		UpdateMinRecoveryPoint(InvalidXLogRecPtr, true);
@@ -8017,7 +8017,7 @@ CreateRestartPoint(int flags)
 
 	xtime = GetLatestXTime();
 	ereport((log_checkpoints ? LOG : DEBUG2),
-			(errmsg("recovery restart point at %X/%X",
+			(errmsg("recovery restart point at " LSN_FORMAT,
 					LSN_FORMAT_ARGS(lastCheckPoint.redo)),
 			 xtime ? errdetail("Last completed transaction was at log time %s.",
 							   timestamptz_to_str(xtime)) : 0));
@@ -8281,7 +8281,7 @@ XLogRestorePoint(const char *rpName)
 	RecPtr = XLogInsert(RM_XLOG_ID, XLOG_RESTORE_POINT);
 
 	ereport(LOG,
-			(errmsg("restore point \"%s\" created at %X/%X",
+			(errmsg("restore point \"%s\" created at " LSN_FORMAT,
 					rpName, LSN_FORMAT_ARGS(RecPtr))));
 
 	return RecPtr;
diff --git a/src/backend/access/transam/xlogbackup.c b/src/backend/access/transam/xlogbackup.c
index 342590e0a46..ee8c57bc187 100644
--- a/src/backend/access/transam/xlogbackup.c
+++ b/src/backend/access/transam/xlogbackup.c
@@ -42,7 +42,7 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 
 	XLByteToSeg(state->startpoint, startsegno, wal_segment_size);
 	XLogFileName(startxlogfile, state->starttli, startsegno, wal_segment_size);
-	appendStringInfo(result, "START WAL LOCATION: %X/%X (file %s)\n",
+	appendStringInfo(result, "START WAL LOCATION: " LSN_FORMAT " (file %s)\n",
 					 LSN_FORMAT_ARGS(state->startpoint), startxlogfile);
 
 	if (ishistoryfile)
@@ -52,11 +52,11 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 
 		XLByteToSeg(state->stoppoint, stopsegno, wal_segment_size);
 		XLogFileName(stopxlogfile, state->stoptli, stopsegno, wal_segment_size);
-		appendStringInfo(result, "STOP WAL LOCATION: %X/%X (file %s)\n",
+		appendStringInfo(result, "STOP WAL LOCATION: " LSN_FORMAT " (file %s)\n",
 						 LSN_FORMAT_ARGS(state->stoppoint), stopxlogfile);
 	}
 
-	appendStringInfo(result, "CHECKPOINT LOCATION: %X/%X\n",
+	appendStringInfo(result, "CHECKPOINT LOCATION: " LSN_FORMAT "\n",
 					 LSN_FORMAT_ARGS(state->checkpointloc));
 	appendStringInfoString(result, "BACKUP METHOD: streamed\n");
 	appendStringInfo(result, "BACKUP FROM: %s\n",
@@ -81,7 +81,7 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 	Assert(XLogRecPtrIsInvalid(state->istartpoint) == (state->istarttli == 0));
 	if (!XLogRecPtrIsInvalid(state->istartpoint))
 	{
-		appendStringInfo(result, "INCREMENTAL FROM LSN: %X/%X\n",
+		appendStringInfo(result, "INCREMENTAL FROM LSN: " LSN_FORMAT "\n",
 						 LSN_FORMAT_ARGS(state->istartpoint));
 		appendStringInfo(result, "INCREMENTAL FROM TLI: %u\n",
 						 state->istarttli);
diff --git a/src/backend/access/transam/xlogprefetcher.c b/src/backend/access/transam/xlogprefetcher.c
index 7735562db01..3d1c5db02db 100644
--- a/src/backend/access/transam/xlogprefetcher.c
+++ b/src/backend/access/transam/xlogprefetcher.c
@@ -546,7 +546,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing all readahead until %X/%X is replayed due to possible TLI change",
+						 "suppressing all readahead until " LSN_FORMAT " is replayed due to possible TLI change",
 						 LSN_FORMAT_ARGS(record->lsn));
 #endif
 
@@ -579,7 +579,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing prefetch in database %u until %X/%X is replayed due to raw file copy",
+						 "suppressing prefetch in database %u until " LSN_FORMAT " is replayed due to raw file copy",
 						 rlocator.dbOid,
 						 LSN_FORMAT_ARGS(record->lsn));
 #endif
@@ -607,7 +607,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 						elog(XLOGPREFETCHER_DEBUG_LEVEL,
-							 "suppressing prefetch in relation %u/%u/%u until %X/%X is replayed, which creates the relation",
+							 "suppressing prefetch in relation %u/%u/%u until " LSN_FORMAT " is replayed, which creates the relation",
 							 xlrec->rlocator.spcOid,
 							 xlrec->rlocator.dbOid,
 							 xlrec->rlocator.relNumber,
@@ -630,7 +630,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, which truncates the relation",
+						 "suppressing prefetch in relation %u/%u/%u from block %u until " LSN_FORMAT " is replayed, which truncates the relation",
 						 xlrec->rlocator.spcOid,
 						 xlrec->rlocator.dbOid,
 						 xlrec->rlocator.relNumber,
@@ -729,7 +729,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 			{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 				elog(XLOGPREFETCHER_DEBUG_LEVEL,
-					 "suppressing all prefetch in relation %u/%u/%u until %X/%X is replayed, because the relation does not exist on disk",
+					 "suppressing all prefetch in relation %u/%u/%u until " LSN_FORMAT " is replayed, because the relation does not exist on disk",
 					 reln->smgr_rlocator.locator.spcOid,
 					 reln->smgr_rlocator.locator.dbOid,
 					 reln->smgr_rlocator.locator.relNumber,
@@ -750,7 +750,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 			{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 				elog(XLOGPREFETCHER_DEBUG_LEVEL,
-					 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, because the relation is too small",
+					 "suppressing prefetch in relation %u/%u/%u from block %u until " LSN_FORMAT " is replayed, because the relation is too small",
 					 reln->smgr_rlocator.locator.spcOid,
 					 reln->smgr_rlocator.locator.dbOid,
 					 reln->smgr_rlocator.locator.relNumber,
@@ -928,7 +928,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator,
 		{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 			elog(XLOGPREFETCHER_DEBUG_LEVEL,
-				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (blocks >= %u filtered)",
+				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN " LSN_FORMAT " is replayed (blocks >= %u filtered)",
 				 rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno,
 				 LSN_FORMAT_ARGS(filter->filter_until_replayed),
 				 filter->filter_from_block);
@@ -944,7 +944,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator,
 		{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 			elog(XLOGPREFETCHER_DEBUG_LEVEL,
-				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (whole database)",
+				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN " LSN_FORMAT " is replayed (whole database)",
 				 rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno,
 				 LSN_FORMAT_ARGS(filter->filter_until_replayed));
 #endif
diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index 2790ade1f91..70503828894 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -617,7 +617,7 @@ restart:
 	}
 	else if (targetRecOff < pageHeaderSize)
 	{
-		report_invalid_record(state, "invalid record offset at %X/%X: expected at least %u, got %u",
+		report_invalid_record(state, "invalid record offset at " LSN_FORMAT ": expected at least %u, got %u",
 							  LSN_FORMAT_ARGS(RecPtr),
 							  pageHeaderSize, targetRecOff);
 		goto err;
@@ -626,7 +626,7 @@ restart:
 	if ((((XLogPageHeader) state->readBuf)->xlp_info & XLP_FIRST_IS_CONTRECORD) &&
 		targetRecOff == pageHeaderSize)
 	{
-		report_invalid_record(state, "contrecord is requested by %X/%X",
+		report_invalid_record(state, "contrecord is requested by " LSN_FORMAT,
 							  LSN_FORMAT_ARGS(RecPtr));
 		goto err;
 	}
@@ -667,7 +667,7 @@ restart:
 		if (total_len < SizeOfXLogRecord)
 		{
 			report_invalid_record(state,
-								  "invalid record length at %X/%X: expected at least %u, got %u",
+								  "invalid record length at " LSN_FORMAT ": expected at least %u, got %u",
 								  LSN_FORMAT_ARGS(RecPtr),
 								  (uint32) SizeOfXLogRecord, total_len);
 			goto err;
@@ -756,7 +756,7 @@ restart:
 			if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD))
 			{
 				report_invalid_record(state,
-									  "there is no contrecord flag at %X/%X",
+									  "there is no contrecord flag at " LSN_FORMAT,
 									  LSN_FORMAT_ARGS(RecPtr));
 				goto err;
 			}
@@ -769,7 +769,7 @@ restart:
 				total_len != (pageHeader->xlp_rem_len + gotlen))
 			{
 				report_invalid_record(state,
-									  "invalid contrecord length %u (expected %lld) at %X/%X",
+									  "invalid contrecord length %u (expected %lld) at " LSN_FORMAT,
 									  pageHeader->xlp_rem_len,
 									  ((long long) total_len) - gotlen,
 									  LSN_FORMAT_ARGS(RecPtr));
@@ -1132,7 +1132,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 	if (record->xl_tot_len < SizeOfXLogRecord)
 	{
 		report_invalid_record(state,
-							  "invalid record length at %X/%X: expected at least %u, got %u",
+							  "invalid record length at " LSN_FORMAT ": expected at least %u, got %u",
 							  LSN_FORMAT_ARGS(RecPtr),
 							  (uint32) SizeOfXLogRecord, record->xl_tot_len);
 		return false;
@@ -1140,7 +1140,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 	if (!RmgrIdIsValid(record->xl_rmid))
 	{
 		report_invalid_record(state,
-							  "invalid resource manager ID %u at %X/%X",
+							  "invalid resource manager ID %u at " LSN_FORMAT,
 							  record->xl_rmid, LSN_FORMAT_ARGS(RecPtr));
 		return false;
 	}
@@ -1153,7 +1153,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 		if (!(record->xl_prev < RecPtr))
 		{
 			report_invalid_record(state,
-								  "record with incorrect prev-link %X/%X at %X/%X",
+								  "record with incorrect prev-link " LSN_FORMAT " at " LSN_FORMAT,
 								  LSN_FORMAT_ARGS(record->xl_prev),
 								  LSN_FORMAT_ARGS(RecPtr));
 			return false;
@@ -1169,7 +1169,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 		if (record->xl_prev != PrevRecPtr)
 		{
 			report_invalid_record(state,
-								  "record with incorrect prev-link %X/%X at %X/%X",
+								  "record with incorrect prev-link " LSN_FORMAT " at " LSN_FORMAT,
 								  LSN_FORMAT_ARGS(record->xl_prev),
 								  LSN_FORMAT_ARGS(RecPtr));
 			return false;
@@ -1207,7 +1207,7 @@ ValidXLogRecord(XLogReaderState *state, XLogRecord *record, XLogRecPtr recptr)
 	if (!EQ_CRC32C(record->xl_crc, crc))
 	{
 		report_invalid_record(state,
-							  "incorrect resource manager data checksum in record at %X/%X",
+							  "incorrect resource manager data checksum in record at " LSN_FORMAT,
 							  LSN_FORMAT_ARGS(recptr));
 		return false;
 	}
@@ -1241,7 +1241,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid magic number %04X in WAL segment %s, LSN " LSN_FORMAT ", offset %u",
 							  hdr->xlp_magic,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1256,7 +1256,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid info bits %04X in WAL segment %s, LSN " LSN_FORMAT ", offset %u",
 							  hdr->xlp_info,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1298,7 +1298,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 
 		/* hmm, first page of file doesn't have a long header? */
 		report_invalid_record(state,
-							  "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid info bits %04X in WAL segment %s, LSN " LSN_FORMAT ", offset %u",
 							  hdr->xlp_info,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1318,7 +1318,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u",
+							  "unexpected pageaddr " LSN_FORMAT " in WAL segment %s, LSN " LSN_FORMAT ", offset %u",
 							  LSN_FORMAT_ARGS(hdr->xlp_pageaddr),
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1344,7 +1344,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 			XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 			report_invalid_record(state,
-								  "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u",
+								  "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN " LSN_FORMAT ", offset %u",
 								  hdr->xlp_tli,
 								  state->latestPageTLI,
 								  fname,
@@ -1756,7 +1756,7 @@ DecodeXLogRecord(XLogReaderState *state,
 			if (block_id <= decoded->max_block_id)
 			{
 				report_invalid_record(state,
-									  "out-of-order block_id %u at %X/%X",
+									  "out-of-order block_id %u at " LSN_FORMAT,
 									  block_id,
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
@@ -1780,14 +1780,14 @@ DecodeXLogRecord(XLogReaderState *state,
 			if (blk->has_data && blk->data_len == 0)
 			{
 				report_invalid_record(state,
-									  "BKPBLOCK_HAS_DATA set, but no data included at %X/%X",
+									  "BKPBLOCK_HAS_DATA set, but no data included at " LSN_FORMAT,
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
 			}
 			if (!blk->has_data && blk->data_len != 0)
 			{
 				report_invalid_record(state,
-									  "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X",
+									  "BKPBLOCK_HAS_DATA not set, but data length is %u at " LSN_FORMAT,
 									  (unsigned int) blk->data_len,
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
@@ -1823,7 +1823,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					 blk->bimg_len == BLCKSZ))
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X",
+										  "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at " LSN_FORMAT,
 										  (unsigned int) blk->hole_offset,
 										  (unsigned int) blk->hole_length,
 										  (unsigned int) blk->bimg_len,
@@ -1839,7 +1839,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					(blk->hole_offset != 0 || blk->hole_length != 0))
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X",
+										  "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at " LSN_FORMAT,
 										  (unsigned int) blk->hole_offset,
 										  (unsigned int) blk->hole_length,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
@@ -1853,7 +1853,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					blk->bimg_len == BLCKSZ)
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X",
+										  "BKPIMAGE_COMPRESSED set, but block image length %u at " LSN_FORMAT,
 										  (unsigned int) blk->bimg_len,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
@@ -1868,7 +1868,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					blk->bimg_len != BLCKSZ)
 				{
 					report_invalid_record(state,
-										  "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X",
+										  "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at " LSN_FORMAT,
 										  (unsigned int) blk->data_len,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
@@ -1884,7 +1884,7 @@ DecodeXLogRecord(XLogReaderState *state,
 				if (rlocator == NULL)
 				{
 					report_invalid_record(state,
-										  "BKPBLOCK_SAME_REL set but no previous rel at %X/%X",
+										  "BKPBLOCK_SAME_REL set but no previous rel at " LSN_FORMAT,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
 				}
@@ -1896,7 +1896,7 @@ DecodeXLogRecord(XLogReaderState *state,
 		else
 		{
 			report_invalid_record(state,
-								  "invalid block_id %u at %X/%X",
+								  "invalid block_id %u at " LSN_FORMAT,
 								  block_id, LSN_FORMAT_ARGS(state->ReadRecPtr));
 			goto err;
 		}
@@ -1963,7 +1963,7 @@ DecodeXLogRecord(XLogReaderState *state,
 
 shortdata_err:
 	report_invalid_record(state,
-						  "record with invalid length at %X/%X",
+						  "record with invalid length at " LSN_FORMAT,
 						  LSN_FORMAT_ARGS(state->ReadRecPtr));
 err:
 	*errormsg = state->errormsg_buf;
@@ -2073,14 +2073,14 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		!record->record->blocks[block_id].in_use)
 	{
 		report_invalid_record(record,
-							  "could not restore image at %X/%X with invalid block %d specified",
+							  "could not restore image at " LSN_FORMAT " with invalid block %d specified",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
 							  block_id);
 		return false;
 	}
 	if (!record->record->blocks[block_id].has_image)
 	{
-		report_invalid_record(record, "could not restore image at %X/%X with invalid state, block %d",
+		report_invalid_record(record, "could not restore image at " LSN_FORMAT " with invalid state, block %d",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
 							  block_id);
 		return false;
@@ -2107,7 +2107,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 									bkpb->bimg_len, BLCKSZ - bkpb->hole_length) <= 0)
 				decomp_success = false;
 #else
-			report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d",
+			report_invalid_record(record, "could not restore image at " LSN_FORMAT " compressed with %s not supported by build, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  "LZ4",
 								  block_id);
@@ -2124,7 +2124,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 			if (ZSTD_isError(decomp_result))
 				decomp_success = false;
 #else
-			report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d",
+			report_invalid_record(record, "could not restore image at " LSN_FORMAT " compressed with %s not supported by build, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  "zstd",
 								  block_id);
@@ -2133,7 +2133,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		}
 		else
 		{
-			report_invalid_record(record, "could not restore image at %X/%X compressed with unknown method, block %d",
+			report_invalid_record(record, "could not restore image at " LSN_FORMAT " compressed with unknown method, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  block_id);
 			return false;
@@ -2141,7 +2141,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 
 		if (!decomp_success)
 		{
-			report_invalid_record(record, "could not decompress image at %X/%X, block %d",
+			report_invalid_record(record, "could not decompress image at " LSN_FORMAT ", block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  block_id);
 			return false;
diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c
index 6ce979f2d8b..9c5626f8f03 100644
--- a/src/backend/access/transam/xlogrecovery.c
+++ b/src/backend/access/transam/xlogrecovery.c
@@ -620,7 +620,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		 * than ControlFile->checkPoint is used.
 		 */
 		ereport(LOG,
-				(errmsg("starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u",
+				(errmsg("starting backup recovery with redo LSN " LSN_FORMAT ", checkpoint LSN " LSN_FORMAT ", on timeline ID %u",
 						LSN_FORMAT_ARGS(RedoStartLSN),
 						LSN_FORMAT_ARGS(CheckPointLoc),
 						CheckPointTLI)));
@@ -636,7 +636,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 			memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint));
 			wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN);
 			ereport(DEBUG1,
-					(errmsg_internal("checkpoint record is at %X/%X",
+					(errmsg_internal("checkpoint record is at " LSN_FORMAT,
 									 LSN_FORMAT_ARGS(CheckPointLoc))));
 			InRecovery = true;	/* force recovery even if SHUTDOWNED */
 
@@ -652,7 +652,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 				if (!ReadRecord(xlogprefetcher, LOG, false,
 								checkPoint.ThisTimeLineID))
 					ereport(FATAL,
-							(errmsg("could not find redo location %X/%X referenced by checkpoint record at %X/%X",
+							(errmsg("could not find redo location " LSN_FORMAT " referenced by checkpoint record at " LSN_FORMAT,
 									LSN_FORMAT_ARGS(checkPoint.redo), LSN_FORMAT_ARGS(CheckPointLoc)),
 							 errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n"
 									 "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n"
@@ -663,7 +663,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		else
 		{
 			ereport(FATAL,
-					(errmsg("could not locate required checkpoint record at %X/%X",
+					(errmsg("could not locate required checkpoint record at " LSN_FORMAT,
 							LSN_FORMAT_ARGS(CheckPointLoc)),
 					 errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n"
 							 "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n"
@@ -773,7 +773,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		 */
 		if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
 			ereport(LOG,
-					(errmsg("restarting backup recovery with redo LSN %X/%X",
+					(errmsg("restarting backup recovery with redo LSN " LSN_FORMAT,
 							LSN_FORMAT_ARGS(ControlFile->backupStartPoint))));
 
 		/* Get the last valid checkpoint record. */
@@ -786,7 +786,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		if (record != NULL)
 		{
 			ereport(DEBUG1,
-					(errmsg_internal("checkpoint record is at %X/%X",
+					(errmsg_internal("checkpoint record is at " LSN_FORMAT,
 									 LSN_FORMAT_ARGS(CheckPointLoc))));
 		}
 		else
@@ -798,7 +798,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 			 * simplify processing around checkpoints.
 			 */
 			ereport(PANIC,
-					(errmsg("could not locate a valid checkpoint record at %X/%X",
+					(errmsg("could not locate a valid checkpoint record at " LSN_FORMAT,
 							LSN_FORMAT_ARGS(CheckPointLoc))));
 		}
 		memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint));
@@ -824,7 +824,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 							recoveryTargetName)));
 		else if (recoveryTarget == RECOVERY_TARGET_LSN)
 			ereport(LOG,
-					(errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%X\"",
+					(errmsg("starting point-in-time recovery to WAL location (LSN) \"" LSN_FORMAT "\"",
 							LSN_FORMAT_ARGS(recoveryTargetLSN))));
 		else if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE)
 			ereport(LOG,
@@ -855,7 +855,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 				(errmsg("requested timeline %u is not a child of this server's history",
 						recoveryTargetTLI),
 		/* translator: %s is a backup_label file or a pg_control file */
-				 errdetail("Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X.",
+				 errdetail("Latest checkpoint in file \"%s\" is at " LSN_FORMAT " on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at " LSN_FORMAT ".",
 						   haveBackupLabel ? "backup_label" : "pg_control",
 						   LSN_FORMAT_ARGS(CheckPointLoc),
 						   CheckPointTLI,
@@ -870,13 +870,13 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) !=
 		ControlFile->minRecoveryPointTLI)
 		ereport(FATAL,
-				(errmsg("requested timeline %u does not contain minimum recovery point %X/%X on timeline %u",
+				(errmsg("requested timeline %u does not contain minimum recovery point " LSN_FORMAT " on timeline %u",
 						recoveryTargetTLI,
 						LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint),
 						ControlFile->minRecoveryPointTLI)));
 
 	ereport(DEBUG1,
-			(errmsg_internal("redo record is at %X/%X; shutdown %s",
+			(errmsg_internal("redo record is at " LSN_FORMAT "; shutdown %s",
 							 LSN_FORMAT_ARGS(checkPoint.redo),
 							 wasShutdown ? "true" : "false")));
 	ereport(DEBUG1,
@@ -1253,14 +1253,14 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI,
 	 * is pretty crude, but we are not expecting any variability in the file
 	 * format).
 	 */
-	if (fscanf(lfp, "START WAL LOCATION: %X/%X (file %08X%16s)%c",
+	if (fscanf(lfp, "START WAL LOCATION: " LSN_FORMAT " (file %08X%16s)%c",
 			   &hi, &lo, &tli_from_walseg, startxlogfilename, &ch) != 5 || ch != '\n')
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				 errmsg("invalid data in file \"%s\"", BACKUP_LABEL_FILE)));
 	RedoStartLSN = ((uint64) hi) << 32 | lo;
 	RedoStartTLI = tli_from_walseg;
-	if (fscanf(lfp, "CHECKPOINT LOCATION: %X/%X%c",
+	if (fscanf(lfp, "CHECKPOINT LOCATION: " LSN_FORMAT "%c",
 			   &hi, &lo, &ch) != 3 || ch != '\n')
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
@@ -1332,7 +1332,7 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI,
 								 tli_from_file, BACKUP_LABEL_FILE)));
 	}
 
-	if (fscanf(lfp, "INCREMENTAL FROM LSN: %X/%X\n", &hi, &lo) > 0)
+	if (fscanf(lfp, "INCREMENTAL FROM LSN: " LSN_FORMAT "\n", &hi, &lo) > 0)
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				 errmsg("this is an incremental backup, not a data directory"),
@@ -1722,7 +1722,7 @@ PerformWalRecovery(void)
 		if (record->xl_rmid != RM_XLOG_ID ||
 			(record->xl_info & ~XLR_INFO_MASK) != XLOG_CHECKPOINT_REDO)
 			ereport(FATAL,
-					(errmsg("unexpected record type found at redo point %X/%X",
+					(errmsg("unexpected record type found at redo point " LSN_FORMAT,
 							LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))));
 	}
 	else
@@ -1745,7 +1745,7 @@ PerformWalRecovery(void)
 		RmgrStartup();
 
 		ereport(LOG,
-				(errmsg("redo starts at %X/%X",
+				(errmsg("redo starts at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))));
 
 		/* Prepare to report progress of the redo phase. */
@@ -1758,7 +1758,7 @@ PerformWalRecovery(void)
 		do
 		{
 			if (!StandbyMode)
-				ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X",
+				ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: " LSN_FORMAT,
 										 LSN_FORMAT_ARGS(xlogreader->ReadRecPtr));
 
 #ifdef WAL_DEBUG
@@ -1767,7 +1767,7 @@ PerformWalRecovery(void)
 				StringInfoData buf;
 
 				initStringInfo(&buf);
-				appendStringInfo(&buf, "REDO @ %X/%X; LSN %X/%X: ",
+				appendStringInfo(&buf, "REDO @ " LSN_FORMAT "; LSN " LSN_FORMAT ": ",
 								 LSN_FORMAT_ARGS(xlogreader->ReadRecPtr),
 								 LSN_FORMAT_ARGS(xlogreader->EndRecPtr));
 				xlog_outrec(&buf, xlogreader);
@@ -1880,7 +1880,7 @@ PerformWalRecovery(void)
 		RmgrCleanup();
 
 		ereport(LOG,
-				(errmsg("redo done at %X/%X system usage: %s",
+				(errmsg("redo done at " LSN_FORMAT " system usage: %s",
 						LSN_FORMAT_ARGS(xlogreader->ReadRecPtr),
 						pg_rusage_show(&ru0))));
 		xtime = GetLatestXTime();
@@ -2092,7 +2092,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 
 		memcpy(&xlrec, XLogRecGetData(record), sizeof(xl_overwrite_contrecord));
 		if (xlrec.overwritten_lsn != record->overwrittenRecPtr)
-			elog(FATAL, "mismatching overwritten LSN %X/%X -> %X/%X",
+			elog(FATAL, "mismatching overwritten LSN " LSN_FORMAT " -> " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 				 LSN_FORMAT_ARGS(record->overwrittenRecPtr));
 
@@ -2101,7 +2101,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 		missingContrecPtr = InvalidXLogRecPtr;
 
 		ereport(LOG,
-				(errmsg("successfully skipped missing contrecord at %X/%X, overwritten at %s",
+				(errmsg("successfully skipped missing contrecord at " LSN_FORMAT ", overwritten at %s",
 						LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 						timestamptz_to_str(xlrec.overwrite_time))));
 
@@ -2129,7 +2129,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 			backupEndPoint = lsn;
 		}
 		else
-			elog(DEBUG1, "saw end-of-backup record for backup starting at %X/%X, waiting for %X/%X",
+			elog(DEBUG1, "saw end-of-backup record for backup starting at " LSN_FORMAT ", waiting for " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(startpoint), LSN_FORMAT_ARGS(backupStartPoint));
 	}
 }
@@ -2224,7 +2224,7 @@ CheckRecoveryConsistency(void)
 		backupEndRequired = false;
 
 		ereport(LOG,
-				(errmsg("completed backup recovery with redo LSN %X/%X and end LSN %X/%X",
+				(errmsg("completed backup recovery with redo LSN " LSN_FORMAT " and end LSN " LSN_FORMAT,
 						LSN_FORMAT_ARGS(saveBackupStartPoint),
 						LSN_FORMAT_ARGS(saveBackupEndPoint))));
 	}
@@ -2255,7 +2255,7 @@ CheckRecoveryConsistency(void)
 		reachedConsistency = true;
 		SendPostmasterSignal(PMSIGNAL_RECOVERY_CONSISTENT);
 		ereport(LOG,
-				(errmsg("consistent recovery state reached at %X/%X",
+				(errmsg("consistent recovery state reached at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lastReplayedEndRecPtr))));
 	}
 
@@ -2293,7 +2293,7 @@ rm_redo_error_callback(void *arg)
 	xlog_block_info(&buf, record);
 
 	/* translator: %s is a WAL record description */
-	errcontext("WAL redo at %X/%X for %s",
+	errcontext("WAL redo at " LSN_FORMAT " for %s",
 			   LSN_FORMAT_ARGS(record->ReadRecPtr),
 			   buf.data);
 
@@ -2328,7 +2328,7 @@ xlog_outdesc(StringInfo buf, XLogReaderState *record)
 static void
 xlog_outrec(StringInfo buf, XLogReaderState *record)
 {
-	appendStringInfo(buf, "prev %X/%X; xid %u",
+	appendStringInfo(buf, "prev " LSN_FORMAT "; xid %u",
 					 LSN_FORMAT_ARGS(XLogRecGetPrev(record)),
 					 XLogRecGetXid(record));
 
@@ -2416,7 +2416,7 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI, TimeLineID prevTLI,
 		lsn < minRecoveryPoint &&
 		newTLI > minRecoveryPointTLI)
 		ereport(PANIC,
-				(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u",
+				(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point " LSN_FORMAT " on timeline %u",
 						newTLI,
 						LSN_FORMAT_ARGS(minRecoveryPoint),
 						minRecoveryPointTLI)));
@@ -2621,7 +2621,7 @@ recoveryStopsBefore(XLogReaderState *record)
 		recoveryStopTime = 0;
 		recoveryStopName[0] = '\0';
 		ereport(LOG,
-				(errmsg("recovery stopping before WAL location (LSN) \"%X/%X\"",
+				(errmsg("recovery stopping before WAL location (LSN) \"" LSN_FORMAT "\"",
 						LSN_FORMAT_ARGS(recoveryStopLSN))));
 		return true;
 	}
@@ -2789,7 +2789,7 @@ recoveryStopsAfter(XLogReaderState *record)
 		recoveryStopTime = 0;
 		recoveryStopName[0] = '\0';
 		ereport(LOG,
-				(errmsg("recovery stopping after WAL location (LSN) \"%X/%X\"",
+				(errmsg("recovery stopping after WAL location (LSN) \"" LSN_FORMAT "\"",
 						LSN_FORMAT_ARGS(recoveryStopLSN))));
 		return true;
 	}
@@ -2910,7 +2910,7 @@ getRecoveryStopReason(void)
 				 timestamptz_to_str(recoveryStopTime));
 	else if (recoveryTarget == RECOVERY_TARGET_LSN)
 		snprintf(reason, sizeof(reason),
-				 "%s LSN %X/%X\n",
+				 "%s LSN " LSN_FORMAT "\n",
 				 recoveryStopAfter ? "after" : "before",
 				 LSN_FORMAT_ARGS(recoveryStopLSN));
 	else if (recoveryTarget == RECOVERY_TARGET_NAME)
@@ -3213,7 +3213,7 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode,
 			XLogFileName(fname, xlogreader->seg.ws_tli, segno,
 						 wal_segment_size);
 			ereport(emode_for_corrupt_record(emode, xlogreader->EndRecPtr),
-					(errmsg("unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u",
+					(errmsg("unexpected timeline ID %u in WAL segment %s, LSN " LSN_FORMAT ", offset %u",
 							xlogreader->latestPageTLI,
 							fname,
 							LSN_FORMAT_ARGS(xlogreader->latestPagePtr),
@@ -3429,14 +3429,14 @@ retry:
 			errno = save_errno;
 			ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
 					(errcode_for_file_access(),
-					 errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: %m",
+					 errmsg("could not read from WAL segment %s, LSN " LSN_FORMAT ", offset %u: %m",
 							fname, LSN_FORMAT_ARGS(targetPagePtr),
 							readOff)));
 		}
 		else
 			ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
 					(errcode(ERRCODE_DATA_CORRUPTED),
-					 errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu",
+					 errmsg("could not read from WAL segment %s, LSN " LSN_FORMAT ", offset %u: read %d of %zu",
 							fname, LSN_FORMAT_ARGS(targetPagePtr),
 							readOff, r, (Size) XLOG_BLCKSZ)));
 		goto next_record_is_invalid;
@@ -3718,7 +3718,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
 						wait_time = wal_retrieve_retry_interval -
 							TimestampDifferenceMilliseconds(last_fail_time, now);
 
-						elog(LOG, "waiting for WAL to become available at %X/%X",
+						elog(LOG, "waiting for WAL to become available at " LSN_FORMAT,
 							 LSN_FORMAT_ARGS(RecPtr));
 
 						/* Do background tasks that might benefit us later. */
@@ -3864,7 +3864,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
 							tli = tliOfPointInHistory(tliRecPtr, expectedTLEs);
 
 							if (curFileTLI > 0 && tli < curFileTLI)
-								elog(ERROR, "according to history file, WAL location %X/%X belongs to timeline %u, but previous recovered WAL file came from timeline %u",
+								elog(ERROR, "according to history file, WAL location " LSN_FORMAT " belongs to timeline %u, but previous recovered WAL file came from timeline %u",
 									 LSN_FORMAT_ARGS(tliRecPtr),
 									 tli, curFileTLI);
 						}
@@ -4177,7 +4177,7 @@ rescanLatestTimeLine(TimeLineID replayTLI, XLogRecPtr replayLSN)
 	if (currentTle->end < replayLSN)
 	{
 		ereport(LOG,
-				(errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%X",
+				(errmsg("new timeline %u forked off current database system timeline %u before current recovery point " LSN_FORMAT,
 						newtarget,
 						replayTLI,
 						LSN_FORMAT_ARGS(replayLSN))));
diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index c389b27f77d..20c7cb9de0e 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -795,7 +795,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage,
 
 		list_free_deep(timelineHistory);
 
-		elog(DEBUG3, "switched to timeline %u valid until %X/%X",
+		elog(DEBUG3, "switched to timeline %u valid until " LSN_FORMAT,
 			 state->currTLI,
 			 LSN_FORMAT_ARGS(state->currTLIValidUntil));
 	}
diff --git a/src/backend/backup/backup_manifest.c b/src/backend/backup/backup_manifest.c
index 22e2be37c95..4d26c72f402 100644
--- a/src/backend/backup/backup_manifest.c
+++ b/src/backend/backup/backup_manifest.c
@@ -281,7 +281,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr,
 		}
 
 		AppendToManifest(manifest,
-						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
+						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"" LSN_FORMAT "\", \"End-LSN\": \"" LSN_FORMAT "\" }",
 						 first_wal_range ? "" : ",\n",
 						 entry->tli,
 						 LSN_FORMAT_ARGS(tl_beginptr),
diff --git a/src/backend/backup/basebackup_copy.c b/src/backend/backup/basebackup_copy.c
index a284ce318ff..7b6f8c36327 100644
--- a/src/backend/backup/basebackup_copy.c
+++ b/src/backend/backup/basebackup_copy.c
@@ -361,7 +361,7 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli)
 	tstate = begin_tup_output_tupdesc(dest, tupdesc, &TTSOpsVirtual);
 
 	/* Data row */
-	values[0] = CStringGetTextDatum(psprintf("%X/%X", LSN_FORMAT_ARGS(ptr)));
+	values[0] = CStringGetTextDatum(psprintf(LSN_FORMAT, LSN_FORMAT_ARGS(ptr)));
 	values[1] = Int64GetDatum(tli);
 	do_tup_output(tstate, values, nulls);
 
diff --git a/src/backend/backup/basebackup_incremental.c b/src/backend/backup/basebackup_incremental.c
index 28491b1e0ab..874fbd732cd 100644
--- a/src/backend/backup/basebackup_incremental.c
+++ b/src/backend/backup/basebackup_incremental.c
@@ -409,7 +409,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->start_lsn < tlep[i]->begin)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X",
+						 errmsg("manifest requires WAL from initial timeline %u starting at " LSN_FORMAT ", but that timeline begins at " LSN_FORMAT,
 								range->tli,
 								LSN_FORMAT_ARGS(range->start_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->begin))));
@@ -419,7 +419,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->start_lsn != tlep[i]->begin)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X",
+						 errmsg("manifest requires WAL from continuation timeline %u starting at " LSN_FORMAT ", but that timeline begins at " LSN_FORMAT,
 								range->tli,
 								LSN_FORMAT_ARGS(range->start_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->begin))));
@@ -430,7 +430,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->end_lsn > backup_state->startpoint)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X",
+						 errmsg("manifest requires WAL from final timeline %u ending at " LSN_FORMAT ", but this backup starts at " LSN_FORMAT,
 								range->tli,
 								LSN_FORMAT_ARGS(range->end_lsn),
 								LSN_FORMAT_ARGS(backup_state->startpoint)),
@@ -441,7 +441,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->end_lsn != tlep[i]->end)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X",
+						 errmsg("manifest requires WAL from non-final timeline %u ending at " LSN_FORMAT ", but this server switched timelines at " LSN_FORMAT,
 								range->tli,
 								LSN_FORMAT_ARGS(range->end_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->end))));
@@ -522,18 +522,18 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (XLogRecPtrIsInvalid(tli_missing_lsn))
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist",
+						 errmsg("WAL summaries are required on timeline %u from " LSN_FORMAT " to " LSN_FORMAT ", but no summaries for that timeline and LSN range exist",
 								tle->tli,
 								LSN_FORMAT_ARGS(tli_start_lsn),
 								LSN_FORMAT_ARGS(tli_end_lsn))));
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete",
+						 errmsg("WAL summaries are required on timeline %u from " LSN_FORMAT " to " LSN_FORMAT ", but the summaries for that timeline and LSN range are incomplete",
 								tle->tli,
 								LSN_FORMAT_ARGS(tli_start_lsn),
 								LSN_FORMAT_ARGS(tli_end_lsn)),
-						 errdetail("The first unsummarized LSN in this range is %X/%X.",
+						 errdetail("The first unsummarized LSN in this range is " LSN_FORMAT ".",
 								   LSN_FORMAT_ARGS(tli_missing_lsn))));
 		}
 
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 4ff246cd943..647886caebf 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -1539,7 +1539,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
 					if (!XLogRecPtrIsInvalid(remote_lsn) && opts.lsn < remote_lsn)
 						ereport(ERROR,
 								(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-								 errmsg("skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X",
+								 errmsg("skip WAL location (LSN " LSN_FORMAT ") must be greater than origin LSN " LSN_FORMAT,
 										LSN_FORMAT_ARGS(opts.lsn),
 										LSN_FORMAT_ARGS(remote_lsn))));
 				}
diff --git a/src/backend/postmaster/walsummarizer.c b/src/backend/postmaster/walsummarizer.c
index 0fec4f1f871..bf656879618 100644
--- a/src/backend/postmaster/walsummarizer.c
+++ b/src/backend/postmaster/walsummarizer.c
@@ -385,7 +385,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
 
 			switch_lsn = tliSwitchPoint(current_tli, tles, &switch_tli);
 			ereport(DEBUG1,
-					errmsg_internal("switch point from TLI %u to TLI %u is at %X/%X",
+					errmsg_internal("switch point from TLI %u to TLI %u is at " LSN_FORMAT,
 									current_tli, switch_tli, LSN_FORMAT_ARGS(switch_lsn)));
 		}
 
@@ -741,7 +741,7 @@ WaitForWalSummarization(XLogRecPtr lsn)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 						 errmsg("WAL summarization is not progressing"),
-						 errdetail("Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory.",
+						 errdetail("Summarization is needed through " LSN_FORMAT ", but is stuck at " LSN_FORMAT " on disk and " LSN_FORMAT " in memory.",
 								   LSN_FORMAT_ARGS(lsn),
 								   LSN_FORMAT_ARGS(summarized_lsn),
 								   LSN_FORMAT_ARGS(pending_lsn))));
@@ -755,12 +755,12 @@ WaitForWalSummarization(XLogRecPtr lsn)
 												current_time) / 1000;
 			ereport(WARNING,
 					(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-					 errmsg_plural("still waiting for WAL summarization through %X/%X after %ld second",
-								   "still waiting for WAL summarization through %X/%X after %ld seconds",
+					 errmsg_plural("still waiting for WAL summarization through " LSN_FORMAT " after %ld second",
+								   "still waiting for WAL summarization through " LSN_FORMAT " after %ld seconds",
 								   elapsed_seconds,
 								   LSN_FORMAT_ARGS(lsn),
 								   elapsed_seconds),
-					 errdetail("Summarization has reached %X/%X on disk and %X/%X in memory.",
+					 errdetail("Summarization has reached " LSN_FORMAT " on disk and " LSN_FORMAT " in memory.",
 							   LSN_FORMAT_ARGS(summarized_lsn),
 							   LSN_FORMAT_ARGS(pending_lsn))));
 		}
@@ -981,7 +981,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			if (private_data->end_of_wal)
 			{
 				ereport(DEBUG1,
-						errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X",
+						errmsg_internal("could not read WAL from timeline %u at " LSN_FORMAT ": end of WAL at " LSN_FORMAT,
 										tli,
 										LSN_FORMAT_ARGS(start_lsn),
 										LSN_FORMAT_ARGS(private_data->read_upto)));
@@ -1000,7 +1000,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			}
 			else
 				ereport(ERROR,
-						(errmsg("could not find a valid record after %X/%X",
+						(errmsg("could not find a valid record after " LSN_FORMAT,
 								LSN_FORMAT_ARGS(start_lsn))));
 		}
 
@@ -1034,7 +1034,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 				 * able to read a complete record.
 				 */
 				ereport(DEBUG1,
-						errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X",
+						errmsg_internal("could not read WAL from timeline %u at " LSN_FORMAT ": end of WAL at " LSN_FORMAT,
 										tli,
 										LSN_FORMAT_ARGS(xlogreader->EndRecPtr),
 										LSN_FORMAT_ARGS(private_data->read_upto)));
@@ -1045,13 +1045,13 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			if (errormsg)
 				ereport(ERROR,
 						(errcode_for_file_access(),
-						 errmsg("could not read WAL from timeline %u at %X/%X: %s",
+						 errmsg("could not read WAL from timeline %u at " LSN_FORMAT ": %s",
 								tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr),
 								errormsg)));
 			else
 				ereport(ERROR,
 						(errcode_for_file_access(),
-						 errmsg("could not read WAL from timeline %u at %X/%X",
+						 errmsg("could not read WAL from timeline %u at " LSN_FORMAT,
 								tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 		}
 
@@ -1222,7 +1222,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 
 		/* Tell the user what we did. */
 		ereport(DEBUG1,
-				errmsg_internal("summarized WAL on TLI %u from %X/%X to %X/%X",
+				errmsg_internal("summarized WAL on TLI %u from " LSN_FORMAT " to " LSN_FORMAT,
 								tli,
 								LSN_FORMAT_ARGS(summary_start_lsn),
 								LSN_FORMAT_ARGS(summary_end_lsn)));
@@ -1234,7 +1234,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 	/* If we skipped a non-zero amount of WAL, log a debug message. */
 	if (summary_end_lsn > summary_start_lsn && fast_forward)
 		ereport(DEBUG1,
-				errmsg_internal("skipped summarizing WAL on TLI %u from %X/%X to %X/%X",
+				errmsg_internal("skipped summarizing WAL on TLI %u from " LSN_FORMAT " to " LSN_FORMAT,
 								tli,
 								LSN_FORMAT_ARGS(summary_start_lsn),
 								LSN_FORMAT_ARGS(summary_end_lsn)));
@@ -1580,7 +1580,7 @@ summarizer_read_local_xlog_page(XLogReaderState *state,
 
 					/* Debugging output. */
 					ereport(DEBUG1,
-							errmsg_internal("timeline %u became historic, can read up to %X/%X",
+							errmsg_internal("timeline %u became historic, can read up to " LSN_FORMAT,
 											private_data->tli, LSN_FORMAT_ARGS(private_data->read_upto)));
 				}
 
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 7b4ddf7a8f5..3a6b60c7b50 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -534,7 +534,7 @@ libpqrcv_startstreaming(WalReceiverConn *conn,
 	if (options->logical)
 		appendStringInfoString(&cmd, " LOGICAL");
 
-	appendStringInfo(&cmd, " %X/%X", LSN_FORMAT_ARGS(options->startpoint));
+	appendStringInfo(&cmd, " " LSN_FORMAT, LSN_FORMAT_ARGS(options->startpoint));
 
 	/*
 	 * Additional options are different depending on if we are doing logical
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index f1eb798f3e9..f25e2a0d2d6 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -567,7 +567,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 		 * kinds of client errors; so the client may wish to check that
 		 * confirmed_flush_lsn matches its expectations.
 		 */
-		elog(LOG, "%X/%X has been already streamed, forwarding to %X/%X",
+		elog(LOG, "" LSN_FORMAT " has been already streamed, forwarding to " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(start_lsn),
 			 LSN_FORMAT_ARGS(slot->data.confirmed_flush));
 
@@ -610,7 +610,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 	ereport(LOG,
 			(errmsg("starting logical decoding for slot \"%s\"",
 					NameStr(slot->data.name)),
-			 errdetail("Streaming transactions committing after %X/%X, reading WAL from %X/%X.",
+			 errdetail("Streaming transactions committing after " LSN_FORMAT ", reading WAL from " LSN_FORMAT ".",
 					   LSN_FORMAT_ARGS(slot->data.confirmed_flush),
 					   LSN_FORMAT_ARGS(slot->data.restart_lsn))));
 
@@ -637,7 +637,7 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx)
 	/* Initialize from where to start reading WAL. */
 	XLogBeginRead(ctx->reader, slot->data.restart_lsn);
 
-	elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%X",
+	elog(DEBUG1, "searching for logical decoding starting point, starting at " LSN_FORMAT,
 		 LSN_FORMAT_ARGS(slot->data.restart_lsn));
 
 	/* Wait for a consistent starting point */
@@ -758,7 +758,7 @@ output_plugin_error_callback(void *arg)
 
 	/* not all callbacks have an associated LSN  */
 	if (state->report_location != InvalidXLogRecPtr)
-		errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X",
+		errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN " LSN_FORMAT,
 				   NameStr(state->ctx->slot->data.name),
 				   NameStr(state->ctx->slot->data.plugin),
 				   state->callback_name,
@@ -1725,7 +1725,7 @@ LogicalIncreaseXminForSlot(XLogRecPtr current_lsn, TransactionId xmin)
 	SpinLockRelease(&slot->mutex);
 
 	if (got_new_xmin)
-		elog(DEBUG1, "got new catalog xmin %u at %X/%X", xmin,
+		elog(DEBUG1, "got new catalog xmin %u at " LSN_FORMAT, xmin,
 			 LSN_FORMAT_ARGS(current_lsn));
 
 	/* candidate already valid with the current flush position, apply */
@@ -1785,7 +1785,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
 		slot->candidate_restart_lsn = restart_lsn;
 		SpinLockRelease(&slot->mutex);
 
-		elog(DEBUG1, "got new restart lsn %X/%X at %X/%X",
+		elog(DEBUG1, "got new restart lsn " LSN_FORMAT " at " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(restart_lsn),
 			 LSN_FORMAT_ARGS(current_lsn));
 	}
@@ -1800,7 +1800,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
 		confirmed_flush = slot->data.confirmed_flush;
 		SpinLockRelease(&slot->mutex);
 
-		elog(DEBUG1, "failed to increase restart lsn: proposed %X/%X, after %X/%X, current candidate %X/%X, current after %X/%X, flushed up to %X/%X",
+		elog(DEBUG1, "failed to increase restart lsn: proposed " LSN_FORMAT ", after " LSN_FORMAT ", current candidate " LSN_FORMAT ", current after " LSN_FORMAT ", flushed up to " LSN_FORMAT,
 			 LSN_FORMAT_ARGS(restart_lsn),
 			 LSN_FORMAT_ARGS(current_lsn),
 			 LSN_FORMAT_ARGS(candidate_restart_lsn),
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index a17bacf88e7..828f77b494e 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -826,7 +826,7 @@ StartupReplicationOrigin(void)
 		last_state++;
 
 		ereport(LOG,
-				(errmsg("recovered replication state of node %d to %X/%X",
+				(errmsg("recovered replication state of node %d to " LSN_FORMAT,
 						disk_state.roident,
 						LSN_FORMAT_ARGS(disk_state.remote_lsn))));
 	}
diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c
index 3ec3abfa3da..1c29a353cb4 100644
--- a/src/backend/replication/logical/slotsync.c
+++ b/src/backend/replication/logical/slotsync.c
@@ -213,7 +213,7 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid,
 		ereport(slot->data.persistency == RS_TEMPORARY ? LOG : DEBUG1,
 				errmsg("could not synchronize replication slot \"%s\"",
 					   remote_slot->name),
-				errdetail("Synchronization could lead to data loss, because the remote slot needs WAL at LSN %X/%X and catalog xmin %u, but the standby has LSN %X/%X and catalog xmin %u.",
+				errdetail("Synchronization could lead to data loss, because the remote slot needs WAL at LSN " LSN_FORMAT " and catalog xmin %u, but the standby has LSN " LSN_FORMAT " and catalog xmin %u.",
 						  LSN_FORMAT_ARGS(remote_slot->restart_lsn),
 						  remote_slot->catalog_xmin,
 						  LSN_FORMAT_ARGS(slot->data.restart_lsn),
@@ -275,7 +275,7 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid,
 				ereport(ERROR,
 						errmsg_internal("synchronized confirmed_flush for slot \"%s\" differs from remote slot",
 										remote_slot->name),
-						errdetail_internal("Remote slot has LSN %X/%X but local slot has LSN %X/%X.",
+						errdetail_internal("Remote slot has LSN " LSN_FORMAT " but local slot has LSN " LSN_FORMAT ".",
 										   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
 										   LSN_FORMAT_ARGS(slot->data.confirmed_flush)));
 		}
@@ -593,7 +593,7 @@ update_and_persist_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 	{
 		ereport(LOG,
 				errmsg("could not synchronize replication slot \"%s\"", remote_slot->name),
-				errdetail("Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN %X/%X.",
+				errdetail("Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN " LSN_FORMAT ".",
 						  LSN_FORMAT_ARGS(slot->data.restart_lsn)));
 
 		return false;
@@ -642,7 +642,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 		ereport(AmLogicalSlotSyncWorkerProcess() ? LOG : ERROR,
 				errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				errmsg("skipping slot synchronization because the received slot sync"
-					   " LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X",
+					   " LSN " LSN_FORMAT " for slot \"%s\" is ahead of the standby position " LSN_FORMAT,
 					   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
 					   remote_slot->name,
 					   LSN_FORMAT_ARGS(latestFlushPtr)));
@@ -733,7 +733,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 				ereport(ERROR,
 						errmsg_internal("cannot synchronize local slot \"%s\"",
 										remote_slot->name),
-						errdetail_internal("Local slot's start streaming location LSN(%X/%X) is ahead of remote slot's LSN(%X/%X).",
+						errdetail_internal("Local slot's start streaming location LSN(" LSN_FORMAT ") is ahead of remote slot's LSN(" LSN_FORMAT ").",
 										   LSN_FORMAT_ARGS(slot->data.confirmed_flush),
 										   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn)));
 
diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index adf18c397db..94aff2d5169 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -774,7 +774,7 @@ SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, XLogRecPtr lsn, Transact
 		if (rbtxn_is_prepared(txn))
 			continue;
 
-		elog(DEBUG2, "adding a new snapshot and invalidations to %u at %X/%X",
+		elog(DEBUG2, "adding a new snapshot and invalidations to %u at " LSN_FORMAT,
 			 txn->xid, LSN_FORMAT_ARGS(lsn));
 
 		/*
@@ -1271,7 +1271,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 									builder->initial_xmin_horizon))
 	{
 		ereport(DEBUG1,
-				(errmsg_internal("skipping snapshot at %X/%X while building logical decoding snapshot, xmin horizon too low",
+				(errmsg_internal("skipping snapshot at " LSN_FORMAT " while building logical decoding snapshot, xmin horizon too low",
 								 LSN_FORMAT_ARGS(lsn)),
 				 errdetail_internal("initial xmin horizon of %u vs the snapshot's %u",
 									builder->initial_xmin_horizon, running->oldestRunningXid)));
@@ -1310,7 +1310,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = InvalidTransactionId;
 
 		ereport(LOG,
-				(errmsg("logical decoding found consistent point at %X/%X",
+				(errmsg("logical decoding found consistent point at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("There are no running transactions.")));
 
@@ -1359,7 +1359,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		Assert(TransactionIdIsNormal(builder->xmax));
 
 		ereport(LOG,
-				(errmsg("logical decoding found initial starting point at %X/%X",
+				(errmsg("logical decoding found initial starting point at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("Waiting for transactions (approximately %d) older than %u to end.",
 						   running->xcnt, running->nextXid)));
@@ -1383,7 +1383,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = running->nextXid;
 
 		ereport(LOG,
-				(errmsg("logical decoding found initial consistent point at %X/%X",
+				(errmsg("logical decoding found initial consistent point at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("Waiting for transactions (approximately %d) older than %u to end.",
 						   running->xcnt, running->nextXid)));
@@ -1407,7 +1407,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = InvalidTransactionId;
 
 		ereport(LOG,
-				(errmsg("logical decoding found consistent point at %X/%X",
+				(errmsg("logical decoding found consistent point at " LSN_FORMAT,
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("There are no old transactions anymore.")));
 	}
@@ -1913,7 +1913,7 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
 	Assert(builder->state == SNAPBUILD_CONSISTENT);
 
 	ereport(LOG,
-			(errmsg("logical decoding found consistent point at %X/%X",
+			(errmsg("logical decoding found consistent point at " LSN_FORMAT,
 					LSN_FORMAT_ARGS(lsn)),
 			 errdetail("Logical decoding will begin using saved snapshot.")));
 	return true;
@@ -2061,7 +2061,7 @@ SnapBuildSnapshotExists(XLogRecPtr lsn)
 	int			ret;
 	struct stat stat_buf;
 
-	sprintf(path, "%s/%X-%X.snap",
+	sprintf(path, "%s/%08X-%08X.snap",
 			PG_LOGICAL_SNAPSHOTS_DIR,
 			LSN_FORMAT_ARGS(lsn));
 
diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index c90f23ee5b0..c8b6e83fe5f 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -1553,7 +1553,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos)
 copy_table_done:
 
 	elog(DEBUG1,
-		 "LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%X",
+		 "LogicalRepSyncTableStart: '%s' origin_startpos lsn " LSN_FORMAT,
 		 originname, LSN_FORMAT_ARGS(*origin_startpos));
 
 	/*
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index fd11805a44c..d6aed32b20a 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -1016,7 +1016,7 @@ apply_handle_commit(StringInfo s)
 	if (commit_data.commit_lsn != remote_final_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_PROTOCOL_VIOLATION),
-				 errmsg_internal("incorrect commit LSN %X/%X in commit message (expected %X/%X)",
+				 errmsg_internal("incorrect commit LSN " LSN_FORMAT " in commit message (expected " LSN_FORMAT ")",
 								 LSN_FORMAT_ARGS(commit_data.commit_lsn),
 								 LSN_FORMAT_ARGS(remote_final_lsn))));
 
@@ -1108,7 +1108,7 @@ apply_handle_prepare(StringInfo s)
 	if (prepare_data.prepare_lsn != remote_final_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_PROTOCOL_VIOLATION),
-				 errmsg_internal("incorrect prepare LSN %X/%X in prepare message (expected %X/%X)",
+				 errmsg_internal("incorrect prepare LSN " LSN_FORMAT " in prepare message (expected " LSN_FORMAT ")",
 								 LSN_FORMAT_ARGS(prepare_data.prepare_lsn),
 								 LSN_FORMAT_ARGS(remote_final_lsn))));
 
@@ -3903,7 +3903,7 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply)
 	pq_sendint64(reply_message, now);	/* sendTime */
 	pq_sendbyte(reply_message, requestReply);	/* replyRequested */
 
-	elog(DEBUG2, "sending feedback (force %d) to recv %X/%X, write %X/%X, flush %X/%X",
+	elog(DEBUG2, "sending feedback (force %d) to recv " LSN_FORMAT ", write " LSN_FORMAT ", flush " LSN_FORMAT,
 		 force,
 		 LSN_FORMAT_ARGS(recvpos),
 		 LSN_FORMAT_ARGS(writepos),
@@ -4909,7 +4909,7 @@ maybe_start_skipping_changes(XLogRecPtr finish_lsn)
 	skip_xact_finish_lsn = finish_lsn;
 
 	ereport(LOG,
-			errmsg("logical replication starts skipping transaction at LSN %X/%X",
+			errmsg("logical replication starts skipping transaction at LSN " LSN_FORMAT,
 				   LSN_FORMAT_ARGS(skip_xact_finish_lsn)));
 }
 
@@ -4923,7 +4923,7 @@ stop_skipping_changes(void)
 		return;
 
 	ereport(LOG,
-			(errmsg("logical replication completed skipping transaction at LSN %X/%X",
+			(errmsg("logical replication completed skipping transaction at LSN " LSN_FORMAT,
 					LSN_FORMAT_ARGS(skip_xact_finish_lsn))));
 
 	/* Stop skipping changes */
@@ -5012,7 +5012,7 @@ clear_subscription_skip_lsn(XLogRecPtr finish_lsn)
 		if (myskiplsn != finish_lsn)
 			ereport(WARNING,
 					errmsg("skip-LSN of subscription \"%s\" cleared", MySubscription->name),
-					errdetail("Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X.",
+					errdetail("Remote transaction's finish WAL location (LSN) " LSN_FORMAT " did not match skip-LSN " LSN_FORMAT ".",
 							  LSN_FORMAT_ARGS(finish_lsn),
 							  LSN_FORMAT_ARGS(myskiplsn)));
 	}
@@ -5049,7 +5049,7 @@ apply_error_callback(void *arg)
 					   logicalrep_message_type(errarg->command),
 					   errarg->remote_xid);
 		else
-			errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X",
+			errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at " LSN_FORMAT,
 					   errarg->origin_name,
 					   logicalrep_message_type(errarg->command),
 					   errarg->remote_xid,
@@ -5067,7 +5067,7 @@ apply_error_callback(void *arg)
 						   errarg->rel->remoterel.relname,
 						   errarg->remote_xid);
 			else
-				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X",
+				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at " LSN_FORMAT,
 						   errarg->origin_name,
 						   logicalrep_message_type(errarg->command),
 						   errarg->rel->remoterel.nspname,
@@ -5086,7 +5086,7 @@ apply_error_callback(void *arg)
 						   errarg->rel->remoterel.attnames[errarg->remote_attnum],
 						   errarg->remote_xid);
 			else
-				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X",
+				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at " LSN_FORMAT,
 						   errarg->origin_name,
 						   logicalrep_message_type(errarg->command),
 						   errarg->rel->remoterel.nspname,
diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y
index 7440aae5a1a..78def4136a8 100644
--- a/src/backend/replication/repl_gram.y
+++ b/src/backend/replication/repl_gram.y
@@ -279,7 +279,7 @@ alter_replication_slot:
 			;
 
 /*
- * START_REPLICATION [SLOT slot] [PHYSICAL] %X/%X [TIMELINE %u]
+ * START_REPLICATION [SLOT slot] [PHYSICAL] " LSN_FORMAT " [TIMELINE %u]
  */
 start_replication:
 			K_START_REPLICATION opt_slot opt_physical RECPTR opt_timeline
@@ -295,7 +295,7 @@ start_replication:
 				}
 			;
 
-/* START_REPLICATION SLOT slot LOGICAL %X/%X options */
+/* START_REPLICATION SLOT slot LOGICAL " LSN_FORMAT " options */
 start_logical_replication:
 			K_START_REPLICATION K_SLOT IDENT K_LOGICAL RECPTR plugin_options
 				{
diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l
index 014ea8d25c6..15fd0a6e672 100644
--- a/src/backend/replication/repl_scanner.l
+++ b/src/backend/replication/repl_scanner.l
@@ -155,7 +155,7 @@ UPLOAD_MANIFEST		{ return K_UPLOAD_MANIFEST; }
 {hexdigit}+\/{hexdigit}+		{
 					uint32	hi,
 							lo;
-					if (sscanf(yytext, "%X/%X", &hi, &lo) != 2)
+					if (sscanf(yytext, LSN_FORMAT, &hi, &lo) != 2)
 						replication_yyerror(NULL, yyscanner, "invalid streaming start location");
 					yylval->recptr = ((uint64) hi) << 32 | lo;
 					return RECPTR;
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index f9fec50ae88..7b002b287ee 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -1591,8 +1591,8 @@ ReportSlotInvalidation(ReplicationSlotInvalidationCause cause,
 				uint64		ex = oldestLSN - restart_lsn;
 
 				appendStringInfo(&err_detail,
-								 ngettext("The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " byte.",
-										  "The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " bytes.",
+								 ngettext("The slot's restart_lsn " LSN_FORMAT " exceeds the limit by %" PRIu64 " byte.",
+										  "The slot's restart_lsn " LSN_FORMAT " exceeds the limit by %" PRIu64 " bytes.",
 										  ex),
 								 LSN_FORMAT_ARGS(restart_lsn),
 								 ex);
diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c
index 36cc2ed4e44..0a2a196e85e 100644
--- a/src/backend/replication/slotfuncs.c
+++ b/src/backend/replication/slotfuncs.c
@@ -566,7 +566,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
 	if (moveto < minlsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-				 errmsg("cannot advance replication slot to %X/%X, minimum is %X/%X",
+				 errmsg("cannot advance replication slot to " LSN_FORMAT ", minimum is " LSN_FORMAT,
 						LSN_FORMAT_ARGS(moveto), LSN_FORMAT_ARGS(minlsn))));
 
 	/* Do the actual slot update, depending on the slot type */
diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index cc35984ad00..3fcdf86964f 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -258,7 +258,7 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
 	{
 		char		buffer[32];
 
-		sprintf(buffer, "waiting for %X/%X", LSN_FORMAT_ARGS(lsn));
+		sprintf(buffer, "waiting for " LSN_FORMAT, LSN_FORMAT_ARGS(lsn));
 		set_ps_display_suffix(buffer);
 	}
 
@@ -566,7 +566,7 @@ SyncRepReleaseWaiters(void)
 
 	LWLockRelease(SyncRepLock);
 
-	elog(DEBUG3, "released %d procs up to write %X/%X, %d procs up to flush %X/%X, %d procs up to apply %X/%X",
+	elog(DEBUG3, "released %d procs up to write " LSN_FORMAT ", %d procs up to flush " LSN_FORMAT ", %d procs up to apply " LSN_FORMAT,
 		 numwrite, LSN_FORMAT_ARGS(writePtr),
 		 numflush, LSN_FORMAT_ARGS(flushPtr),
 		 numapply, LSN_FORMAT_ARGS(applyPtr));
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 8c4d0fd9aed..841e6ca2814 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -386,11 +386,11 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
 		{
 			if (first_stream)
 				ereport(LOG,
-						(errmsg("started streaming WAL from primary at %X/%X on timeline %u",
+						(errmsg("started streaming WAL from primary at " LSN_FORMAT " on timeline %u",
 								LSN_FORMAT_ARGS(startpoint), startpointTLI)));
 			else
 				ereport(LOG,
-						(errmsg("restarted WAL streaming at %X/%X on timeline %u",
+						(errmsg("restarted WAL streaming at " LSN_FORMAT " on timeline %u",
 								LSN_FORMAT_ARGS(startpoint), startpointTLI)));
 			first_stream = false;
 
@@ -470,7 +470,7 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
 						{
 							ereport(LOG,
 									(errmsg("replication terminated by primary server"),
-									 errdetail("End of WAL reached on timeline %u at %X/%X.",
+									 errdetail("End of WAL reached on timeline %u at " LSN_FORMAT ".",
 											   startpointTLI,
 											   LSN_FORMAT_ARGS(LogstreamResult.Write))));
 							endofwal = true;
@@ -711,7 +711,7 @@ WalRcvWaitForStartPosition(XLogRecPtr *startpoint, TimeLineID *startpointTLI)
 	{
 		char		activitymsg[50];
 
-		snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%X",
+		snprintf(activitymsg, sizeof(activitymsg), "restarting at " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(*startpoint));
 		set_ps_display(activitymsg);
 	}
@@ -1014,7 +1014,7 @@ XLogWalRcvFlush(bool dying, TimeLineID tli)
 		{
 			char		activitymsg[50];
 
-			snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
+			snprintf(activitymsg, sizeof(activitymsg), "streaming " LSN_FORMAT,
 					 LSN_FORMAT_ARGS(LogstreamResult.Write));
 			set_ps_display(activitymsg);
 		}
@@ -1138,7 +1138,7 @@ XLogWalRcvSendReply(bool force, bool requestReply)
 	pq_sendbyte(&reply_message, requestReply ? 1 : 0);
 
 	/* Send it */
-	elog(DEBUG2, "sending write %X/%X flush %X/%X apply %X/%X%s",
+	elog(DEBUG2, "sending write " LSN_FORMAT " flush " LSN_FORMAT " apply " LSN_FORMAT "%s",
 		 LSN_FORMAT_ARGS(writePtr),
 		 LSN_FORMAT_ARGS(flushPtr),
 		 LSN_FORMAT_ARGS(applyPtr),
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index f2c33250e8b..4dae0f5c7a4 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -408,7 +408,7 @@ IdentifySystem(void)
 	else
 		logptr = GetFlushRecPtr(&currTLI);
 
-	snprintf(xloc, sizeof(xloc), "%X/%X", LSN_FORMAT_ARGS(logptr));
+	snprintf(xloc, sizeof(xloc), LSN_FORMAT, LSN_FORMAT_ARGS(logptr));
 
 	if (MyDatabaseId != InvalidOid)
 	{
@@ -515,7 +515,7 @@ ReadReplicationSlot(ReadReplicationSlotCmd *cmd)
 		{
 			char		xloc[64];
 
-			snprintf(xloc, sizeof(xloc), "%X/%X",
+			snprintf(xloc, sizeof(xloc), LSN_FORMAT,
 					 LSN_FORMAT_ARGS(slot_contents.data.restart_lsn));
 			values[i] = CStringGetTextDatum(xloc);
 			nulls[i] = false;
@@ -892,10 +892,10 @@ StartReplication(StartReplicationCmd *cmd)
 				switchpoint < cmd->startpoint)
 			{
 				ereport(ERROR,
-						(errmsg("requested starting point %X/%X on timeline %u is not in this server's history",
+						(errmsg("requested starting point " LSN_FORMAT " on timeline %u is not in this server's history",
 								LSN_FORMAT_ARGS(cmd->startpoint),
 								cmd->timeline),
-						 errdetail("This server's history forked from timeline %u at %X/%X.",
+						 errdetail("This server's history forked from timeline %u at " LSN_FORMAT ".",
 								   cmd->timeline,
 								   LSN_FORMAT_ARGS(switchpoint))));
 			}
@@ -939,7 +939,7 @@ StartReplication(StartReplicationCmd *cmd)
 		if (FlushPtr < cmd->startpoint)
 		{
 			ereport(ERROR,
-					(errmsg("requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X",
+					(errmsg("requested starting point " LSN_FORMAT " is ahead of the WAL flush position of this server " LSN_FORMAT,
 							LSN_FORMAT_ARGS(cmd->startpoint),
 							LSN_FORMAT_ARGS(FlushPtr))));
 		}
@@ -983,7 +983,7 @@ StartReplication(StartReplicationCmd *cmd)
 		Datum		values[2];
 		bool		nulls[2] = {0};
 
-		snprintf(startpos_str, sizeof(startpos_str), "%X/%X",
+		snprintf(startpos_str, sizeof(startpos_str), "" LSN_FORMAT,
 				 LSN_FORMAT_ARGS(sendTimeLineValidUpto));
 
 		dest = CreateDestReceiver(DestRemoteSimple);
@@ -1324,7 +1324,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
 			ReplicationSlotPersist();
 	}
 
-	snprintf(xloc, sizeof(xloc), "%X/%X",
+	snprintf(xloc, sizeof(xloc), LSN_FORMAT,
 			 LSN_FORMAT_ARGS(MyReplicationSlot->data.confirmed_flush));
 
 	dest = CreateDestReceiver(DestRemoteSimple);
@@ -2429,7 +2429,7 @@ ProcessStandbyReplyMessage(void)
 		/* Copy because timestamptz_to_str returns a static buffer */
 		replyTimeStr = pstrdup(timestamptz_to_str(replyTime));
 
-		elog(DEBUG2, "write %X/%X flush %X/%X apply %X/%X%s reply_time %s",
+		elog(DEBUG2, "write " LSN_FORMAT " flush " LSN_FORMAT " apply " LSN_FORMAT "%s reply_time %s",
 			 LSN_FORMAT_ARGS(writePtr),
 			 LSN_FORMAT_ARGS(flushPtr),
 			 LSN_FORMAT_ARGS(applyPtr),
@@ -3251,7 +3251,7 @@ XLogSendPhysical(void)
 
 		WalSndCaughtUp = true;
 
-		elog(DEBUG1, "walsender reached end of timeline at %X/%X (sent up to %X/%X)",
+		elog(DEBUG1, "walsender reached end of timeline at " LSN_FORMAT " (sent up to " LSN_FORMAT ")",
 			 LSN_FORMAT_ARGS(sendTimeLineValidUpto),
 			 LSN_FORMAT_ARGS(sentPtr));
 		return;
@@ -3392,7 +3392,7 @@ retry:
 	{
 		char		activitymsg[50];
 
-		snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
+		snprintf(activitymsg, sizeof(activitymsg), "streaming " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(sentPtr));
 		set_ps_display(activitymsg);
 	}
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c
index 7fa8d9247e0..81659b2eb1f 100644
--- a/src/backend/storage/ipc/standby.c
+++ b/src/backend/storage/ipc/standby.c
@@ -1376,7 +1376,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
 
 	if (xlrec.subxid_overflow)
 		elog(DEBUG2,
-			 "snapshot of %d running transactions overflowed (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
+			 "snapshot of %d running transactions overflowed (lsn " LSN_FORMAT " oldest xid %u latest complete %u next xid %u)",
 			 CurrRunningXacts->xcnt,
 			 LSN_FORMAT_ARGS(recptr),
 			 CurrRunningXacts->oldestRunningXid,
@@ -1384,7 +1384,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
 			 CurrRunningXacts->nextXid);
 	else
 		elog(DEBUG2,
-			 "snapshot of %d+%d running transaction ids (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
+			 "snapshot of %d+%d running transaction ids (lsn " LSN_FORMAT " oldest xid %u latest complete %u next xid %u)",
 			 CurrRunningXacts->xcnt, CurrRunningXacts->subxcnt,
 			 LSN_FORMAT_ARGS(recptr),
 			 CurrRunningXacts->oldestRunningXid,
diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index 16311590a14..044d3ffde24 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -83,7 +83,7 @@ pg_lsn_out(PG_FUNCTION_ARGS)
 	char		buf[MAXPG_LSNLEN + 1];
 	char	   *result;
 
-	snprintf(buf, sizeof buf, "%X/%X", LSN_FORMAT_ARGS(lsn));
+	snprintf(buf, sizeof buf, LSN_FORMAT, LSN_FORMAT_ARGS(lsn));
 	result = pstrdup(buf);
 	PG_RETURN_CSTRING(result);
 }
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index eb7354200bc..1a646eaf689 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -487,7 +487,7 @@ reached_end_position(XLogRecPtr segendpos, uint32 timeline,
 			if (r < 0)
 				pg_fatal("could not read from ready pipe: %m");
 
-			if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2)
+			if (sscanf(xlogend, LSN_FORMAT, &hi, &lo) != 2)
 				pg_fatal("could not parse write-ahead log location \"%s\"",
 						 xlogend);
 			xlogendptr = ((uint64) hi) << 32 | lo;
@@ -629,7 +629,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier,
 	param->wal_compress_level = wal_compress_level;
 
 	/* Convert the starting position */
-	if (sscanf(startpos, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(startpos, LSN_FORMAT, &hi, &lo) != 2)
 		pg_fatal("could not parse write-ahead log location \"%s\"",
 				 startpos);
 	param->startptr = ((uint64) hi) << 32 | lo;
@@ -2255,7 +2255,7 @@ BaseBackup(char *compression_algorithm, char *compression_detail,
 		 * value directly in the variable, and then set the flag that says
 		 * it's there.
 		 */
-		if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2)
+		if (sscanf(xlogend, LSN_FORMAT, &hi, &lo) != 2)
 			pg_fatal("could not parse write-ahead log location \"%s\"",
 					 xlogend);
 		xlogendptr = ((uint64) hi) << 32 | lo;
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index 11f71c03801..53ccc9383dc 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -1262,7 +1262,7 @@ setup_recovery(const struct LogicalRepInfo *dbinfo, const char *datadir, const c
 	{
 		appendPQExpBufferStr(recoveryconfcontents, "# dry run mode");
 		appendPQExpBuffer(recoveryconfcontents,
-						  "recovery_target_lsn = '%X/%X'\n",
+						  "recovery_target_lsn = '" LSN_FORMAT "'\n",
 						  LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
 	}
 	else
@@ -1876,7 +1876,7 @@ set_replication_progress(PGconn *conn, const struct LogicalRepInfo *dbinfo, cons
 	if (dry_run)
 	{
 		suboid = InvalidOid;
-		lsnstr = psprintf("%X/%X", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
+		lsnstr = psprintf(LSN_FORMAT, LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
 	}
 	else
 	{
diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c
index e816cf58101..d56f00cd464 100644
--- a/src/bin/pg_basebackup/pg_receivewal.c
+++ b/src/bin/pg_basebackup/pg_receivewal.c
@@ -188,14 +188,14 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
 
 	/* we assume that we get called once at the end of each segment */
 	if (verbose && segment_finished)
-		pg_log_info("finished segment at %X/%X (timeline %u)",
+		pg_log_info("finished segment at " LSN_FORMAT " (timeline %u)",
 					LSN_FORMAT_ARGS(xlogpos),
 					timeline);
 
 	if (!XLogRecPtrIsInvalid(endpos) && endpos < xlogpos)
 	{
 		if (verbose)
-			pg_log_info("stopped log streaming at %X/%X (timeline %u)",
+			pg_log_info("stopped log streaming at " LSN_FORMAT " (timeline %u)",
 						LSN_FORMAT_ARGS(xlogpos),
 						timeline);
 		time_to_stop = true;
@@ -211,7 +211,7 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
 	 * timeline, but it's close enough for reporting purposes.
 	 */
 	if (verbose && prevtimeline != 0 && prevtimeline != timeline)
-		pg_log_info("switched to timeline %u at %X/%X",
+		pg_log_info("switched to timeline %u at " LSN_FORMAT,
 					timeline,
 					LSN_FORMAT_ARGS(prevpos));
 
@@ -575,7 +575,7 @@ StreamLog(void)
 	 * Start the replication
 	 */
 	if (verbose)
-		pg_log_info("starting log streaming at %X/%X (timeline %u)",
+		pg_log_info("starting log streaming at " LSN_FORMAT " (timeline %u)",
 					LSN_FORMAT_ARGS(stream.startpos),
 					stream.timeline);
 
@@ -689,7 +689,7 @@ main(int argc, char **argv)
 				basedir = pg_strdup(optarg);
 				break;
 			case 'E':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, LSN_FORMAT, &hi, &lo) != 2)
 					pg_fatal("could not parse end position \"%s\"", optarg);
 				endpos = ((uint64) hi) << 32 | lo;
 				break;
diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c
index fb7a6a1d05d..aec815d8d24 100644
--- a/src/bin/pg_basebackup/pg_recvlogical.c
+++ b/src/bin/pg_basebackup/pg_recvlogical.c
@@ -144,7 +144,7 @@ sendFeedback(PGconn *conn, TimestampTz now, bool force, bool replyRequested)
 		return true;
 
 	if (verbose)
-		pg_log_info("confirming write up to %X/%X, flush to %X/%X (slot %s)",
+		pg_log_info("confirming write up to " LSN_FORMAT ", flush to " LSN_FORMAT " (slot %s)",
 					LSN_FORMAT_ARGS(output_written_lsn),
 					LSN_FORMAT_ARGS(output_fsync_lsn),
 					replication_slot);
@@ -238,13 +238,13 @@ StreamLogicalLog(void)
 	 * Start the replication
 	 */
 	if (verbose)
-		pg_log_info("starting log streaming at %X/%X (slot %s)",
+		pg_log_info("starting log streaming at " LSN_FORMAT " (slot %s)",
 					LSN_FORMAT_ARGS(startpos),
 					replication_slot);
 
 	/* Initiate the replication stream at specified location */
 	query = createPQExpBuffer();
-	appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%X",
+	appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL " LSN_FORMAT,
 					  replication_slot, LSN_FORMAT_ARGS(startpos));
 
 	/* print options if there are any */
@@ -800,12 +800,12 @@ main(int argc, char **argv)
 				break;
 /* replication options */
 			case 'I':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, LSN_FORMAT, &hi, &lo) != 2)
 					pg_fatal("could not parse start position \"%s\"", optarg);
 				startpos = ((uint64) hi) << 32 | lo;
 				break;
 			case 'E':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, LSN_FORMAT, &hi, &lo) != 2)
 					pg_fatal("could not parse end position \"%s\"", optarg);
 				endpos = ((uint64) hi) << 32 | lo;
 				break;
@@ -1075,12 +1075,12 @@ prepareToTerminate(PGconn *conn, XLogRecPtr endpos, StreamStopReason reason,
 				pg_log_info("received interrupt signal, exiting");
 				break;
 			case STREAM_STOP_KEEPALIVE:
-				pg_log_info("end position %X/%X reached by keepalive",
+				pg_log_info("end position " LSN_FORMAT " reached by keepalive",
 							LSN_FORMAT_ARGS(endpos));
 				break;
 			case STREAM_STOP_END_OF_WAL:
 				Assert(!XLogRecPtrIsInvalid(lsn));
-				pg_log_info("end position %X/%X reached by WAL record at %X/%X",
+				pg_log_info("end position " LSN_FORMAT " reached by WAL record at " LSN_FORMAT,
 							LSN_FORMAT_ARGS(endpos), LSN_FORMAT_ARGS(lsn));
 				break;
 			case STREAM_STOP_NONE:
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 6b6e32dfbdf..913361f0e0c 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -571,7 +571,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 			return true;
 
 		/* Initiate the replication stream at specified location */
-		snprintf(query, sizeof(query), "START_REPLICATION %s%X/%X TIMELINE %u",
+		snprintf(query, sizeof(query), "START_REPLICATION %s" LSN_FORMAT " TIMELINE %u",
 				 slotcmd,
 				 LSN_FORMAT_ARGS(stream->startpos),
 				 stream->timeline);
@@ -628,7 +628,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 			}
 			if (stream->startpos > stoppos)
 			{
-				pg_log_error("server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X",
+				pg_log_error("server stopped streaming timeline %u at " LSN_FORMAT ", but reported next timeline %u to begin at " LSN_FORMAT,
 							 stream->timeline, LSN_FORMAT_ARGS(stoppos),
 							 newtimeline, LSN_FORMAT_ARGS(stream->startpos));
 				goto error;
@@ -720,7 +720,7 @@ ReadEndOfStreamingResult(PGresult *res, XLogRecPtr *startpos, uint32 *timeline)
 	}
 
 	*timeline = atoi(PQgetvalue(res, 0, 0));
-	if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &startpos_xlogid,
+	if (sscanf(PQgetvalue(res, 0, 1), LSN_FORMAT, &startpos_xlogid,
 			   &startpos_xrecoff) != 2)
 	{
 		pg_log_error("could not parse next timeline's starting point \"%s\"",
diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c
index c7b8a4c3a4b..221fa8d44df 100644
--- a/src/bin/pg_basebackup/streamutil.c
+++ b/src/bin/pg_basebackup/streamutil.c
@@ -445,7 +445,7 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli,
 	/* Get LSN start position if necessary */
 	if (startpos != NULL)
 	{
-		if (sscanf(PQgetvalue(res, 0, 2), "%X/%X", &hi, &lo) != 2)
+		if (sscanf(PQgetvalue(res, 0, 2), "" LSN_FORMAT "", &hi, &lo) != 2)
 		{
 			pg_log_error("could not parse write-ahead log location \"%s\"",
 						 PQgetvalue(res, 0, 2));
@@ -551,7 +551,7 @@ GetSlotInformation(PGconn *conn, const char *slot_name,
 		uint32		hi,
 					lo;
 
-		if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &hi, &lo) != 2)
+		if (sscanf(PQgetvalue(res, 0, 1), "" LSN_FORMAT "", &hi, &lo) != 2)
 		{
 			pg_log_error("could not parse restart_lsn \"%s\" for replication slot \"%s\"",
 						 PQgetvalue(res, 0, 1), slot_name);
diff --git a/src/bin/pg_combinebackup/backup_label.c b/src/bin/pg_combinebackup/backup_label.c
index e89d4603f09..5586af5b7df 100644
--- a/src/bin/pg_combinebackup/backup_label.c
+++ b/src/bin/pg_combinebackup/backup_label.c
@@ -247,7 +247,7 @@ parse_lsn(char *s, char *e, XLogRecPtr *lsn, char **c)
 	unsigned	lo;
 
 	*e = '\0';
-	success = (sscanf(s, "%X/%X%n", &hi, &lo, &nchars) == 2);
+	success = (sscanf(s, LSN_FORMAT "%n", &hi, &lo, &nchars) == 2);
 	*e = save;
 
 	if (success)
diff --git a/src/bin/pg_combinebackup/pg_combinebackup.c b/src/bin/pg_combinebackup/pg_combinebackup.c
index 28e58cd8ef4..4eb6502e60e 100644
--- a/src/bin/pg_combinebackup/pg_combinebackup.c
+++ b/src/bin/pg_combinebackup/pg_combinebackup.c
@@ -569,7 +569,7 @@ check_backup_label_files(int n_backups, char **backup_dirs)
 			pg_fatal("backup at \"%s\" starts on timeline %u, but expected %u",
 					 backup_dirs[i], start_tli, check_tli);
 		if (i < n_backups - 1 && start_lsn != check_lsn)
-			pg_fatal("backup at \"%s\" starts at LSN %X/%X, but expected %X/%X",
+			pg_fatal("backup at \"%s\" starts at LSN " LSN_FORMAT ", but expected " LSN_FORMAT,
 					 backup_dirs[i],
 					 LSN_FORMAT_ARGS(start_lsn),
 					 LSN_FORMAT_ARGS(check_lsn));
diff --git a/src/bin/pg_combinebackup/write_manifest.c b/src/bin/pg_combinebackup/write_manifest.c
index 313f8929df5..ce69c986e5d 100644
--- a/src/bin/pg_combinebackup/write_manifest.c
+++ b/src/bin/pg_combinebackup/write_manifest.c
@@ -155,7 +155,7 @@ finalize_manifest(manifest_writer *mwriter,
 	for (wal_range = first_wal_range; wal_range != NULL;
 		 wal_range = wal_range->next)
 		appendStringInfo(&mwriter->buf,
-						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
+						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"" LSN_FORMAT "\", \"End-LSN\": \"" LSN_FORMAT "\" }",
 						 wal_range == first_wal_range ? "" : ",\n",
 						 wal_range->tli,
 						 LSN_FORMAT_ARGS(wal_range->start_lsn),
diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c
index 7bb801bb886..069e898144d 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -245,9 +245,9 @@ main(int argc, char *argv[])
 		   dbState(ControlFile->state));
 	printf(_("pg_control last modified:             %s\n"),
 		   pgctime_str);
-	printf(_("Latest checkpoint location:           %X/%X\n"),
+	printf(_("Latest checkpoint location:           " LSN_FORMAT "\n"),
 		   LSN_FORMAT_ARGS(ControlFile->checkPoint));
-	printf(_("Latest checkpoint's REDO location:    %X/%X\n"),
+	printf(_("Latest checkpoint's REDO location:    " LSN_FORMAT "\n"),
 		   LSN_FORMAT_ARGS(ControlFile->checkPointCopy.redo));
 	printf(_("Latest checkpoint's REDO WAL file:    %s\n"),
 		   xlogfilename);
@@ -282,15 +282,15 @@ main(int argc, char *argv[])
 		   ControlFile->checkPointCopy.newestCommitTsXid);
 	printf(_("Time of latest checkpoint:            %s\n"),
 		   ckpttime_str);
-	printf(_("Fake LSN counter for unlogged rels:   %X/%X\n"),
+	printf(_("Fake LSN counter for unlogged rels:   " LSN_FORMAT "\n"),
 		   LSN_FORMAT_ARGS(ControlFile->unloggedLSN));
-	printf(_("Minimum recovery ending location:     %X/%X\n"),
+	printf(_("Minimum recovery ending location:     " LSN_FORMAT "\n"),
 		   LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint));
 	printf(_("Min recovery ending loc's timeline:   %u\n"),
 		   ControlFile->minRecoveryPointTLI);
-	printf(_("Backup start location:                %X/%X\n"),
+	printf(_("Backup start location:                " LSN_FORMAT "\n"),
 		   LSN_FORMAT_ARGS(ControlFile->backupStartPoint));
-	printf(_("Backup end location:                  %X/%X\n"),
+	printf(_("Backup end location:                  " LSN_FORMAT "\n"),
 		   LSN_FORMAT_ARGS(ControlFile->backupEndPoint));
 	printf(_("End-of-backup record required:        %s\n"),
 		   ControlFile->backupEndRequired ? _("yes") : _("no"));
diff --git a/src/bin/pg_rewind/libpq_source.c b/src/bin/pg_rewind/libpq_source.c
index 56c2ad55d4a..1fbc1af839f 100644
--- a/src/bin/pg_rewind/libpq_source.c
+++ b/src/bin/pg_rewind/libpq_source.c
@@ -215,7 +215,7 @@ libpq_get_current_wal_insert_lsn(rewind_source *source)
 
 	val = run_simple_query(conn, "SELECT pg_current_wal_insert_lsn()");
 
-	if (sscanf(val, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(val, LSN_FORMAT, &hi, &lo) != 2)
 		pg_fatal("unrecognized result \"%s\" for current WAL insert location", val);
 
 	result = ((uint64) hi) << 32 | lo;
diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c
index 2cd44625ca3..5e31c067913 100644
--- a/src/bin/pg_rewind/parsexlog.c
+++ b/src/bin/pg_rewind/parsexlog.c
@@ -89,11 +89,11 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
 			XLogRecPtr	errptr = xlogreader->EndRecPtr;
 
 			if (errormsg)
-				pg_fatal("could not read WAL record at %X/%X: %s",
+				pg_fatal("could not read WAL record at " LSN_FORMAT ": %s",
 						 LSN_FORMAT_ARGS(errptr),
 						 errormsg);
 			else
-				pg_fatal("could not read WAL record at %X/%X",
+				pg_fatal("could not read WAL record at " LSN_FORMAT,
 						 LSN_FORMAT_ARGS(errptr));
 		}
 
@@ -105,7 +105,7 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
 	 * messed up.
 	 */
 	if (xlogreader->EndRecPtr != endpoint)
-		pg_fatal("end pointer %X/%X is not a valid end point; expected %X/%X",
+		pg_fatal("end pointer " LSN_FORMAT " is not a valid end point; expected " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(endpoint), LSN_FORMAT_ARGS(xlogreader->EndRecPtr));
 
 	XLogReaderFree(xlogreader);
@@ -143,10 +143,10 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex,
 	if (record == NULL)
 	{
 		if (errormsg)
-			pg_fatal("could not read WAL record at %X/%X: %s",
+			pg_fatal("could not read WAL record at " LSN_FORMAT ": %s",
 					 LSN_FORMAT_ARGS(ptr), errormsg);
 		else
-			pg_fatal("could not read WAL record at %X/%X",
+			pg_fatal("could not read WAL record at " LSN_FORMAT,
 					 LSN_FORMAT_ARGS(ptr));
 	}
 	endptr = xlogreader->EndRecPtr;
@@ -211,11 +211,11 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex,
 		if (record == NULL)
 		{
 			if (errormsg)
-				pg_fatal("could not find previous WAL record at %X/%X: %s",
+				pg_fatal("could not find previous WAL record at " LSN_FORMAT ": %s",
 						 LSN_FORMAT_ARGS(searchptr),
 						 errormsg);
 			else
-				pg_fatal("could not find previous WAL record at %X/%X",
+				pg_fatal("could not find previous WAL record at " LSN_FORMAT,
 						 LSN_FORMAT_ARGS(searchptr));
 		}
 
@@ -459,7 +459,7 @@ extractPageInfo(XLogReaderState *record)
 		 * track that change.
 		 */
 		pg_fatal("WAL record modifies a relation, but record type is not recognized: "
-				 "lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X",
+				 "lsn: " LSN_FORMAT ", rmid: %d, rmgr: %s, info: %02X",
 				 LSN_FORMAT_ARGS(record->ReadRecPtr),
 				 rmid, RmgrName(rmid), info);
 	}
diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c
index 9d16c1e6b47..02931f12229 100644
--- a/src/bin/pg_rewind/pg_rewind.c
+++ b/src/bin/pg_rewind/pg_rewind.c
@@ -393,7 +393,7 @@ main(int argc, char **argv)
 								   targetHistory, targetNentries,
 								   &divergerec, &lastcommontliIndex);
 
-		pg_log_info("servers diverged at WAL location %X/%X on timeline %u",
+		pg_log_info("servers diverged at WAL location " LSN_FORMAT " on timeline %u",
 					LSN_FORMAT_ARGS(divergerec),
 					targetHistory[lastcommontliIndex].tli);
 
@@ -461,7 +461,7 @@ main(int argc, char **argv)
 
 	findLastCheckpoint(datadir_target, divergerec, lastcommontliIndex,
 					   &chkptrec, &chkpttli, &chkptredo, restore_command);
-	pg_log_info("rewinding from last common checkpoint at %X/%X on timeline %u",
+	pg_log_info("rewinding from last common checkpoint at " LSN_FORMAT " on timeline %u",
 				LSN_FORMAT_ARGS(chkptrec), chkpttli);
 
 	/* Initialize the hash table to track the status of each file */
@@ -902,7 +902,7 @@ getTimelineHistory(TimeLineID tli, bool is_source, int *nentries)
 			TimeLineHistoryEntry *entry;
 
 			entry = &history[i];
-			pg_log_debug("%u: %X/%X - %X/%X", entry->tli,
+			pg_log_debug("%u: " LSN_FORMAT " - " LSN_FORMAT, entry->tli,
 						 LSN_FORMAT_ARGS(entry->begin),
 						 LSN_FORMAT_ARGS(entry->end));
 		}
@@ -981,8 +981,8 @@ createBackupLabel(XLogRecPtr startpoint, TimeLineID starttli, XLogRecPtr checkpo
 	strftime(strfbuf, sizeof(strfbuf), "%Y-%m-%d %H:%M:%S %Z", tmp);
 
 	len = snprintf(buf, sizeof(buf),
-				   "START WAL LOCATION: %X/%X (file %s)\n"
-				   "CHECKPOINT LOCATION: %X/%X\n"
+				   "START WAL LOCATION: " LSN_FORMAT " (file %s)\n"
+				   "CHECKPOINT LOCATION: " LSN_FORMAT "\n"
 				   "BACKUP METHOD: pg_rewind\n"
 				   "BACKUP FROM: standby\n"
 				   "START TIME: %s\n",
diff --git a/src/bin/pg_rewind/timeline.c b/src/bin/pg_rewind/timeline.c
index 4d9f0d8301b..b60ece1142f 100644
--- a/src/bin/pg_rewind/timeline.c
+++ b/src/bin/pg_rewind/timeline.c
@@ -66,7 +66,7 @@ rewind_parseTimeLineHistory(char *buffer, TimeLineID targetTLI, int *nentries)
 		if (*ptr == '\0' || *ptr == '#')
 			continue;
 
-		nfields = sscanf(fline, "%u\t%X/%X", &tli, &switchpoint_hi, &switchpoint_lo);
+		nfields = sscanf(fline, "%u\t" LSN_FORMAT, &tli, &switchpoint_hi, &switchpoint_lo);
 
 		if (nfields < 1)
 		{
diff --git a/src/bin/pg_verifybackup/pg_verifybackup.c b/src/bin/pg_verifybackup/pg_verifybackup.c
index 48994ef9bc6..ec18c05b87f 100644
--- a/src/bin/pg_verifybackup/pg_verifybackup.c
+++ b/src/bin/pg_verifybackup/pg_verifybackup.c
@@ -1207,7 +1207,7 @@ parse_required_wal(verifier_context *context, char *pg_waldump_path,
 	{
 		char	   *pg_waldump_cmd;
 
-		pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=%X/%X --end=%X/%X\n",
+		pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=" LSN_FORMAT " --end=" LSN_FORMAT "\n",
 								  pg_waldump_path, wal_directory, this_wal_range->tli,
 								  LSN_FORMAT_ARGS(this_wal_range->start_lsn),
 								  LSN_FORMAT_ARGS(this_wal_range->end_lsn));
diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c
index 51fb76efc48..4a2682c4005 100644
--- a/src/bin/pg_waldump/pg_waldump.c
+++ b/src/bin/pg_waldump/pg_waldump.c
@@ -555,7 +555,7 @@ XLogDumpDisplayRecord(XLogDumpConfig *config, XLogReaderState *record)
 
 	XLogRecGetLen(record, &rec_len, &fpi_len);
 
-	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: %X/%08X, prev %X/%08X, ",
+	printf("rmgr: %-11s len (rec/tot): %6u/%6u, tx: %10u, lsn: " LSN_FORMAT ", prev " LSN_FORMAT ", ",
 		   desc->rm_name,
 		   rec_len, XLogRecGetTotalLen(record),
 		   XLogRecGetXid(record),
@@ -656,7 +656,7 @@ XLogDumpDisplayStats(XLogDumpConfig *config, XLogStats *stats)
 	}
 	total_len = total_rec_len + total_fpi_len;
 
-	printf("WAL statistics between %X/%X and %X/%X:\n",
+	printf("WAL statistics between " LSN_FORMAT " and " LSN_FORMAT ":\n",
 		   LSN_FORMAT_ARGS(stats->startptr), LSN_FORMAT_ARGS(stats->endptr));
 
 	/*
@@ -904,7 +904,7 @@ main(int argc, char **argv)
 				config.filter_by_extended = true;
 				break;
 			case 'e':
-				if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2)
+				if (sscanf(optarg, LSN_FORMAT, &xlogid, &xrecoff) != 2)
 				{
 					pg_log_error("invalid WAL location: \"%s\"",
 								 optarg);
@@ -1002,7 +1002,7 @@ main(int argc, char **argv)
 				config.filter_by_extended = true;
 				break;
 			case 's':
-				if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2)
+				if (sscanf(optarg, LSN_FORMAT, &xlogid, &xrecoff) != 2)
 				{
 					pg_log_error("invalid WAL location: \"%s\"",
 								 optarg);
@@ -1140,7 +1140,7 @@ main(int argc, char **argv)
 			XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr);
 		else if (!XLByteInSeg(private.startptr, segno, WalSegSz))
 		{
-			pg_log_error("start WAL location %X/%X is not inside file \"%s\"",
+			pg_log_error("start WAL location " LSN_FORMAT " is not inside file \"%s\"",
 						 LSN_FORMAT_ARGS(private.startptr),
 						 fname);
 			goto bad_argument;
@@ -1182,7 +1182,7 @@ main(int argc, char **argv)
 		if (!XLByteInSeg(private.endptr, segno, WalSegSz) &&
 			private.endptr != (segno + 1) * WalSegSz)
 		{
-			pg_log_error("end WAL location %X/%X is not inside file \"%s\"",
+			pg_log_error("end WAL location " LSN_FORMAT " is not inside file \"%s\"",
 						 LSN_FORMAT_ARGS(private.endptr),
 						 argv[argc - 1]);
 			goto bad_argument;
@@ -1214,7 +1214,7 @@ main(int argc, char **argv)
 	first_record = XLogFindNextRecord(xlogreader_state, private.startptr);
 
 	if (first_record == InvalidXLogRecPtr)
-		pg_fatal("could not find a valid record after %X/%X",
+		pg_fatal("could not find a valid record after " LSN_FORMAT,
 				 LSN_FORMAT_ARGS(private.startptr));
 
 	/*
@@ -1224,8 +1224,8 @@ main(int argc, char **argv)
 	 */
 	if (first_record != private.startptr &&
 		XLogSegmentOffset(private.startptr, WalSegSz) != 0)
-		pg_log_info(ngettext("first record is after %X/%X, at %X/%X, skipping over %u byte",
-							 "first record is after %X/%X, at %X/%X, skipping over %u bytes",
+		pg_log_info(ngettext("first record is after " LSN_FORMAT ", at " LSN_FORMAT ", skipping over %u byte",
+							 "first record is after " LSN_FORMAT ", at " LSN_FORMAT ", skipping over %u bytes",
 							 (first_record - private.startptr)),
 					LSN_FORMAT_ARGS(private.startptr),
 					LSN_FORMAT_ARGS(first_record),
@@ -1309,7 +1309,7 @@ main(int argc, char **argv)
 		exit(0);
 
 	if (errormsg)
-		pg_fatal("error in WAL record at %X/%X: %s",
+		pg_fatal("error in WAL record at " LSN_FORMAT ": %s",
 				 LSN_FORMAT_ARGS(xlogreader_state->ReadRecPtr),
 				 errormsg);
 
diff --git a/src/common/parse_manifest.c b/src/common/parse_manifest.c
index 71973af199b..52e23973dcc 100644
--- a/src/common/parse_manifest.c
+++ b/src/common/parse_manifest.c
@@ -942,7 +942,7 @@ parse_xlogrecptr(XLogRecPtr *result, char *input)
 	uint32		hi;
 	uint32		lo;
 
-	if (sscanf(input, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(input, LSN_FORMAT, &hi, &lo) != 2)
 		return false;
 	*result = ((uint64) hi) << 32 | lo;
 	return true;
diff --git a/src/include/access/xlogdefs.h b/src/include/access/xlogdefs.h
index 9e41c9f6e84..68e4f48130b 100644
--- a/src/include/access/xlogdefs.h
+++ b/src/include/access/xlogdefs.h
@@ -38,8 +38,9 @@ typedef uint64 XLogRecPtr;
 /*
  * Handy macro for printing XLogRecPtr in conventional format, e.g.,
  *
- * printf("%X/%X", LSN_FORMAT_ARGS(lsn));
+ * printf(LSN_FORMAT, LSN_FORMAT_ARGS(lsn));
  */
+#define LSN_FORMAT	"%X/%08X"
 #define LSN_FORMAT_ARGS(lsn) (AssertVariableIsOfTypeMacro((lsn), XLogRecPtr), (uint32) ((lsn) >> 32)), ((uint32) (lsn))
 
 /*
diff --git a/src/test/recovery/t/016_min_consistency.pl b/src/test/recovery/t/016_min_consistency.pl
index 9a3b4866fce..b381d0c21b5 100644
--- a/src/test/recovery/t/016_min_consistency.pl
+++ b/src/test/recovery/t/016_min_consistency.pl
@@ -39,7 +39,7 @@ sub find_largest_lsn
 	defined($len) or die "read error on $filename: $!";
 	close($fh);
 
-	return sprintf("%X/%X", $max_hi, $max_lo);
+	return sprintf("%X/%08X", $max_hi, $max_lo);
 }
 
 # Initialize primary node
diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out
index 93e93be5668..c58e232a263 100644
--- a/src/test/regress/expected/numeric.out
+++ b/src/test/regress/expected/numeric.out
@@ -3872,15 +3872,15 @@ ERROR:  factorial of a negative number is undefined
 -- Tests for pg_lsn()
 --
 SELECT pg_lsn(23783416::numeric);
-  pg_lsn   
------------
- 0/16AE7F8
+   pg_lsn   
+------------
+ 0/016AE7F8
 (1 row)
 
 SELECT pg_lsn(0::numeric);
- pg_lsn 
---------
- 0/0
+   pg_lsn   
+------------
+ 0/00000000
 (1 row)
 
 SELECT pg_lsn(18446744073709551615::numeric);
diff --git a/src/test/regress/expected/pg_lsn.out b/src/test/regress/expected/pg_lsn.out
index b27eec7c015..8ab59b2e445 100644
--- a/src/test/regress/expected/pg_lsn.out
+++ b/src/test/regress/expected/pg_lsn.out
@@ -41,9 +41,9 @@ SELECT * FROM pg_input_error_info('16AE7F7', 'pg_lsn');
 
 -- Min/Max aggregation
 SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL;
- min |        max        
------+-------------------
- 0/0 | FFFFFFFF/FFFFFFFF
+    min     |        max        
+------------+-------------------
+ 0/00000000 | FFFFFFFF/FFFFFFFF
 (1 row)
 
 DROP TABLE PG_LSN_TBL;
@@ -85,21 +85,21 @@ SELECT '0/16AE7F8'::pg_lsn - '0/16AE7F7'::pg_lsn;
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn + 16::numeric;
- ?column?  
------------
- 0/16AE807
+  ?column?  
+------------
+ 0/016AE807
 (1 row)
 
 SELECT 16::numeric + '0/16AE7F7'::pg_lsn;
- ?column?  
------------
- 0/16AE807
+  ?column?  
+------------
+ 0/016AE807
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn - 16::numeric;
- ?column?  
------------
- 0/16AE7E7
+  ?column?  
+------------
+ 0/016AE7E7
 (1 row)
 
 SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 1::numeric;
@@ -111,9 +111,9 @@ SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 1::numeric;
 SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 2::numeric; -- out of range error
 ERROR:  pg_lsn out of range
 SELECT '0/1'::pg_lsn - 1::numeric;
- ?column? 
-----------
- 0/0
+  ?column?  
+------------
+ 0/00000000
 (1 row)
 
 SELECT '0/1'::pg_lsn - 2::numeric; -- out of range error
@@ -125,9 +125,9 @@ SELECT '0/0'::pg_lsn + ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
 (1 row)
 
 SELECT 'FFFFFFFF/FFFFFFFF'::pg_lsn - ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
- ?column? 
-----------
- 0/0
+  ?column?  
+------------
+ 0/00000000
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn + 'NaN'::numeric;
@@ -164,107 +164,107 @@ SELECT DISTINCT (i || '/' || j)::pg_lsn f
        generate_series(1, 5) k
   WHERE i <= 10 AND j > 0 AND j <= 10
   ORDER BY f;
-   f   
--------
- 1/1
- 1/2
- 1/3
- 1/4
- 1/5
- 1/6
- 1/7
- 1/8
- 1/9
- 1/10
- 2/1
- 2/2
- 2/3
- 2/4
- 2/5
- 2/6
- 2/7
- 2/8
- 2/9
- 2/10
- 3/1
- 3/2
- 3/3
- 3/4
- 3/5
- 3/6
- 3/7
- 3/8
- 3/9
- 3/10
- 4/1
- 4/2
- 4/3
- 4/4
- 4/5
- 4/6
- 4/7
- 4/8
- 4/9
- 4/10
- 5/1
- 5/2
- 5/3
- 5/4
- 5/5
- 5/6
- 5/7
- 5/8
- 5/9
- 5/10
- 6/1
- 6/2
- 6/3
- 6/4
- 6/5
- 6/6
- 6/7
- 6/8
- 6/9
- 6/10
- 7/1
- 7/2
- 7/3
- 7/4
- 7/5
- 7/6
- 7/7
- 7/8
- 7/9
- 7/10
- 8/1
- 8/2
- 8/3
- 8/4
- 8/5
- 8/6
- 8/7
- 8/8
- 8/9
- 8/10
- 9/1
- 9/2
- 9/3
- 9/4
- 9/5
- 9/6
- 9/7
- 9/8
- 9/9
- 9/10
- 10/1
- 10/2
- 10/3
- 10/4
- 10/5
- 10/6
- 10/7
- 10/8
- 10/9
- 10/10
+      f      
+-------------
+ 1/00000001
+ 1/00000002
+ 1/00000003
+ 1/00000004
+ 1/00000005
+ 1/00000006
+ 1/00000007
+ 1/00000008
+ 1/00000009
+ 1/00000010
+ 2/00000001
+ 2/00000002
+ 2/00000003
+ 2/00000004
+ 2/00000005
+ 2/00000006
+ 2/00000007
+ 2/00000008
+ 2/00000009
+ 2/00000010
+ 3/00000001
+ 3/00000002
+ 3/00000003
+ 3/00000004
+ 3/00000005
+ 3/00000006
+ 3/00000007
+ 3/00000008
+ 3/00000009
+ 3/00000010
+ 4/00000001
+ 4/00000002
+ 4/00000003
+ 4/00000004
+ 4/00000005
+ 4/00000006
+ 4/00000007
+ 4/00000008
+ 4/00000009
+ 4/00000010
+ 5/00000001
+ 5/00000002
+ 5/00000003
+ 5/00000004
+ 5/00000005
+ 5/00000006
+ 5/00000007
+ 5/00000008
+ 5/00000009
+ 5/00000010
+ 6/00000001
+ 6/00000002
+ 6/00000003
+ 6/00000004
+ 6/00000005
+ 6/00000006
+ 6/00000007
+ 6/00000008
+ 6/00000009
+ 6/00000010
+ 7/00000001
+ 7/00000002
+ 7/00000003
+ 7/00000004
+ 7/00000005
+ 7/00000006
+ 7/00000007
+ 7/00000008
+ 7/00000009
+ 7/00000010
+ 8/00000001
+ 8/00000002
+ 8/00000003
+ 8/00000004
+ 8/00000005
+ 8/00000006
+ 8/00000007
+ 8/00000008
+ 8/00000009
+ 8/00000010
+ 9/00000001
+ 9/00000002
+ 9/00000003
+ 9/00000004
+ 9/00000005
+ 9/00000006
+ 9/00000007
+ 9/00000008
+ 9/00000009
+ 9/00000010
+ 10/00000001
+ 10/00000002
+ 10/00000003
+ 10/00000004
+ 10/00000005
+ 10/00000006
+ 10/00000007
+ 10/00000008
+ 10/00000009
+ 10/00000010
 (100 rows)
 
diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 1443e1d9292..529b2241731 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -116,18 +116,18 @@ CREATE SUBSCRIPTION regress_testsub4 CONNECTION 'dbname=regress_doesnotexist' PU
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+ regress_testsub4
-                                                                                                                 List of subscriptions
-       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | none   | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                  List of subscriptions
+       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | none   | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub4 SET (origin = any);
 \dRs+ regress_testsub4
-                                                                                                                 List of subscriptions
-       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                  List of subscriptions
+       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub3;
@@ -145,10 +145,10 @@ ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar';
 ERROR:  invalid connection string syntax: missing "=" after "foobar" in connection info string
 
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH (refresh = false);
@@ -157,10 +157,10 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = 'newname');
 ALTER SUBSCRIPTION regress_testsub SET (password_required = false);
 ALTER SUBSCRIPTION regress_testsub SET (run_as_owner = true);
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | f                 | t             | f        | off                | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | f                 | t             | f        | off                | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (password_required = true);
@@ -176,10 +176,10 @@ ERROR:  unrecognized subscription parameter: "create_slot"
 -- ok
 ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/12345');
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/12345
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/00012345
 (1 row)
 
 -- ok - with lsn = NONE
@@ -188,10 +188,10 @@ ALTER SUBSCRIPTION regress_testsub SKIP (lsn = NONE);
 ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/0');
 ERROR:  invalid WAL location (LSN): 0/0
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 BEGIN;
@@ -223,10 +223,10 @@ ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar);
 ERROR:  invalid value for parameter "synchronous_commit": "foobar"
 HINT:  Available values: local, remote_write, remote_apply, on, off.
 \dRs+
-                                                                                                                       List of subscriptions
-        Name         |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
----------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub_foo | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | local              | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                        List of subscriptions
+        Name         |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+---------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub_foo | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | local              | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 -- rename back to keep the rest simple
@@ -255,19 +255,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | t      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | t      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (binary = false);
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub;
@@ -279,27 +279,27 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (streaming = parallel);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (streaming = false);
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- fail - publication already exists
@@ -314,10 +314,10 @@ ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refr
 ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
 ERROR:  publication "testpub1" is already in subscription "regress_testsub"
 \dRs+
-                                                                                                                        List of subscriptions
-      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                         List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- fail - publication used more than once
@@ -332,10 +332,10 @@ ERROR:  publication "testpub3" is not in subscription "regress_testsub"
 -- ok - delete publications
 ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub;
@@ -371,19 +371,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- we can alter streaming when two_phase enabled
 ALTER SUBSCRIPTION regress_testsub SET (streaming = true);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -393,10 +393,10 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -409,18 +409,18 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (disable_on_error = true);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | t                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | t                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
-- 
2.43.0

#11Álvaro Herrera
alvherre@kurilemu.de
In reply to: Michael Paquier (#8)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-03, Michael Paquier wrote:

Yep. If you do not want this new policy to be forgotten by new paths,
I'd suggested to standarize that with something like that, close to
the existing LSN_FORMAT_ARGS():
#define LSN_FORMAT "%X/%08X"

Well, the reason we didn't use a macro in the format string is that
translatability suffers quite a bit, and it's quite annoying. You can
still use it in strings that aren't going to be translated -- for
instance in all the xlog *_desc routines, in elog(), errmsg_internal(),
errdetail_internal(). But for translatable messages such as errmsg(),
errdetail, it's going to break. For example, one particular message in
twophase.c was originally

msgid "could not read two-phase state from WAL at %X/%X"

after this patch, it becomes

msgid "could not read two-phase state from WAL at "

which is obviously broken. (You can test this by running "make
update-po" and looking at the src/backend/po/*.po.new files. No idea
hwo to do this under Meson, it doesn't seem documented.)

Eyeballing the patch I think a majority of the messages are not
translatable, so I'm still okay with adding and using the macro. But we
need a revision to go back to literal %X/%08X in errmsg(), errdetail(),
report_invalid_record(). I'd also add a comment next to the macro
indicating that the macro MUST NOT be used for translatable strings, as
it otherwise results in a bug that's only visible if you're running a
version in a language other than English. I bet we're still going to
get hackers use it badly, but not often.

The GNU gettext manual suggests you can print the value to a string
variable and then use %s to include that in the translatable string, but
I doubt that's an improvement over just using %X/%08X directly.
Bottom of this page here:
https://www.gnu.org/software/gettext/manual/html_node/No-string-concatenation.html

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/

#12Japin Li
japinli@hotmail.com
In reply to: Álvaro Herrera (#11)
Re: Inconsistent LSN format in pg_waldump output

On Thu, 03 Jul 2025 at 10:19, Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-03, Michael Paquier wrote:

Yep. If you do not want this new policy to be forgotten by new paths,
I'd suggested to standarize that with something like that, close to
the existing LSN_FORMAT_ARGS():
#define LSN_FORMAT "%X/%08X"

Well, the reason we didn't use a macro in the format string is that
translatability suffers quite a bit, and it's quite annoying. You can
still use it in strings that aren't going to be translated -- for
instance in all the xlog *_desc routines, in elog(), errmsg_internal(),
errdetail_internal(). But for translatable messages such as errmsg(),
errdetail, it's going to break. For example, one particular message in
twophase.c was originally

msgid "could not read two-phase state from WAL at %X/%X"

after this patch, it becomes

msgid "could not read two-phase state from WAL at "

which is obviously broken. (You can test this by running "make
update-po" and looking at the src/backend/po/*.po.new files. No idea
hwo to do this under Meson, it doesn't seem documented.)

You're right; I overlooked it.

Eyeballing the patch I think a majority of the messages are not
translatable, so I'm still okay with adding and using the macro. But we
need a revision to go back to literal %X/%08X in errmsg(), errdetail(),
report_invalid_record(). I'd also add a comment next to the macro
indicating that the macro MUST NOT be used for translatable strings, as
it otherwise results in a bug that's only visible if you're running a
version in a language other than English. I bet we're still going to
get hackers use it badly, but not often.

Providing two LSN formats — %X%08X for translatable messages and
LSN_FORMAT for non-translatable ones — seems to offer no clear advantage.

I'd prefer to use %X/%08X directly and add the description to the
LSN_FORMAT_ARGS macro.

The GNU gettext manual suggests you can print the value to a string
variable and then use %s to include that in the translatable string, but
I doubt that's an improvement over just using %X/%08X directly.
Bottom of this page here:
https://www.gnu.org/software/gettext/manual/html_node/No-string-concatenation.html

Yes, I don't consider that an improvement.

--
Regards,
Japin Li

#13Álvaro Herrera
alvherre@kurilemu.de
In reply to: Japin Li (#12)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-03, Japin Li wrote:

Providing two LSN formats — %X%08X for translatable messages and
LSN_FORMAT for non-translatable ones — seems to offer no clear advantage.

I'd prefer to use %X/%08X directly and add the description to the
LSN_FORMAT_ARGS macro.

WFM.

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"La gente vulgar sólo piensa en pasar el tiempo;
el que tiene talento, en aprovecharlo"

#14Japin Li
japinli@hotmail.com
In reply to: Álvaro Herrera (#13)
1 attachment(s)
Re: Inconsistent LSN format in pg_waldump output

On Thu, 03 Jul 2025 at 18:07, Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-03, Japin Li wrote:

Providing two LSN formats — %X%08X for translatable messages and
LSN_FORMAT for non-translatable ones — seems to offer no clear advantage.

I'd prefer to use %X/%08X directly and add the description to the
LSN_FORMAT_ARGS macro.

WFM.

Many thanks! V4 of the patch is now attached.

I've opted to directly use %X/%08X for LSN formatting in this patch, with an
accompanying comment near LSN_FORMAT_ARGS.

--
Regards,
Japin Li

Attachments:

v4-0001-Standardize-LSN-formatting-by-zero-padding.patchtext/x-diffDownload
From fbebe8378485417d9ba1074e2ab5bf01f64ed389 Mon Sep 17 00:00:00 2001
From: Li Jianping <jianping.li@ww-it.cn>
Date: Thu, 3 Jul 2025 12:00:11 +0800
Subject: [PATCH v4] Standardize LSN formatting by zero padding

This commit standardizes the output format for LSNs to ensure consistent
representation across various tools and messages.

Previously, LSNs were inconsistently printed as `%X/%X` in some contexts,
while others used zero-padding.  This often led to confusion when comparing.

To address this, the LSN format is now uniformly set to `%X/%08X`, ensuring
the lower 32-bit part is always zero-padded to eight hexadecimal digits.

To avoid breaking translatable messages, we're directly applying the LSN
format instead of using a macro.
---
 contrib/amcheck/verify_nbtree.c               |  44 ++--
 contrib/pageinspect/expected/gist.out         |  18 +-
 contrib/pageinspect/expected/page.out         |   6 +-
 contrib/pageinspect/rawpage.c                 |   2 +-
 .../pg_walinspect/expected/pg_walinspect.out  |   8 +-
 contrib/pg_walinspect/pg_walinspect.c         |  18 +-
 src/backend/access/rmgrdesc/replorigindesc.c  |   2 +-
 src/backend/access/rmgrdesc/xactdesc.c        |   6 +-
 src/backend/access/rmgrdesc/xlogdesc.c        |   6 +-
 src/backend/access/transam/timeline.c         |   4 +-
 src/backend/access/transam/twophase.c         |   8 +-
 src/backend/access/transam/xlog.c             |  40 +--
 src/backend/access/transam/xlogbackup.c       |   8 +-
 src/backend/access/transam/xlogprefetcher.c   |  16 +-
 src/backend/access/transam/xlogreader.c       |  62 ++---
 src/backend/access/transam/xlogrecovery.c     |  72 +++---
 src/backend/access/transam/xlogutils.c        |   2 +-
 src/backend/backup/backup_manifest.c          |   2 +-
 src/backend/backup/basebackup_copy.c          |   2 +-
 src/backend/backup/basebackup_incremental.c   |  14 +-
 src/backend/commands/subscriptioncmds.c       |   2 +-
 src/backend/postmaster/walsummarizer.c        |  26 +-
 .../libpqwalreceiver/libpqwalreceiver.c       |   2 +-
 src/backend/replication/logical/logical.c     |  14 +-
 src/backend/replication/logical/origin.c      |   2 +-
 src/backend/replication/logical/slotsync.c    |  10 +-
 src/backend/replication/logical/snapbuild.c   |  16 +-
 src/backend/replication/logical/tablesync.c   |   2 +-
 src/backend/replication/logical/worker.c      |  18 +-
 src/backend/replication/repl_gram.y           |   4 +-
 src/backend/replication/repl_scanner.l        |   2 +-
 src/backend/replication/slot.c                |   4 +-
 src/backend/replication/slotfuncs.c           |   2 +-
 src/backend/replication/syncrep.c             |   4 +-
 src/backend/replication/walreceiver.c         |  12 +-
 src/backend/replication/walsender.c           |  20 +-
 src/backend/storage/ipc/standby.c             |   4 +-
 src/backend/utils/adt/pg_lsn.c                |   2 +-
 src/bin/pg_basebackup/pg_basebackup.c         |   6 +-
 src/bin/pg_basebackup/pg_createsubscriber.c   |   4 +-
 src/bin/pg_basebackup/pg_receivewal.c         |  10 +-
 src/bin/pg_basebackup/pg_recvlogical.c        |  14 +-
 src/bin/pg_basebackup/receivelog.c            |   6 +-
 src/bin/pg_basebackup/streamutil.c            |   4 +-
 src/bin/pg_combinebackup/backup_label.c       |   2 +-
 src/bin/pg_combinebackup/pg_combinebackup.c   |   2 +-
 src/bin/pg_combinebackup/write_manifest.c     |   2 +-
 src/bin/pg_controldata/pg_controldata.c       |  12 +-
 src/bin/pg_rewind/libpq_source.c              |   2 +-
 src/bin/pg_rewind/parsexlog.c                 |  16 +-
 src/bin/pg_rewind/pg_rewind.c                 |  10 +-
 src/bin/pg_rewind/timeline.c                  |   2 +-
 src/bin/pg_verifybackup/pg_verifybackup.c     |   2 +-
 src/bin/pg_waldump/pg_waldump.c               |  18 +-
 src/common/parse_manifest.c                   |   2 +-
 src/include/access/xlogdefs.h                 |   5 +-
 src/test/recovery/t/016_min_consistency.pl    |   2 +-
 src/test/regress/expected/numeric.out         |  12 +-
 src/test/regress/expected/pg_lsn.out          | 240 +++++++++---------
 src/test/regress/expected/subscription.out    | 152 +++++------
 60 files changed, 507 insertions(+), 504 deletions(-)

diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c
index f11c43a0ed7..25cae8994a1 100644
--- a/contrib/amcheck/verify_nbtree.c
+++ b/contrib/amcheck/verify_nbtree.c
@@ -913,7 +913,7 @@ bt_report_duplicate(BtreeCheckState *state,
 			(errcode(ERRCODE_INDEX_CORRUPTED),
 			 errmsg("index uniqueness is violated for index \"%s\"",
 					RelationGetRelationName(state->rel)),
-			 errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%X.",
+			 errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%08X.",
 					   itid, pposting, nitid, pnposting, htid, nhtid,
 					   LSN_FORMAT_ARGS(state->targetlsn))));
 }
@@ -1058,7 +1058,7 @@ bt_leftmost_ignoring_half_dead(BtreeCheckState *state,
 					(errcode(ERRCODE_NO_DATA),
 					 errmsg_internal("harmless interrupted page deletion detected in index \"%s\"",
 									 RelationGetRelationName(state->rel)),
-					 errdetail_internal("Block=%u right block=%u page lsn=%X/%X.",
+					 errdetail_internal("Block=%u right block=%u page lsn=%X/%08X.",
 										reached, reached_from,
 										LSN_FORMAT_ARGS(pagelsn))));
 
@@ -1283,7 +1283,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("wrong number of high key index tuple attributes in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%X.",
+					 errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%08X.",
 										state->targetblock,
 										BTreeTupleGetNAtts(itup, state->rel),
 										P_ISLEAF(topaque) ? "heap" : "index",
@@ -1332,7 +1332,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("index tuple size does not equal lp_len in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%X.",
+					 errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%08X.",
 										state->targetblock, offset,
 										tupsize, ItemIdGetLength(itemid),
 										LSN_FORMAT_ARGS(state->targetlsn)),
@@ -1356,7 +1356,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("wrong number of index tuple attributes in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%08X.",
 										itid,
 										BTreeTupleGetNAtts(itup, state->rel),
 										P_ISLEAF(topaque) ? "heap" : "index",
@@ -1406,7 +1406,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("could not find tuple using search from root page in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%08X.",
 										itid, htid,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 		}
@@ -1435,7 +1435,7 @@ bt_target_page_check(BtreeCheckState *state)
 							(errcode(ERRCODE_INDEX_CORRUPTED),
 							 errmsg_internal("posting list contains misplaced TID in index \"%s\"",
 											 RelationGetRelationName(state->rel)),
-							 errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%X.",
+							 errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%08X.",
 												itid, i,
 												LSN_FORMAT_ARGS(state->targetlsn))));
 				}
@@ -1488,7 +1488,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("index row size %zu exceeds maximum for index \"%s\"",
 							tupsize, RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1595,7 +1595,7 @@ bt_target_page_check(BtreeCheckState *state)
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("high key invariant violated for index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
+					 errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1643,7 +1643,7 @@ bt_target_page_check(BtreeCheckState *state)
 							RelationGetRelationName(state->rel)),
 					 errdetail_internal("Lower index tid=%s (points to %s tid=%s) "
 										"higher index tid=%s (points to %s tid=%s) "
-										"page lsn=%X/%X.",
+										"page lsn=%X/%08X.",
 										itid,
 										P_ISLEAF(topaque) ? "heap" : "index",
 										htid,
@@ -1760,7 +1760,7 @@ bt_target_page_check(BtreeCheckState *state)
 						(errcode(ERRCODE_INDEX_CORRUPTED),
 						 errmsg("cross page item order invariant violated for index \"%s\"",
 								RelationGetRelationName(state->rel)),
-						 errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%X.",
+						 errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%08X.",
 											state->targetblock, offset,
 											LSN_FORMAT_ARGS(state->targetlsn))));
 			}
@@ -1813,7 +1813,7 @@ bt_target_page_check(BtreeCheckState *state)
 								(errcode(ERRCODE_INDEX_CORRUPTED),
 								 errmsg("right block of leaf block is non-leaf for index \"%s\"",
 										RelationGetRelationName(state->rel)),
-								 errdetail_internal("Block=%u page lsn=%X/%X.",
+								 errdetail_internal("Block=%u page lsn=%X/%08X.",
 													state->targetblock,
 													LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2237,7 +2237,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("the first child of leftmost target page is not leftmost of its level in index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+					 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 										state->targetblock, blkno,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2323,7 +2323,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 								(errcode(ERRCODE_INDEX_CORRUPTED),
 								 errmsg("child high key is greater than rightmost pivot key on target level in index \"%s\"",
 										RelationGetRelationName(state->rel)),
-								 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+								 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 													state->targetblock, blkno,
 													LSN_FORMAT_ARGS(state->targetlsn))));
 					pivotkey_offset = P_HIKEY;
@@ -2353,7 +2353,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 							(errcode(ERRCODE_INDEX_CORRUPTED),
 							 errmsg("can't find left sibling high key in index \"%s\"",
 									RelationGetRelationName(state->rel)),
-							 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+							 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 												state->targetblock, blkno,
 												LSN_FORMAT_ARGS(state->targetlsn))));
 				itup = state->lowkey;
@@ -2365,7 +2365,7 @@ bt_child_highkey_check(BtreeCheckState *state,
 						(errcode(ERRCODE_INDEX_CORRUPTED),
 						 errmsg("mismatch between parent key and child high key in index \"%s\"",
 								RelationGetRelationName(state->rel)),
-						 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
+						 errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
 											state->targetblock, blkno,
 											LSN_FORMAT_ARGS(state->targetlsn))));
 			}
@@ -2505,7 +2505,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg("downlink to deleted page found in index \"%s\"",
 						RelationGetRelationName(state->rel)),
-				 errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%X.",
+				 errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%08X.",
 									state->targetblock, childblock,
 									LSN_FORMAT_ARGS(state->targetlsn))));
 
@@ -2546,7 +2546,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
 					(errcode(ERRCODE_INDEX_CORRUPTED),
 					 errmsg("down-link lower bound invariant violated for index \"%s\"",
 							RelationGetRelationName(state->rel)),
-					 errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%X.",
+					 errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%08X.",
 										state->targetblock, childblock, offset,
 										LSN_FORMAT_ARGS(state->targetlsn))));
 	}
@@ -2616,7 +2616,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_NO_DATA),
 				 errmsg_internal("harmless interrupted page split detected in index \"%s\"",
 								 RelationGetRelationName(state->rel)),
-				 errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.",
+				 errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%08X.",
 									blkno, opaque->btpo_level,
 									opaque->btpo_prev,
 									LSN_FORMAT_ARGS(pagelsn))));
@@ -2638,7 +2638,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg("leaf index block lacks downlink in index \"%s\"",
 						RelationGetRelationName(state->rel)),
-				 errdetail_internal("Block=%u page lsn=%X/%X.",
+				 errdetail_internal("Block=%u page lsn=%X/%08X.",
 									blkno,
 									LSN_FORMAT_ARGS(pagelsn))));
 
@@ -2704,7 +2704,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 				(errcode(ERRCODE_INDEX_CORRUPTED),
 				 errmsg_internal("downlink to deleted leaf page found in index \"%s\"",
 								 RelationGetRelationName(state->rel)),
-				 errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%X.",
+				 errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%08X.",
 									blkno, childblk,
 									LSN_FORMAT_ARGS(pagelsn))));
 
@@ -2730,7 +2730,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
 			(errcode(ERRCODE_INDEX_CORRUPTED),
 			 errmsg("internal index block lacks downlink in index \"%s\"",
 					RelationGetRelationName(state->rel)),
-			 errdetail_internal("Block=%u level=%u page lsn=%X/%X.",
+			 errdetail_internal("Block=%u level=%u page lsn=%X/%08X.",
 								blkno, opaque->btpo_level,
 								LSN_FORMAT_ARGS(pagelsn))));
 }
diff --git a/contrib/pageinspect/expected/gist.out b/contrib/pageinspect/expected/gist.out
index 2b1d54a6279..8502f9efb41 100644
--- a/contrib/pageinspect/expected/gist.out
+++ b/contrib/pageinspect/expected/gist.out
@@ -5,21 +5,21 @@ CREATE UNLOGGED TABLE test_gist AS SELECT point(i,i) p, i::text t FROM
 CREATE INDEX test_gist_idx ON test_gist USING gist (p);
 -- Page 0 is the root, the rest are leaf pages
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 0));
- lsn | nsn | rightlink  | flags 
------+-----+------------+-------
- 0/1 | 0/0 | 4294967295 | {}
+    lsn     |    nsn     | rightlink  | flags 
+------------+------------+------------+-------
+ 0/00000001 | 0/00000000 | 4294967295 | {}
 (1 row)
 
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 1));
- lsn | nsn | rightlink  | flags  
------+-----+------------+--------
- 0/1 | 0/0 | 4294967295 | {leaf}
+    lsn     |    nsn     | rightlink  | flags  
+------------+------------+------------+--------
+ 0/00000001 | 0/00000000 | 4294967295 | {leaf}
 (1 row)
 
 SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2));
- lsn | nsn | rightlink | flags  
------+-----+-----------+--------
- 0/1 | 0/0 |         1 | {leaf}
+    lsn     |    nsn     | rightlink | flags  
+------------+------------+-----------+--------
+ 0/00000001 | 0/00000000 |         1 | {leaf}
 (1 row)
 
 SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx');
diff --git a/contrib/pageinspect/expected/page.out b/contrib/pageinspect/expected/page.out
index e42fd9747fd..fcf19c5ca5a 100644
--- a/contrib/pageinspect/expected/page.out
+++ b/contrib/pageinspect/expected/page.out
@@ -265,9 +265,9 @@ SELECT fsm_page_contents(decode(repeat('00', :block_size), 'hex'));
 (1 row)
 
 SELECT page_header(decode(repeat('00', :block_size), 'hex'));
-      page_header      
------------------------
- (0/0,0,0,0,0,0,0,0,0)
+         page_header          
+------------------------------
+ (0/00000000,0,0,0,0,0,0,0,0)
 (1 row)
 
 SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1);
diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c
index 0d57123aa26..aef442b5db3 100644
--- a/contrib/pageinspect/rawpage.c
+++ b/contrib/pageinspect/rawpage.c
@@ -282,7 +282,7 @@ page_header(PG_FUNCTION_ARGS)
 	{
 		char		lsnchar[64];
 
-		snprintf(lsnchar, sizeof(lsnchar), "%X/%X", LSN_FORMAT_ARGS(lsn));
+		snprintf(lsnchar, sizeof(lsnchar), "%X/%08X", LSN_FORMAT_ARGS(lsn));
 		values[0] = CStringGetTextDatum(lsnchar);
 	}
 	else
diff --git a/contrib/pg_walinspect/expected/pg_walinspect.out b/contrib/pg_walinspect/expected/pg_walinspect.out
index c010eed8c5d..f955ff5d3c5 100644
--- a/contrib/pg_walinspect/expected/pg_walinspect.out
+++ b/contrib/pg_walinspect/expected/pg_walinspect.out
@@ -19,14 +19,14 @@ INSERT INTO sample_tbl SELECT * FROM generate_series(3, 4);
 -- ===================================================================
 -- Invalid input LSN.
 SELECT * FROM pg_get_wal_record_info('0/0');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 -- Invalid start LSN.
 SELECT * FROM pg_get_wal_records_info('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 SELECT * FROM pg_get_wal_stats('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 SELECT * FROM pg_get_wal_block_info('0/0', :'wal_lsn1');
-ERROR:  could not read WAL at LSN 0/0
+ERROR:  could not read WAL at LSN 0/00000000
 -- Start LSN > End LSN.
 SELECT * FROM pg_get_wal_records_info(:'wal_lsn2', :'wal_lsn1');
 ERROR:  WAL start LSN must be less than end LSN
diff --git a/contrib/pg_walinspect/pg_walinspect.c b/contrib/pg_walinspect/pg_walinspect.c
index 64745564cc2..f7cb5d20950 100644
--- a/contrib/pg_walinspect/pg_walinspect.c
+++ b/contrib/pg_walinspect/pg_walinspect.c
@@ -105,7 +105,7 @@ InitXLogReaderState(XLogRecPtr lsn)
 	if (lsn < XLOG_BLCKSZ)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not read WAL at LSN %X/%X",
+				 errmsg("could not read WAL at LSN " "%X/%08X",
 						LSN_FORMAT_ARGS(lsn))));
 
 	private_data = (ReadLocalXLogPageNoWaitPrivate *)
@@ -128,7 +128,7 @@ InitXLogReaderState(XLogRecPtr lsn)
 
 	if (XLogRecPtrIsInvalid(first_valid_record))
 		ereport(ERROR,
-				(errmsg("could not find a valid record after %X/%X",
+				(errmsg("could not find a valid record after " "%X/%08X",
 						LSN_FORMAT_ARGS(lsn))));
 
 	return xlogreader;
@@ -168,12 +168,12 @@ ReadNextXLogRecord(XLogReaderState *xlogreader)
 		if (errormsg)
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read WAL at %X/%X: %s",
+					 errmsg("could not read WAL at %X/%08X: %s",
 							LSN_FORMAT_ARGS(xlogreader->EndRecPtr), errormsg)));
 		else
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read WAL at %X/%X",
+					 errmsg("could not read WAL at " "%X/%08X",
 							LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 	}
 
@@ -479,7 +479,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL input LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(curr_lsn))));
 
 	/* Build a tuple descriptor for our result type. */
@@ -491,7 +491,7 @@ pg_get_wal_record_info(PG_FUNCTION_ARGS)
 	if (!ReadNextXLogRecord(xlogreader))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("could not read WAL at %X/%X",
+				 errmsg("could not read WAL at " "%X/%08X",
 						LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 
 	GetWALRecordInfo(xlogreader, values, nulls, PG_GET_WAL_RECORD_INFO_COLS);
@@ -521,7 +521,7 @@ ValidateInputLSNs(XLogRecPtr start_lsn, XLogRecPtr *end_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(curr_lsn))));
 
 	if (start_lsn > *end_lsn)
@@ -827,7 +827,7 @@ pg_get_wal_records_info_till_end_of_wal(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(end_lsn))));
 
 	GetWALRecordsInfo(fcinfo, start_lsn, end_lsn);
@@ -846,7 +846,7 @@ pg_get_wal_stats_till_end_of_wal(PG_FUNCTION_ARGS)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("WAL start LSN must be less than current LSN"),
-				 errdetail("Current WAL LSN on the database system is at %X/%X.",
+				 errdetail("Current WAL LSN on the database system is at %X/%08X.",
 						   LSN_FORMAT_ARGS(end_lsn))));
 
 	GetWalStats(fcinfo, start_lsn, end_lsn, stats_per_record);
diff --git a/src/backend/access/rmgrdesc/replorigindesc.c b/src/backend/access/rmgrdesc/replorigindesc.c
index 5dd74233996..35e3af2903e 100644
--- a/src/backend/access/rmgrdesc/replorigindesc.c
+++ b/src/backend/access/rmgrdesc/replorigindesc.c
@@ -29,7 +29,7 @@ replorigin_desc(StringInfo buf, XLogReaderState *record)
 
 				xlrec = (xl_replorigin_set *) rec;
 
-				appendStringInfo(buf, "set %u; lsn %X/%X; force: %d",
+				appendStringInfo(buf, "set %u; lsn %X/%08X; force: %d",
 								 xlrec->node_id,
 								 LSN_FORMAT_ARGS(xlrec->remote_lsn),
 								 xlrec->force);
diff --git a/src/backend/access/rmgrdesc/xactdesc.c b/src/backend/access/rmgrdesc/xactdesc.c
index 305598e2865..f0f696855b9 100644
--- a/src/backend/access/rmgrdesc/xactdesc.c
+++ b/src/backend/access/rmgrdesc/xactdesc.c
@@ -359,7 +359,7 @@ xact_desc_commit(StringInfo buf, uint8 info, xl_xact_commit *xlrec, RepOriginId
 
 	if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN)
 	{
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
@@ -384,7 +384,7 @@ xact_desc_abort(StringInfo buf, uint8 info, xl_xact_abort *xlrec, RepOriginId or
 
 	if (parsed.xinfo & XACT_XINFO_HAS_ORIGIN)
 	{
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
@@ -418,7 +418,7 @@ xact_desc_prepare(StringInfo buf, uint8 info, xl_xact_prepare *xlrec, RepOriginI
 	 * way as PrepareRedoAdd().
 	 */
 	if (origin_id != InvalidRepOriginId)
-		appendStringInfo(buf, "; origin: node %u, lsn %X/%X, at %s",
+		appendStringInfo(buf, "; origin: node %u, lsn %X/%08X, at %s",
 						 origin_id,
 						 LSN_FORMAT_ARGS(parsed.origin_lsn),
 						 timestamptz_to_str(parsed.origin_timestamp));
diff --git a/src/backend/access/rmgrdesc/xlogdesc.c b/src/backend/access/rmgrdesc/xlogdesc.c
index 58040f28656..cd6c2a2f650 100644
--- a/src/backend/access/rmgrdesc/xlogdesc.c
+++ b/src/backend/access/rmgrdesc/xlogdesc.c
@@ -65,7 +65,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 	{
 		CheckPoint *checkpoint = (CheckPoint *) rec;
 
-		appendStringInfo(buf, "redo %X/%X; "
+		appendStringInfo(buf, "redo %X/%08X; "
 						 "tli %u; prev tli %u; fpw %s; wal_level %s; xid %u:%u; oid %u; multi %u; offset %u; "
 						 "oldest xid %u in DB %u; oldest multi %u in DB %u; "
 						 "oldest/newest commit timestamp xid: %u/%u; "
@@ -111,7 +111,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 		XLogRecPtr	startpoint;
 
 		memcpy(&startpoint, rec, sizeof(XLogRecPtr));
-		appendStringInfo(buf, "%X/%X", LSN_FORMAT_ARGS(startpoint));
+		appendStringInfo(buf, "%X/%08X", LSN_FORMAT_ARGS(startpoint));
 	}
 	else if (info == XLOG_PARAMETER_CHANGE)
 	{
@@ -156,7 +156,7 @@ xlog_desc(StringInfo buf, XLogReaderState *record)
 		xl_overwrite_contrecord xlrec;
 
 		memcpy(&xlrec, rec, sizeof(xl_overwrite_contrecord));
-		appendStringInfo(buf, "lsn %X/%X; time %s",
+		appendStringInfo(buf, "lsn %X/%08X; time %s",
 						 LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 						 timestamptz_to_str(xlrec.overwrite_time));
 	}
diff --git a/src/backend/access/transam/timeline.c b/src/backend/access/transam/timeline.c
index a27f27cc037..186eb91f609 100644
--- a/src/backend/access/transam/timeline.c
+++ b/src/backend/access/transam/timeline.c
@@ -154,7 +154,7 @@ readTimeLineHistory(TimeLineID targetTLI)
 		if (*ptr == '\0' || *ptr == '#')
 			continue;
 
-		nfields = sscanf(fline, "%u\t%X/%X", &tli, &switchpoint_hi, &switchpoint_lo);
+		nfields = sscanf(fline, "%u\t%X/%08X", &tli, &switchpoint_hi, &switchpoint_lo);
 
 		if (nfields < 1)
 		{
@@ -399,7 +399,7 @@ writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
 	 * parent file failed to end with one.
 	 */
 	snprintf(buffer, sizeof(buffer),
-			 "%s%u\t%X/%X\t%s\n",
+			 "%s%u\t%X/%08X\t%s\n",
 			 (srcfd < 0) ? "" : "\n",
 			 parentTLI,
 			 LSN_FORMAT_ARGS(switchpoint),
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index 73a80559194..f7343c7af3e 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -1426,12 +1426,12 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
 		if (errormsg)
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read two-phase state from WAL at %X/%X: %s",
+					 errmsg("could not read two-phase state from WAL at %X/%08X: %s",
 							LSN_FORMAT_ARGS(lsn), errormsg)));
 		else
 			ereport(ERROR,
 					(errcode_for_file_access(),
-					 errmsg("could not read two-phase state from WAL at %X/%X",
+					 errmsg("could not read two-phase state from WAL at %X/%08X",
 							LSN_FORMAT_ARGS(lsn))));
 	}
 
@@ -1439,7 +1439,7 @@ XlogReadTwoPhaseData(XLogRecPtr lsn, char **buf, int *len)
 		(XLogRecGetInfo(xlogreader) & XLOG_XACT_OPMASK) != XLOG_XACT_PREPARE)
 		ereport(ERROR,
 				(errcode_for_file_access(),
-				 errmsg("expected two-phase state data is not present in WAL at %X/%X",
+				 errmsg("expected two-phase state data is not present in WAL at %X/%08X",
 						LSN_FORMAT_ARGS(lsn))));
 
 	if (len != NULL)
@@ -2512,7 +2512,7 @@ PrepareRedoAdd(char *buf, XLogRecPtr start_lsn,
 			ereport(reachedConsistency ? ERROR : WARNING,
 					(errmsg("could not recover two-phase state file for transaction %u",
 							hdr->xid),
-					 errdetail("Two-phase state file has been found in WAL record %X/%X, but this transaction has already been restored from disk.",
+					 errdetail("Two-phase state file has been found in WAL record %X/%08X, but this transaction has already been restored from disk.",
 							   LSN_FORMAT_ARGS(start_lsn))));
 			return;
 		}
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 47ffc0a2307..6f6984a9f6b 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -1028,7 +1028,7 @@ XLogInsertRecord(XLogRecData *rdata,
 		oldCxt = MemoryContextSwitchTo(walDebugCxt);
 
 		initStringInfo(&buf);
-		appendStringInfo(&buf, "INSERT @ %X/%X: ", LSN_FORMAT_ARGS(EndPos));
+		appendStringInfo(&buf, "INSERT @ %X/%08X: ", LSN_FORMAT_ARGS(EndPos));
 
 		/*
 		 * We have to piece together the WAL record data from the XLogRecData
@@ -1549,7 +1549,7 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto)
 	if (upto > reservedUpto)
 	{
 		ereport(LOG,
-				(errmsg("request to flush past end of generated WAL; request %X/%X, current position %X/%X",
+				(errmsg("request to flush past end of generated WAL; request %X/%08X, current position %X/%08X",
 						LSN_FORMAT_ARGS(upto), LSN_FORMAT_ARGS(reservedUpto))));
 		upto = reservedUpto;
 	}
@@ -1716,7 +1716,7 @@ GetXLogBuffer(XLogRecPtr ptr, TimeLineID tli)
 		endptr = pg_atomic_read_u64(&XLogCtl->xlblocks[idx]);
 
 		if (expectedEndPtr != endptr)
-			elog(PANIC, "could not find WAL buffer for %X/%X",
+			elog(PANIC, "could not find WAL buffer for %X/%08X",
 				 LSN_FORMAT_ARGS(ptr));
 	}
 	else
@@ -1776,7 +1776,7 @@ WALReadFromBuffers(char *dstbuf, XLogRecPtr startptr, Size count,
 	inserted = pg_atomic_read_u64(&XLogCtl->logInsertResult);
 	if (startptr + count > inserted)
 		ereport(ERROR,
-				errmsg("cannot read past end of generated WAL: requested %X/%X, current position %X/%X",
+				errmsg("cannot read past end of generated WAL: requested %X/%08X, current position %X/%08X",
 					   LSN_FORMAT_ARGS(startptr + count),
 					   LSN_FORMAT_ARGS(inserted)));
 
@@ -2281,7 +2281,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, TimeLineID tli, bool opportunistic)
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG && npages > 0)
 	{
-		elog(DEBUG1, "initialized %d pages, up to %X/%X",
+		elog(DEBUG1, "initialized %d pages, up to %X/%08X",
 			 npages, LSN_FORMAT_ARGS(NewPageEndPtr));
 	}
 #endif
@@ -2492,7 +2492,7 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible)
 		XLogRecPtr	EndPtr = pg_atomic_read_u64(&XLogCtl->xlblocks[curridx]);
 
 		if (LogwrtResult.Write >= EndPtr)
-			elog(PANIC, "xlog write request %X/%X is past end of log %X/%X",
+			elog(PANIC, "xlog write request %X/%08X is past end of log %X/%08X",
 				 LSN_FORMAT_ARGS(LogwrtResult.Write),
 				 LSN_FORMAT_ARGS(EndPtr));
 
@@ -2892,7 +2892,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
 		newMinRecoveryPoint = GetCurrentReplayRecPtr(&newMinRecoveryPointTLI);
 		if (!force && newMinRecoveryPoint < lsn)
 			elog(WARNING,
-				 "xlog min recovery request %X/%X is past current point %X/%X",
+				 "xlog min recovery request %X/%08X is past current point %X/%08X",
 				 LSN_FORMAT_ARGS(lsn), LSN_FORMAT_ARGS(newMinRecoveryPoint));
 
 		/* update control file */
@@ -2905,7 +2905,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
 			LocalMinRecoveryPointTLI = newMinRecoveryPointTLI;
 
 			ereport(DEBUG2,
-					(errmsg_internal("updated min recovery point to %X/%X on timeline %u",
+					(errmsg_internal("updated min recovery point to %X/%08X on timeline %u",
 									 LSN_FORMAT_ARGS(newMinRecoveryPoint),
 									 newMinRecoveryPointTLI)));
 		}
@@ -2945,7 +2945,7 @@ XLogFlush(XLogRecPtr record)
 
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG)
-		elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
+		elog(LOG, "xlog flush request %X/%08X; write %X/%08X; flush %X/%08X",
 			 LSN_FORMAT_ARGS(record),
 			 LSN_FORMAT_ARGS(LogwrtResult.Write),
 			 LSN_FORMAT_ARGS(LogwrtResult.Flush));
@@ -3078,7 +3078,7 @@ XLogFlush(XLogRecPtr record)
 	 */
 	if (LogwrtResult.Flush < record)
 		elog(ERROR,
-			 "xlog flush request %X/%X is not satisfied --- flushed only to %X/%X",
+			 "xlog flush request %X/%08X is not satisfied --- flushed only to %X/%08X",
 			 LSN_FORMAT_ARGS(record),
 			 LSN_FORMAT_ARGS(LogwrtResult.Flush));
 }
@@ -3205,7 +3205,7 @@ XLogBackgroundFlush(void)
 
 #ifdef WAL_DEBUG
 	if (XLOG_DEBUG)
-		elog(LOG, "xlog bg flush request write %X/%X; flush: %X/%X, current is write %X/%X; flush %X/%X",
+		elog(LOG, "xlog bg flush request write %X/%08X; flush: %X/%08X, current is write %X/%08X; flush %X/%08X",
 			 LSN_FORMAT_ARGS(WriteRqst.Write),
 			 LSN_FORMAT_ARGS(WriteRqst.Flush),
 			 LSN_FORMAT_ARGS(LogwrtResult.Write),
@@ -6921,7 +6921,7 @@ LogCheckpointEnd(bool restartpoint)
 						"%d removed, %d recycled; write=%ld.%03d s, "
 						"sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, "
 						"longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-						"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X",
+						"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X",
 						CheckpointStats.ckpt_bufs_written,
 						(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
 						CheckpointStats.ckpt_slru_written,
@@ -6945,7 +6945,7 @@ LogCheckpointEnd(bool restartpoint)
 						"%d removed, %d recycled; write=%ld.%03d s, "
 						"sync=%ld.%03d s, total=%ld.%03d s; sync files=%d, "
 						"longest=%ld.%03d s, average=%ld.%03d s; distance=%d kB, "
-						"estimate=%d kB; lsn=%X/%X, redo lsn=%X/%X",
+						"estimate=%d kB; lsn=%X/%08X, redo lsn=%X/%08X",
 						CheckpointStats.ckpt_bufs_written,
 						(double) CheckpointStats.ckpt_bufs_written * 100 / NBuffers,
 						CheckpointStats.ckpt_slru_written,
@@ -7641,7 +7641,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 	if (!RecoveryInProgress())
 		elog(ERROR, "can only be used at end of recovery");
 	if (pagePtr % XLOG_BLCKSZ != 0)
-		elog(ERROR, "invalid position for missing continuation record %X/%X",
+		elog(ERROR, "invalid position for missing continuation record %X/%08X",
 			 LSN_FORMAT_ARGS(pagePtr));
 
 	/* The current WAL insert position should be right after the page header */
@@ -7652,7 +7652,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 		startPos += SizeOfXLogShortPHD;
 	recptr = GetXLogInsertRecPtr();
 	if (recptr != startPos)
-		elog(ERROR, "invalid WAL insert position %X/%X for OVERWRITE_CONTRECORD",
+		elog(ERROR, "invalid WAL insert position %X/%08X for OVERWRITE_CONTRECORD",
 			 LSN_FORMAT_ARGS(recptr));
 
 	START_CRIT_SECTION();
@@ -7682,7 +7682,7 @@ CreateOverwriteContrecordRecord(XLogRecPtr aborted_lsn, XLogRecPtr pagePtr,
 
 	/* check that the record was inserted to the right place */
 	if (ProcLastRecPtr != startPos)
-		elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position %X/%X",
+		elog(ERROR, "OVERWRITE_CONTRECORD was inserted to unexpected position %X/%08X",
 			 LSN_FORMAT_ARGS(ProcLastRecPtr));
 
 	XLogFlush(recptr);
@@ -7751,7 +7751,7 @@ RecoveryRestartPoint(const CheckPoint *checkPoint, XLogReaderState *record)
 	if (XLogHaveInvalidPages())
 	{
 		elog(DEBUG2,
-			 "could not record restart point at %X/%X because there "
+			 "could not record restart point at %X/%08X because there "
 			 "are unresolved references to invalid pages",
 			 LSN_FORMAT_ARGS(checkPoint->redo));
 		return;
@@ -7832,7 +7832,7 @@ CreateRestartPoint(int flags)
 		lastCheckPoint.redo <= ControlFile->checkPointCopy.redo)
 	{
 		ereport(DEBUG2,
-				(errmsg_internal("skipping restartpoint, already performed at %X/%X",
+				(errmsg_internal("skipping restartpoint, already performed at %X/%08X",
 								 LSN_FORMAT_ARGS(lastCheckPoint.redo))));
 
 		UpdateMinRecoveryPoint(InvalidXLogRecPtr, true);
@@ -8017,7 +8017,7 @@ CreateRestartPoint(int flags)
 
 	xtime = GetLatestXTime();
 	ereport((log_checkpoints ? LOG : DEBUG2),
-			(errmsg("recovery restart point at %X/%X",
+			(errmsg("recovery restart point at %X/%08X",
 					LSN_FORMAT_ARGS(lastCheckPoint.redo)),
 			 xtime ? errdetail("Last completed transaction was at log time %s.",
 							   timestamptz_to_str(xtime)) : 0));
@@ -8281,7 +8281,7 @@ XLogRestorePoint(const char *rpName)
 	RecPtr = XLogInsert(RM_XLOG_ID, XLOG_RESTORE_POINT);
 
 	ereport(LOG,
-			(errmsg("restore point \"%s\" created at %X/%X",
+			(errmsg("restore point \"%s\" created at %X/%08X",
 					rpName, LSN_FORMAT_ARGS(RecPtr))));
 
 	return RecPtr;
diff --git a/src/backend/access/transam/xlogbackup.c b/src/backend/access/transam/xlogbackup.c
index 342590e0a46..cda4b38b7d6 100644
--- a/src/backend/access/transam/xlogbackup.c
+++ b/src/backend/access/transam/xlogbackup.c
@@ -42,7 +42,7 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 
 	XLByteToSeg(state->startpoint, startsegno, wal_segment_size);
 	XLogFileName(startxlogfile, state->starttli, startsegno, wal_segment_size);
-	appendStringInfo(result, "START WAL LOCATION: %X/%X (file %s)\n",
+	appendStringInfo(result, "START WAL LOCATION: %X/%08X (file %s)\n",
 					 LSN_FORMAT_ARGS(state->startpoint), startxlogfile);
 
 	if (ishistoryfile)
@@ -52,11 +52,11 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 
 		XLByteToSeg(state->stoppoint, stopsegno, wal_segment_size);
 		XLogFileName(stopxlogfile, state->stoptli, stopsegno, wal_segment_size);
-		appendStringInfo(result, "STOP WAL LOCATION: %X/%X (file %s)\n",
+		appendStringInfo(result, "STOP WAL LOCATION: %X/%08X (file %s)\n",
 						 LSN_FORMAT_ARGS(state->stoppoint), stopxlogfile);
 	}
 
-	appendStringInfo(result, "CHECKPOINT LOCATION: %X/%X\n",
+	appendStringInfo(result, "CHECKPOINT LOCATION: %X/%08X\n",
 					 LSN_FORMAT_ARGS(state->checkpointloc));
 	appendStringInfoString(result, "BACKUP METHOD: streamed\n");
 	appendStringInfo(result, "BACKUP FROM: %s\n",
@@ -81,7 +81,7 @@ build_backup_content(BackupState *state, bool ishistoryfile)
 	Assert(XLogRecPtrIsInvalid(state->istartpoint) == (state->istarttli == 0));
 	if (!XLogRecPtrIsInvalid(state->istartpoint))
 	{
-		appendStringInfo(result, "INCREMENTAL FROM LSN: %X/%X\n",
+		appendStringInfo(result, "INCREMENTAL FROM LSN: %X/%08X\n",
 						 LSN_FORMAT_ARGS(state->istartpoint));
 		appendStringInfo(result, "INCREMENTAL FROM TLI: %u\n",
 						 state->istarttli);
diff --git a/src/backend/access/transam/xlogprefetcher.c b/src/backend/access/transam/xlogprefetcher.c
index 7735562db01..ed3aacabc98 100644
--- a/src/backend/access/transam/xlogprefetcher.c
+++ b/src/backend/access/transam/xlogprefetcher.c
@@ -546,7 +546,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing all readahead until %X/%X is replayed due to possible TLI change",
+						 "suppressing all readahead until %X/%08X is replayed due to possible TLI change",
 						 LSN_FORMAT_ARGS(record->lsn));
 #endif
 
@@ -579,7 +579,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing prefetch in database %u until %X/%X is replayed due to raw file copy",
+						 "suppressing prefetch in database %u until %X/%08X is replayed due to raw file copy",
 						 rlocator.dbOid,
 						 LSN_FORMAT_ARGS(record->lsn));
 #endif
@@ -607,7 +607,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 						elog(XLOGPREFETCHER_DEBUG_LEVEL,
-							 "suppressing prefetch in relation %u/%u/%u until %X/%X is replayed, which creates the relation",
+							 "suppressing prefetch in relation %u/%u/%u until %X/%08X is replayed, which creates the relation",
 							 xlrec->rlocator.spcOid,
 							 xlrec->rlocator.dbOid,
 							 xlrec->rlocator.relNumber,
@@ -630,7 +630,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 					elog(XLOGPREFETCHER_DEBUG_LEVEL,
-						 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, which truncates the relation",
+						 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%08X is replayed, which truncates the relation",
 						 xlrec->rlocator.spcOid,
 						 xlrec->rlocator.dbOid,
 						 xlrec->rlocator.relNumber,
@@ -729,7 +729,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 			{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 				elog(XLOGPREFETCHER_DEBUG_LEVEL,
-					 "suppressing all prefetch in relation %u/%u/%u until %X/%X is replayed, because the relation does not exist on disk",
+					 "suppressing all prefetch in relation %u/%u/%u until %X/%08X is replayed, because the relation does not exist on disk",
 					 reln->smgr_rlocator.locator.spcOid,
 					 reln->smgr_rlocator.locator.dbOid,
 					 reln->smgr_rlocator.locator.relNumber,
@@ -750,7 +750,7 @@ XLogPrefetcherNextBlock(uintptr_t pgsr_private, XLogRecPtr *lsn)
 			{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 				elog(XLOGPREFETCHER_DEBUG_LEVEL,
-					 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%X is replayed, because the relation is too small",
+					 "suppressing prefetch in relation %u/%u/%u from block %u until %X/%08X is replayed, because the relation is too small",
 					 reln->smgr_rlocator.locator.spcOid,
 					 reln->smgr_rlocator.locator.dbOid,
 					 reln->smgr_rlocator.locator.relNumber,
@@ -928,7 +928,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator,
 		{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 			elog(XLOGPREFETCHER_DEBUG_LEVEL,
-				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (blocks >= %u filtered)",
+				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%08X is replayed (blocks >= %u filtered)",
 				 rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno,
 				 LSN_FORMAT_ARGS(filter->filter_until_replayed),
 				 filter->filter_from_block);
@@ -944,7 +944,7 @@ XLogPrefetcherIsFiltered(XLogPrefetcher *prefetcher, RelFileLocator rlocator,
 		{
 #ifdef XLOGPREFETCHER_DEBUG_LEVEL
 			elog(XLOGPREFETCHER_DEBUG_LEVEL,
-				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%X is replayed (whole database)",
+				 "prefetch of %u/%u/%u block %u suppressed; filtering until LSN %X/%08X is replayed (whole database)",
 				 rlocator.spcOid, rlocator.dbOid, rlocator.relNumber, blockno,
 				 LSN_FORMAT_ARGS(filter->filter_until_replayed));
 #endif
diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index 2790ade1f91..ac1f801b1eb 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -617,7 +617,7 @@ restart:
 	}
 	else if (targetRecOff < pageHeaderSize)
 	{
-		report_invalid_record(state, "invalid record offset at %X/%X: expected at least %u, got %u",
+		report_invalid_record(state, "invalid record offset at %X/%08X: expected at least %u, got %u",
 							  LSN_FORMAT_ARGS(RecPtr),
 							  pageHeaderSize, targetRecOff);
 		goto err;
@@ -626,7 +626,7 @@ restart:
 	if ((((XLogPageHeader) state->readBuf)->xlp_info & XLP_FIRST_IS_CONTRECORD) &&
 		targetRecOff == pageHeaderSize)
 	{
-		report_invalid_record(state, "contrecord is requested by %X/%X",
+		report_invalid_record(state, "contrecord is requested by %X/%08X",
 							  LSN_FORMAT_ARGS(RecPtr));
 		goto err;
 	}
@@ -667,7 +667,7 @@ restart:
 		if (total_len < SizeOfXLogRecord)
 		{
 			report_invalid_record(state,
-								  "invalid record length at %X/%X: expected at least %u, got %u",
+								  "invalid record length at %X/%08X: expected at least %u, got %u",
 								  LSN_FORMAT_ARGS(RecPtr),
 								  (uint32) SizeOfXLogRecord, total_len);
 			goto err;
@@ -756,7 +756,7 @@ restart:
 			if (!(pageHeader->xlp_info & XLP_FIRST_IS_CONTRECORD))
 			{
 				report_invalid_record(state,
-									  "there is no contrecord flag at %X/%X",
+									  "there is no contrecord flag at %X/%08X",
 									  LSN_FORMAT_ARGS(RecPtr));
 				goto err;
 			}
@@ -769,7 +769,7 @@ restart:
 				total_len != (pageHeader->xlp_rem_len + gotlen))
 			{
 				report_invalid_record(state,
-									  "invalid contrecord length %u (expected %lld) at %X/%X",
+									  "invalid contrecord length %u (expected %lld) at %X/%08X",
 									  pageHeader->xlp_rem_len,
 									  ((long long) total_len) - gotlen,
 									  LSN_FORMAT_ARGS(RecPtr));
@@ -1132,7 +1132,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 	if (record->xl_tot_len < SizeOfXLogRecord)
 	{
 		report_invalid_record(state,
-							  "invalid record length at %X/%X: expected at least %u, got %u",
+							  "invalid record length at %X/%08X: expected at least %u, got %u",
 							  LSN_FORMAT_ARGS(RecPtr),
 							  (uint32) SizeOfXLogRecord, record->xl_tot_len);
 		return false;
@@ -1140,7 +1140,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 	if (!RmgrIdIsValid(record->xl_rmid))
 	{
 		report_invalid_record(state,
-							  "invalid resource manager ID %u at %X/%X",
+							  "invalid resource manager ID %u at %X/%08X",
 							  record->xl_rmid, LSN_FORMAT_ARGS(RecPtr));
 		return false;
 	}
@@ -1153,7 +1153,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 		if (!(record->xl_prev < RecPtr))
 		{
 			report_invalid_record(state,
-								  "record with incorrect prev-link %X/%X at %X/%X",
+								  "record with incorrect prev-link %X/%08X at %X/%08X",
 								  LSN_FORMAT_ARGS(record->xl_prev),
 								  LSN_FORMAT_ARGS(RecPtr));
 			return false;
@@ -1169,7 +1169,7 @@ ValidXLogRecordHeader(XLogReaderState *state, XLogRecPtr RecPtr,
 		if (record->xl_prev != PrevRecPtr)
 		{
 			report_invalid_record(state,
-								  "record with incorrect prev-link %X/%X at %X/%X",
+								  "record with incorrect prev-link %X/%08X at %X/%08X",
 								  LSN_FORMAT_ARGS(record->xl_prev),
 								  LSN_FORMAT_ARGS(RecPtr));
 			return false;
@@ -1207,7 +1207,7 @@ ValidXLogRecord(XLogReaderState *state, XLogRecord *record, XLogRecPtr recptr)
 	if (!EQ_CRC32C(record->xl_crc, crc))
 	{
 		report_invalid_record(state,
-							  "incorrect resource manager data checksum in record at %X/%X",
+							  "incorrect resource manager data checksum in record at %X/%08X",
 							  LSN_FORMAT_ARGS(recptr));
 		return false;
 	}
@@ -1241,7 +1241,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "invalid magic number %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid magic number %04X in WAL segment %s, LSN %X/%08X, offset %u",
 							  hdr->xlp_magic,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1256,7 +1256,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u",
 							  hdr->xlp_info,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1298,7 +1298,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 
 		/* hmm, first page of file doesn't have a long header? */
 		report_invalid_record(state,
-							  "invalid info bits %04X in WAL segment %s, LSN %X/%X, offset %u",
+							  "invalid info bits %04X in WAL segment %s, LSN %X/%08X, offset %u",
 							  hdr->xlp_info,
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1318,7 +1318,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 		XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 		report_invalid_record(state,
-							  "unexpected pageaddr %X/%X in WAL segment %s, LSN %X/%X, offset %u",
+							  "unexpected pageaddr %X/%08X in WAL segment %s, LSN %X/%08X, offset %u",
 							  LSN_FORMAT_ARGS(hdr->xlp_pageaddr),
 							  fname,
 							  LSN_FORMAT_ARGS(recptr),
@@ -1344,7 +1344,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr,
 			XLogFileName(fname, state->seg.ws_tli, segno, state->segcxt.ws_segsize);
 
 			report_invalid_record(state,
-								  "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%X, offset %u",
+								  "out-of-sequence timeline ID %u (after %u) in WAL segment %s, LSN %X/%08X, offset %u",
 								  hdr->xlp_tli,
 								  state->latestPageTLI,
 								  fname,
@@ -1756,7 +1756,7 @@ DecodeXLogRecord(XLogReaderState *state,
 			if (block_id <= decoded->max_block_id)
 			{
 				report_invalid_record(state,
-									  "out-of-order block_id %u at %X/%X",
+									  "out-of-order block_id %u at %X/%08X",
 									  block_id,
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
@@ -1780,14 +1780,14 @@ DecodeXLogRecord(XLogReaderState *state,
 			if (blk->has_data && blk->data_len == 0)
 			{
 				report_invalid_record(state,
-									  "BKPBLOCK_HAS_DATA set, but no data included at %X/%X",
+									  "BKPBLOCK_HAS_DATA set, but no data included at %X/%08X",
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
 			}
 			if (!blk->has_data && blk->data_len != 0)
 			{
 				report_invalid_record(state,
-									  "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%X",
+									  "BKPBLOCK_HAS_DATA not set, but data length is %u at %X/%08X",
 									  (unsigned int) blk->data_len,
 									  LSN_FORMAT_ARGS(state->ReadRecPtr));
 				goto err;
@@ -1823,7 +1823,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					 blk->bimg_len == BLCKSZ))
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%X",
+										  "BKPIMAGE_HAS_HOLE set, but hole offset %u length %u block image length %u at %X/%08X",
 										  (unsigned int) blk->hole_offset,
 										  (unsigned int) blk->hole_length,
 										  (unsigned int) blk->bimg_len,
@@ -1839,7 +1839,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					(blk->hole_offset != 0 || blk->hole_length != 0))
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%X",
+										  "BKPIMAGE_HAS_HOLE not set, but hole offset %u length %u at %X/%08X",
 										  (unsigned int) blk->hole_offset,
 										  (unsigned int) blk->hole_length,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
@@ -1853,7 +1853,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					blk->bimg_len == BLCKSZ)
 				{
 					report_invalid_record(state,
-										  "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%X",
+										  "BKPIMAGE_COMPRESSED set, but block image length %u at %X/%08X",
 										  (unsigned int) blk->bimg_len,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
@@ -1868,7 +1868,7 @@ DecodeXLogRecord(XLogReaderState *state,
 					blk->bimg_len != BLCKSZ)
 				{
 					report_invalid_record(state,
-										  "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%X",
+										  "neither BKPIMAGE_HAS_HOLE nor BKPIMAGE_COMPRESSED set, but block image length is %u at %X/%08X",
 										  (unsigned int) blk->data_len,
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
@@ -1884,7 +1884,7 @@ DecodeXLogRecord(XLogReaderState *state,
 				if (rlocator == NULL)
 				{
 					report_invalid_record(state,
-										  "BKPBLOCK_SAME_REL set but no previous rel at %X/%X",
+										  "BKPBLOCK_SAME_REL set but no previous rel at %X/%08X",
 										  LSN_FORMAT_ARGS(state->ReadRecPtr));
 					goto err;
 				}
@@ -1896,7 +1896,7 @@ DecodeXLogRecord(XLogReaderState *state,
 		else
 		{
 			report_invalid_record(state,
-								  "invalid block_id %u at %X/%X",
+								  "invalid block_id %u at %X/%08X",
 								  block_id, LSN_FORMAT_ARGS(state->ReadRecPtr));
 			goto err;
 		}
@@ -1963,7 +1963,7 @@ DecodeXLogRecord(XLogReaderState *state,
 
 shortdata_err:
 	report_invalid_record(state,
-						  "record with invalid length at %X/%X",
+						  "record with invalid length at %X/%08X",
 						  LSN_FORMAT_ARGS(state->ReadRecPtr));
 err:
 	*errormsg = state->errormsg_buf;
@@ -2073,14 +2073,14 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		!record->record->blocks[block_id].in_use)
 	{
 		report_invalid_record(record,
-							  "could not restore image at %X/%X with invalid block %d specified",
+							  "could not restore image at %X/%08X with invalid block %d specified",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
 							  block_id);
 		return false;
 	}
 	if (!record->record->blocks[block_id].has_image)
 	{
-		report_invalid_record(record, "could not restore image at %X/%X with invalid state, block %d",
+		report_invalid_record(record, "could not restore image at %X/%08X with invalid state, block %d",
 							  LSN_FORMAT_ARGS(record->ReadRecPtr),
 							  block_id);
 		return false;
@@ -2107,7 +2107,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 									bkpb->bimg_len, BLCKSZ - bkpb->hole_length) <= 0)
 				decomp_success = false;
 #else
-			report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d",
+			report_invalid_record(record, "could not restore image at %X/%08X compressed with %s not supported by build, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  "LZ4",
 								  block_id);
@@ -2124,7 +2124,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 			if (ZSTD_isError(decomp_result))
 				decomp_success = false;
 #else
-			report_invalid_record(record, "could not restore image at %X/%X compressed with %s not supported by build, block %d",
+			report_invalid_record(record, "could not restore image at %X/%08X compressed with %s not supported by build, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  "zstd",
 								  block_id);
@@ -2133,7 +2133,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 		}
 		else
 		{
-			report_invalid_record(record, "could not restore image at %X/%X compressed with unknown method, block %d",
+			report_invalid_record(record, "could not restore image at %X/%08X compressed with unknown method, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  block_id);
 			return false;
@@ -2141,7 +2141,7 @@ RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
 
 		if (!decomp_success)
 		{
-			report_invalid_record(record, "could not decompress image at %X/%X, block %d",
+			report_invalid_record(record, "could not decompress image at %X/%08X, block %d",
 								  LSN_FORMAT_ARGS(record->ReadRecPtr),
 								  block_id);
 			return false;
diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c
index 93d38914854..aafca32c4b7 100644
--- a/src/backend/access/transam/xlogrecovery.c
+++ b/src/backend/access/transam/xlogrecovery.c
@@ -620,7 +620,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		 * than ControlFile->checkPoint is used.
 		 */
 		ereport(LOG,
-				(errmsg("starting backup recovery with redo LSN %X/%X, checkpoint LSN %X/%X, on timeline ID %u",
+				(errmsg("starting backup recovery with redo LSN %X/%08X, checkpoint LSN %X/%08X, on timeline ID %u",
 						LSN_FORMAT_ARGS(RedoStartLSN),
 						LSN_FORMAT_ARGS(CheckPointLoc),
 						CheckPointTLI)));
@@ -636,7 +636,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 			memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint));
 			wasShutdown = ((record->xl_info & ~XLR_INFO_MASK) == XLOG_CHECKPOINT_SHUTDOWN);
 			ereport(DEBUG1,
-					(errmsg_internal("checkpoint record is at %X/%X",
+					(errmsg_internal("checkpoint record is at %X/%08X",
 									 LSN_FORMAT_ARGS(CheckPointLoc))));
 			InRecovery = true;	/* force recovery even if SHUTDOWNED */
 
@@ -652,7 +652,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 				if (!ReadRecord(xlogprefetcher, LOG, false,
 								checkPoint.ThisTimeLineID))
 					ereport(FATAL,
-							(errmsg("could not find redo location %X/%X referenced by checkpoint record at %X/%X",
+							(errmsg("could not find redo location %X/%08X referenced by checkpoint record at %X/%08X",
 									LSN_FORMAT_ARGS(checkPoint.redo), LSN_FORMAT_ARGS(CheckPointLoc)),
 							 errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n"
 									 "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n"
@@ -663,7 +663,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		else
 		{
 			ereport(FATAL,
-					(errmsg("could not locate required checkpoint record at %X/%X",
+					(errmsg("could not locate required checkpoint record at %X/%08X",
 							LSN_FORMAT_ARGS(CheckPointLoc)),
 					 errhint("If you are restoring from a backup, touch \"%s/recovery.signal\" or \"%s/standby.signal\" and add required recovery options.\n"
 							 "If you are not restoring from a backup, try removing the file \"%s/backup_label\".\n"
@@ -773,7 +773,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		 */
 		if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
 			ereport(LOG,
-					(errmsg("restarting backup recovery with redo LSN %X/%X",
+					(errmsg("restarting backup recovery with redo LSN %X/%08X",
 							LSN_FORMAT_ARGS(ControlFile->backupStartPoint))));
 
 		/* Get the last valid checkpoint record. */
@@ -786,7 +786,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		if (record != NULL)
 		{
 			ereport(DEBUG1,
-					(errmsg_internal("checkpoint record is at %X/%X",
+					(errmsg_internal("checkpoint record is at %X/%08X",
 									 LSN_FORMAT_ARGS(CheckPointLoc))));
 		}
 		else
@@ -798,7 +798,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 			 * simplify processing around checkpoints.
 			 */
 			ereport(PANIC,
-					(errmsg("could not locate a valid checkpoint record at %X/%X",
+					(errmsg("could not locate a valid checkpoint record at %X/%08X",
 							LSN_FORMAT_ARGS(CheckPointLoc))));
 		}
 		memcpy(&checkPoint, XLogRecGetData(xlogreader), sizeof(CheckPoint));
@@ -824,7 +824,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 							recoveryTargetName)));
 		else if (recoveryTarget == RECOVERY_TARGET_LSN)
 			ereport(LOG,
-					(errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%X\"",
+					(errmsg("starting point-in-time recovery to WAL location (LSN) \"%X/%08X\"",
 							LSN_FORMAT_ARGS(recoveryTargetLSN))));
 		else if (recoveryTarget == RECOVERY_TARGET_IMMEDIATE)
 			ereport(LOG,
@@ -855,7 +855,7 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 				(errmsg("requested timeline %u is not a child of this server's history",
 						recoveryTargetTLI),
 		/* translator: %s is a backup_label file or a pg_control file */
-				 errdetail("Latest checkpoint in file \"%s\" is at %X/%X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%X.",
+				 errdetail("Latest checkpoint in file \"%s\" is at %X/%08X on timeline %u, but in the history of the requested timeline, the server forked off from that timeline at %X/%08X.",
 						   haveBackupLabel ? "backup_label" : "pg_control",
 						   LSN_FORMAT_ARGS(CheckPointLoc),
 						   CheckPointTLI,
@@ -870,13 +870,13 @@ InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdown_ptr,
 		tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) !=
 		ControlFile->minRecoveryPointTLI)
 		ereport(FATAL,
-				(errmsg("requested timeline %u does not contain minimum recovery point %X/%X on timeline %u",
+				(errmsg("requested timeline %u does not contain minimum recovery point %X/%08X on timeline %u",
 						recoveryTargetTLI,
 						LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint),
 						ControlFile->minRecoveryPointTLI)));
 
 	ereport(DEBUG1,
-			(errmsg_internal("redo record is at %X/%X; shutdown %s",
+			(errmsg_internal("redo record is at %X/%08X; shutdown %s",
 							 LSN_FORMAT_ARGS(checkPoint.redo),
 							 wasShutdown ? "true" : "false")));
 	ereport(DEBUG1,
@@ -1253,14 +1253,14 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI,
 	 * is pretty crude, but we are not expecting any variability in the file
 	 * format).
 	 */
-	if (fscanf(lfp, "START WAL LOCATION: %X/%X (file %08X%16s)%c",
+	if (fscanf(lfp, "START WAL LOCATION: %X/%08X (file %08X%16s)%c",
 			   &hi, &lo, &tli_from_walseg, startxlogfilename, &ch) != 5 || ch != '\n')
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				 errmsg("invalid data in file \"%s\"", BACKUP_LABEL_FILE)));
 	RedoStartLSN = ((uint64) hi) << 32 | lo;
 	RedoStartTLI = tli_from_walseg;
-	if (fscanf(lfp, "CHECKPOINT LOCATION: %X/%X%c",
+	if (fscanf(lfp, "CHECKPOINT LOCATION: %X/%08X%c",
 			   &hi, &lo, &ch) != 3 || ch != '\n')
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
@@ -1332,7 +1332,7 @@ read_backup_label(XLogRecPtr *checkPointLoc, TimeLineID *backupLabelTLI,
 								 tli_from_file, BACKUP_LABEL_FILE)));
 	}
 
-	if (fscanf(lfp, "INCREMENTAL FROM LSN: %X/%X\n", &hi, &lo) > 0)
+	if (fscanf(lfp, "INCREMENTAL FROM LSN: %X/%08X\n", &hi, &lo) > 0)
 		ereport(FATAL,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				 errmsg("this is an incremental backup, not a data directory"),
@@ -1722,7 +1722,7 @@ PerformWalRecovery(void)
 		if (record->xl_rmid != RM_XLOG_ID ||
 			(record->xl_info & ~XLR_INFO_MASK) != XLOG_CHECKPOINT_REDO)
 			ereport(FATAL,
-					(errmsg("unexpected record type found at redo point %X/%X",
+					(errmsg("unexpected record type found at redo point %X/%08X",
 							LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))));
 	}
 	else
@@ -1745,7 +1745,7 @@ PerformWalRecovery(void)
 		RmgrStartup();
 
 		ereport(LOG,
-				(errmsg("redo starts at %X/%X",
+				(errmsg("redo starts at %X/%08X",
 						LSN_FORMAT_ARGS(xlogreader->ReadRecPtr))));
 
 		/* Prepare to report progress of the redo phase. */
@@ -1758,7 +1758,7 @@ PerformWalRecovery(void)
 		do
 		{
 			if (!StandbyMode)
-				ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%X",
+				ereport_startup_progress("redo in progress, elapsed time: %ld.%02d s, current LSN: %X/%08X",
 										 LSN_FORMAT_ARGS(xlogreader->ReadRecPtr));
 
 #ifdef WAL_DEBUG
@@ -1767,7 +1767,7 @@ PerformWalRecovery(void)
 				StringInfoData buf;
 
 				initStringInfo(&buf);
-				appendStringInfo(&buf, "REDO @ %X/%X; LSN %X/%X: ",
+				appendStringInfo(&buf, "REDO @ %X/%08X; LSN %X/%08X: ",
 								 LSN_FORMAT_ARGS(xlogreader->ReadRecPtr),
 								 LSN_FORMAT_ARGS(xlogreader->EndRecPtr));
 				xlog_outrec(&buf, xlogreader);
@@ -1880,7 +1880,7 @@ PerformWalRecovery(void)
 		RmgrCleanup();
 
 		ereport(LOG,
-				(errmsg("redo done at %X/%X system usage: %s",
+				(errmsg("redo done at %X/%08X system usage: %s",
 						LSN_FORMAT_ARGS(xlogreader->ReadRecPtr),
 						pg_rusage_show(&ru0))));
 		xtime = GetLatestXTime();
@@ -2092,7 +2092,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 
 		memcpy(&xlrec, XLogRecGetData(record), sizeof(xl_overwrite_contrecord));
 		if (xlrec.overwritten_lsn != record->overwrittenRecPtr)
-			elog(FATAL, "mismatching overwritten LSN %X/%X -> %X/%X",
+			elog(FATAL, "mismatching overwritten LSN %X/%08X -> %X/%08X",
 				 LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 				 LSN_FORMAT_ARGS(record->overwrittenRecPtr));
 
@@ -2101,7 +2101,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 		missingContrecPtr = InvalidXLogRecPtr;
 
 		ereport(LOG,
-				(errmsg("successfully skipped missing contrecord at %X/%X, overwritten at %s",
+				(errmsg("successfully skipped missing contrecord at %X/%08X, overwritten at %s",
 						LSN_FORMAT_ARGS(xlrec.overwritten_lsn),
 						timestamptz_to_str(xlrec.overwrite_time))));
 
@@ -2129,7 +2129,7 @@ xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI)
 			backupEndPoint = lsn;
 		}
 		else
-			elog(DEBUG1, "saw end-of-backup record for backup starting at %X/%X, waiting for %X/%X",
+			elog(DEBUG1, "saw end-of-backup record for backup starting at %X/%08X, waiting for %X/%08X",
 				 LSN_FORMAT_ARGS(startpoint), LSN_FORMAT_ARGS(backupStartPoint));
 	}
 }
@@ -2224,7 +2224,7 @@ CheckRecoveryConsistency(void)
 		backupEndRequired = false;
 
 		ereport(LOG,
-				(errmsg("completed backup recovery with redo LSN %X/%X and end LSN %X/%X",
+				(errmsg("completed backup recovery with redo LSN %X/%08X and end LSN %X/%08X",
 						LSN_FORMAT_ARGS(saveBackupStartPoint),
 						LSN_FORMAT_ARGS(saveBackupEndPoint))));
 	}
@@ -2255,7 +2255,7 @@ CheckRecoveryConsistency(void)
 		reachedConsistency = true;
 		SendPostmasterSignal(PMSIGNAL_RECOVERY_CONSISTENT);
 		ereport(LOG,
-				(errmsg("consistent recovery state reached at %X/%X",
+				(errmsg("consistent recovery state reached at %X/%08X",
 						LSN_FORMAT_ARGS(lastReplayedEndRecPtr))));
 	}
 
@@ -2293,7 +2293,7 @@ rm_redo_error_callback(void *arg)
 	xlog_block_info(&buf, record);
 
 	/* translator: %s is a WAL record description */
-	errcontext("WAL redo at %X/%X for %s",
+	errcontext("WAL redo at %X/%08X for %s",
 			   LSN_FORMAT_ARGS(record->ReadRecPtr),
 			   buf.data);
 
@@ -2328,7 +2328,7 @@ xlog_outdesc(StringInfo buf, XLogReaderState *record)
 static void
 xlog_outrec(StringInfo buf, XLogReaderState *record)
 {
-	appendStringInfo(buf, "prev %X/%X; xid %u",
+	appendStringInfo(buf, "prev %X/%08X; xid %u",
 					 LSN_FORMAT_ARGS(XLogRecGetPrev(record)),
 					 XLogRecGetXid(record));
 
@@ -2416,7 +2416,7 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI, TimeLineID prevTLI,
 		lsn < minRecoveryPoint &&
 		newTLI > minRecoveryPointTLI)
 		ereport(PANIC,
-				(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u",
+				(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%08X on timeline %u",
 						newTLI,
 						LSN_FORMAT_ARGS(minRecoveryPoint),
 						minRecoveryPointTLI)));
@@ -2621,7 +2621,7 @@ recoveryStopsBefore(XLogReaderState *record)
 		recoveryStopTime = 0;
 		recoveryStopName[0] = '\0';
 		ereport(LOG,
-				(errmsg("recovery stopping before WAL location (LSN) \"%X/%X\"",
+				(errmsg("recovery stopping before WAL location (LSN) \"%X/%08X\"",
 						LSN_FORMAT_ARGS(recoveryStopLSN))));
 		return true;
 	}
@@ -2789,7 +2789,7 @@ recoveryStopsAfter(XLogReaderState *record)
 		recoveryStopTime = 0;
 		recoveryStopName[0] = '\0';
 		ereport(LOG,
-				(errmsg("recovery stopping after WAL location (LSN) \"%X/%X\"",
+				(errmsg("recovery stopping after WAL location (LSN) \"%X/%08X\"",
 						LSN_FORMAT_ARGS(recoveryStopLSN))));
 		return true;
 	}
@@ -2910,7 +2910,7 @@ getRecoveryStopReason(void)
 				 timestamptz_to_str(recoveryStopTime));
 	else if (recoveryTarget == RECOVERY_TARGET_LSN)
 		snprintf(reason, sizeof(reason),
-				 "%s LSN %X/%X\n",
+				 "%s LSN %X/%08X\n",
 				 recoveryStopAfter ? "after" : "before",
 				 LSN_FORMAT_ARGS(recoveryStopLSN));
 	else if (recoveryTarget == RECOVERY_TARGET_NAME)
@@ -3213,7 +3213,7 @@ ReadRecord(XLogPrefetcher *xlogprefetcher, int emode,
 			XLogFileName(fname, xlogreader->seg.ws_tli, segno,
 						 wal_segment_size);
 			ereport(emode_for_corrupt_record(emode, xlogreader->EndRecPtr),
-					(errmsg("unexpected timeline ID %u in WAL segment %s, LSN %X/%X, offset %u",
+					(errmsg("unexpected timeline ID %u in WAL segment %s, LSN %X/%08X, offset %u",
 							xlogreader->latestPageTLI,
 							fname,
 							LSN_FORMAT_ARGS(xlogreader->latestPagePtr),
@@ -3429,14 +3429,14 @@ retry:
 			errno = save_errno;
 			ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
 					(errcode_for_file_access(),
-					 errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: %m",
+					 errmsg("could not read from WAL segment %s, LSN %X/%08X, offset %u: %m",
 							fname, LSN_FORMAT_ARGS(targetPagePtr),
 							readOff)));
 		}
 		else
 			ereport(emode_for_corrupt_record(emode, targetPagePtr + reqLen),
 					(errcode(ERRCODE_DATA_CORRUPTED),
-					 errmsg("could not read from WAL segment %s, LSN %X/%X, offset %u: read %d of %zu",
+					 errmsg("could not read from WAL segment %s, LSN %X/%08X, offset %u: read %d of %zu",
 							fname, LSN_FORMAT_ARGS(targetPagePtr),
 							readOff, r, (Size) XLOG_BLCKSZ)));
 		goto next_record_is_invalid;
@@ -3718,7 +3718,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
 						wait_time = wal_retrieve_retry_interval -
 							TimestampDifferenceMilliseconds(last_fail_time, now);
 
-						elog(LOG, "waiting for WAL to become available at %X/%X",
+						elog(LOG, "waiting for WAL to become available at %X/%08X",
 							 LSN_FORMAT_ARGS(RecPtr));
 
 						/* Do background tasks that might benefit us later. */
@@ -3864,7 +3864,7 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
 							tli = tliOfPointInHistory(tliRecPtr, expectedTLEs);
 
 							if (curFileTLI > 0 && tli < curFileTLI)
-								elog(ERROR, "according to history file, WAL location %X/%X belongs to timeline %u, but previous recovered WAL file came from timeline %u",
+								elog(ERROR, "according to history file, WAL location %X/%08X belongs to timeline %u, but previous recovered WAL file came from timeline %u",
 									 LSN_FORMAT_ARGS(tliRecPtr),
 									 tli, curFileTLI);
 						}
@@ -4177,7 +4177,7 @@ rescanLatestTimeLine(TimeLineID replayTLI, XLogRecPtr replayLSN)
 	if (currentTle->end < replayLSN)
 	{
 		ereport(LOG,
-				(errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%X",
+				(errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%08X",
 						newtarget,
 						replayTLI,
 						LSN_FORMAT_ARGS(replayLSN))));
diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index c389b27f77d..27ea52fdfee 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -795,7 +795,7 @@ XLogReadDetermineTimeline(XLogReaderState *state, XLogRecPtr wantPage,
 
 		list_free_deep(timelineHistory);
 
-		elog(DEBUG3, "switched to timeline %u valid until %X/%X",
+		elog(DEBUG3, "switched to timeline %u valid until %X/%08X",
 			 state->currTLI,
 			 LSN_FORMAT_ARGS(state->currTLIValidUntil));
 	}
diff --git a/src/backend/backup/backup_manifest.c b/src/backend/backup/backup_manifest.c
index 22e2be37c95..d05252f383c 100644
--- a/src/backend/backup/backup_manifest.c
+++ b/src/backend/backup/backup_manifest.c
@@ -281,7 +281,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr,
 		}
 
 		AppendToManifest(manifest,
-						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
+						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%08X\", \"End-LSN\": \"%X/%08X\" }",
 						 first_wal_range ? "" : ",\n",
 						 entry->tli,
 						 LSN_FORMAT_ARGS(tl_beginptr),
diff --git a/src/backend/backup/basebackup_copy.c b/src/backend/backup/basebackup_copy.c
index a284ce318ff..18b0b5a52d3 100644
--- a/src/backend/backup/basebackup_copy.c
+++ b/src/backend/backup/basebackup_copy.c
@@ -361,7 +361,7 @@ SendXlogRecPtrResult(XLogRecPtr ptr, TimeLineID tli)
 	tstate = begin_tup_output_tupdesc(dest, tupdesc, &TTSOpsVirtual);
 
 	/* Data row */
-	values[0] = CStringGetTextDatum(psprintf("%X/%X", LSN_FORMAT_ARGS(ptr)));
+	values[0] = CStringGetTextDatum(psprintf("%X/%08X", LSN_FORMAT_ARGS(ptr)));
 	values[1] = Int64GetDatum(tli);
 	do_tup_output(tstate, values, nulls);
 
diff --git a/src/backend/backup/basebackup_incremental.c b/src/backend/backup/basebackup_incremental.c
index 28491b1e0ab..a0d48ff0fef 100644
--- a/src/backend/backup/basebackup_incremental.c
+++ b/src/backend/backup/basebackup_incremental.c
@@ -409,7 +409,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->start_lsn < tlep[i]->begin)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from initial timeline %u starting at %X/%X, but that timeline begins at %X/%X",
+						 errmsg("manifest requires WAL from initial timeline %u starting at %X/%08X, but that timeline begins at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->start_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->begin))));
@@ -419,7 +419,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->start_lsn != tlep[i]->begin)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from continuation timeline %u starting at %X/%X, but that timeline begins at %X/%X",
+						 errmsg("manifest requires WAL from continuation timeline %u starting at %X/%08X, but that timeline begins at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->start_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->begin))));
@@ -430,7 +430,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->end_lsn > backup_state->startpoint)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from final timeline %u ending at %X/%X, but this backup starts at %X/%X",
+						 errmsg("manifest requires WAL from final timeline %u ending at %X/%08X, but this backup starts at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->end_lsn),
 								LSN_FORMAT_ARGS(backup_state->startpoint)),
@@ -441,7 +441,7 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (range->end_lsn != tlep[i]->end)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("manifest requires WAL from non-final timeline %u ending at %X/%X, but this server switched timelines at %X/%X",
+						 errmsg("manifest requires WAL from non-final timeline %u ending at %X/%08X, but this server switched timelines at %X/%08X",
 								range->tli,
 								LSN_FORMAT_ARGS(range->end_lsn),
 								LSN_FORMAT_ARGS(tlep[i]->end))));
@@ -522,18 +522,18 @@ PrepareForIncrementalBackup(IncrementalBackupInfo *ib,
 			if (XLogRecPtrIsInvalid(tli_missing_lsn))
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but no summaries for that timeline and LSN range exist",
+						 errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but no summaries for that timeline and LSN range exist",
 								tle->tli,
 								LSN_FORMAT_ARGS(tli_start_lsn),
 								LSN_FORMAT_ARGS(tli_end_lsn))));
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-						 errmsg("WAL summaries are required on timeline %u from %X/%X to %X/%X, but the summaries for that timeline and LSN range are incomplete",
+						 errmsg("WAL summaries are required on timeline %u from %X/%08X to %X/%08X, but the summaries for that timeline and LSN range are incomplete",
 								tle->tli,
 								LSN_FORMAT_ARGS(tli_start_lsn),
 								LSN_FORMAT_ARGS(tli_end_lsn)),
-						 errdetail("The first unsummarized LSN in this range is %X/%X.",
+						 errdetail("The first unsummarized LSN in this range is %X/%08X.",
 								   LSN_FORMAT_ARGS(tli_missing_lsn))));
 		}
 
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 4ff246cd943..e23b0de7242 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -1539,7 +1539,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
 					if (!XLogRecPtrIsInvalid(remote_lsn) && opts.lsn < remote_lsn)
 						ereport(ERROR,
 								(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-								 errmsg("skip WAL location (LSN %X/%X) must be greater than origin LSN %X/%X",
+								 errmsg("skip WAL location (LSN %X/%08X) must be greater than origin LSN %X/%08X",
 										LSN_FORMAT_ARGS(opts.lsn),
 										LSN_FORMAT_ARGS(remote_lsn))));
 				}
diff --git a/src/backend/postmaster/walsummarizer.c b/src/backend/postmaster/walsummarizer.c
index 0fec4f1f871..f5b5af3414a 100644
--- a/src/backend/postmaster/walsummarizer.c
+++ b/src/backend/postmaster/walsummarizer.c
@@ -385,7 +385,7 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
 
 			switch_lsn = tliSwitchPoint(current_tli, tles, &switch_tli);
 			ereport(DEBUG1,
-					errmsg_internal("switch point from TLI %u to TLI %u is at %X/%X",
+					errmsg_internal("switch point from TLI %u to TLI %u is at %X/%08X",
 									current_tli, switch_tli, LSN_FORMAT_ARGS(switch_lsn)));
 		}
 
@@ -741,7 +741,7 @@ WaitForWalSummarization(XLogRecPtr lsn)
 				ereport(ERROR,
 						(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 						 errmsg("WAL summarization is not progressing"),
-						 errdetail("Summarization is needed through %X/%X, but is stuck at %X/%X on disk and %X/%X in memory.",
+						 errdetail("Summarization is needed through %X/%08X, but is stuck at %X/%08X on disk and %X/%08X in memory.",
 								   LSN_FORMAT_ARGS(lsn),
 								   LSN_FORMAT_ARGS(summarized_lsn),
 								   LSN_FORMAT_ARGS(pending_lsn))));
@@ -755,12 +755,12 @@ WaitForWalSummarization(XLogRecPtr lsn)
 												current_time) / 1000;
 			ereport(WARNING,
 					(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-					 errmsg_plural("still waiting for WAL summarization through %X/%X after %ld second",
-								   "still waiting for WAL summarization through %X/%X after %ld seconds",
+					 errmsg_plural("still waiting for WAL summarization through %X/%08X after %ld second",
+								   "still waiting for WAL summarization through %X/%08X after %ld seconds",
 								   elapsed_seconds,
 								   LSN_FORMAT_ARGS(lsn),
 								   elapsed_seconds),
-					 errdetail("Summarization has reached %X/%X on disk and %X/%X in memory.",
+					 errdetail("Summarization has reached %X/%08X on disk and %X/%08X in memory.",
 							   LSN_FORMAT_ARGS(summarized_lsn),
 							   LSN_FORMAT_ARGS(pending_lsn))));
 		}
@@ -981,7 +981,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			if (private_data->end_of_wal)
 			{
 				ereport(DEBUG1,
-						errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X",
+						errmsg_internal("could not read WAL from timeline %u at %X/%08X: end of WAL at %X/%08X",
 										tli,
 										LSN_FORMAT_ARGS(start_lsn),
 										LSN_FORMAT_ARGS(private_data->read_upto)));
@@ -1000,7 +1000,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			}
 			else
 				ereport(ERROR,
-						(errmsg("could not find a valid record after %X/%X",
+						(errmsg("could not find a valid record after %X/%08X",
 								LSN_FORMAT_ARGS(start_lsn))));
 		}
 
@@ -1034,7 +1034,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 				 * able to read a complete record.
 				 */
 				ereport(DEBUG1,
-						errmsg_internal("could not read WAL from timeline %u at %X/%X: end of WAL at %X/%X",
+						errmsg_internal("could not read WAL from timeline %u at %X/%08X: end of WAL at %X/%08X",
 										tli,
 										LSN_FORMAT_ARGS(xlogreader->EndRecPtr),
 										LSN_FORMAT_ARGS(private_data->read_upto)));
@@ -1045,13 +1045,13 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 			if (errormsg)
 				ereport(ERROR,
 						(errcode_for_file_access(),
-						 errmsg("could not read WAL from timeline %u at %X/%X: %s",
+						 errmsg("could not read WAL from timeline %u at %X/%08X: %s",
 								tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr),
 								errormsg)));
 			else
 				ereport(ERROR,
 						(errcode_for_file_access(),
-						 errmsg("could not read WAL from timeline %u at %X/%X",
+						 errmsg("could not read WAL from timeline %u at %X/%08X",
 								tli, LSN_FORMAT_ARGS(xlogreader->EndRecPtr))));
 		}
 
@@ -1222,7 +1222,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 
 		/* Tell the user what we did. */
 		ereport(DEBUG1,
-				errmsg_internal("summarized WAL on TLI %u from %X/%X to %X/%X",
+				errmsg_internal("summarized WAL on TLI %u from %X/%08X to %X/%08X",
 								tli,
 								LSN_FORMAT_ARGS(summary_start_lsn),
 								LSN_FORMAT_ARGS(summary_end_lsn)));
@@ -1234,7 +1234,7 @@ SummarizeWAL(TimeLineID tli, XLogRecPtr start_lsn, bool exact,
 	/* If we skipped a non-zero amount of WAL, log a debug message. */
 	if (summary_end_lsn > summary_start_lsn && fast_forward)
 		ereport(DEBUG1,
-				errmsg_internal("skipped summarizing WAL on TLI %u from %X/%X to %X/%X",
+				errmsg_internal("skipped summarizing WAL on TLI %u from %X/%08X to %X/%08X",
 								tli,
 								LSN_FORMAT_ARGS(summary_start_lsn),
 								LSN_FORMAT_ARGS(summary_end_lsn)));
@@ -1580,7 +1580,7 @@ summarizer_read_local_xlog_page(XLogReaderState *state,
 
 					/* Debugging output. */
 					ereport(DEBUG1,
-							errmsg_internal("timeline %u became historic, can read up to %X/%X",
+							errmsg_internal("timeline %u became historic, can read up to %X/%08X",
 											private_data->tli, LSN_FORMAT_ARGS(private_data->read_upto)));
 				}
 
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 7b4ddf7a8f5..f7b5d093681 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -534,7 +534,7 @@ libpqrcv_startstreaming(WalReceiverConn *conn,
 	if (options->logical)
 		appendStringInfoString(&cmd, " LOGICAL");
 
-	appendStringInfo(&cmd, " %X/%X", LSN_FORMAT_ARGS(options->startpoint));
+	appendStringInfo(&cmd, " %X/%08X", LSN_FORMAT_ARGS(options->startpoint));
 
 	/*
 	 * Additional options are different depending on if we are doing logical
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index f1eb798f3e9..7e363a7c05b 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -567,7 +567,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 		 * kinds of client errors; so the client may wish to check that
 		 * confirmed_flush_lsn matches its expectations.
 		 */
-		elog(LOG, "%X/%X has been already streamed, forwarding to %X/%X",
+		elog(LOG, "%X/%08X has been already streamed, forwarding to %X/%08X",
 			 LSN_FORMAT_ARGS(start_lsn),
 			 LSN_FORMAT_ARGS(slot->data.confirmed_flush));
 
@@ -610,7 +610,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 	ereport(LOG,
 			(errmsg("starting logical decoding for slot \"%s\"",
 					NameStr(slot->data.name)),
-			 errdetail("Streaming transactions committing after %X/%X, reading WAL from %X/%X.",
+			 errdetail("Streaming transactions committing after %X/%08X, reading WAL from %X/%08X.",
 					   LSN_FORMAT_ARGS(slot->data.confirmed_flush),
 					   LSN_FORMAT_ARGS(slot->data.restart_lsn))));
 
@@ -637,7 +637,7 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx)
 	/* Initialize from where to start reading WAL. */
 	XLogBeginRead(ctx->reader, slot->data.restart_lsn);
 
-	elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%X",
+	elog(DEBUG1, "searching for logical decoding starting point, starting at %X/%08X",
 		 LSN_FORMAT_ARGS(slot->data.restart_lsn));
 
 	/* Wait for a consistent starting point */
@@ -758,7 +758,7 @@ output_plugin_error_callback(void *arg)
 
 	/* not all callbacks have an associated LSN  */
 	if (state->report_location != InvalidXLogRecPtr)
-		errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%X",
+		errcontext("slot \"%s\", output plugin \"%s\", in the %s callback, associated LSN %X/%08X",
 				   NameStr(state->ctx->slot->data.name),
 				   NameStr(state->ctx->slot->data.plugin),
 				   state->callback_name,
@@ -1725,7 +1725,7 @@ LogicalIncreaseXminForSlot(XLogRecPtr current_lsn, TransactionId xmin)
 	SpinLockRelease(&slot->mutex);
 
 	if (got_new_xmin)
-		elog(DEBUG1, "got new catalog xmin %u at %X/%X", xmin,
+		elog(DEBUG1, "got new catalog xmin %u at %X/%08X", xmin,
 			 LSN_FORMAT_ARGS(current_lsn));
 
 	/* candidate already valid with the current flush position, apply */
@@ -1785,7 +1785,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
 		slot->candidate_restart_lsn = restart_lsn;
 		SpinLockRelease(&slot->mutex);
 
-		elog(DEBUG1, "got new restart lsn %X/%X at %X/%X",
+		elog(DEBUG1, "got new restart lsn %X/%08X at %X/%08X",
 			 LSN_FORMAT_ARGS(restart_lsn),
 			 LSN_FORMAT_ARGS(current_lsn));
 	}
@@ -1800,7 +1800,7 @@ LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart
 		confirmed_flush = slot->data.confirmed_flush;
 		SpinLockRelease(&slot->mutex);
 
-		elog(DEBUG1, "failed to increase restart lsn: proposed %X/%X, after %X/%X, current candidate %X/%X, current after %X/%X, flushed up to %X/%X",
+		elog(DEBUG1, "failed to increase restart lsn: proposed %X/%08X, after %X/%08X, current candidate %X/%08X, current after %X/%08X, flushed up to %X/%08X",
 			 LSN_FORMAT_ARGS(restart_lsn),
 			 LSN_FORMAT_ARGS(current_lsn),
 			 LSN_FORMAT_ARGS(candidate_restart_lsn),
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index a17bacf88e7..8e75d3bb47b 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -826,7 +826,7 @@ StartupReplicationOrigin(void)
 		last_state++;
 
 		ereport(LOG,
-				(errmsg("recovered replication state of node %d to %X/%X",
+				(errmsg("recovered replication state of node %d to %X/%08X",
 						disk_state.roident,
 						LSN_FORMAT_ARGS(disk_state.remote_lsn))));
 	}
diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c
index 3ec3abfa3da..2f0c08b8fbd 100644
--- a/src/backend/replication/logical/slotsync.c
+++ b/src/backend/replication/logical/slotsync.c
@@ -213,7 +213,7 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid,
 		ereport(slot->data.persistency == RS_TEMPORARY ? LOG : DEBUG1,
 				errmsg("could not synchronize replication slot \"%s\"",
 					   remote_slot->name),
-				errdetail("Synchronization could lead to data loss, because the remote slot needs WAL at LSN %X/%X and catalog xmin %u, but the standby has LSN %X/%X and catalog xmin %u.",
+				errdetail("Synchronization could lead to data loss, because the remote slot needs WAL at LSN %X/%08X and catalog xmin %u, but the standby has LSN %X/%08X and catalog xmin %u.",
 						  LSN_FORMAT_ARGS(remote_slot->restart_lsn),
 						  remote_slot->catalog_xmin,
 						  LSN_FORMAT_ARGS(slot->data.restart_lsn),
@@ -275,7 +275,7 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid,
 				ereport(ERROR,
 						errmsg_internal("synchronized confirmed_flush for slot \"%s\" differs from remote slot",
 										remote_slot->name),
-						errdetail_internal("Remote slot has LSN %X/%X but local slot has LSN %X/%X.",
+						errdetail_internal("Remote slot has LSN %X/%08X but local slot has LSN %X/%08X.",
 										   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
 										   LSN_FORMAT_ARGS(slot->data.confirmed_flush)));
 		}
@@ -593,7 +593,7 @@ update_and_persist_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 	{
 		ereport(LOG,
 				errmsg("could not synchronize replication slot \"%s\"", remote_slot->name),
-				errdetail("Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN %X/%X.",
+				errdetail("Synchronization could lead to data loss, because the standby could not build a consistent snapshot to decode WALs at LSN %X/%08X.",
 						  LSN_FORMAT_ARGS(slot->data.restart_lsn)));
 
 		return false;
@@ -642,7 +642,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 		ereport(AmLogicalSlotSyncWorkerProcess() ? LOG : ERROR,
 				errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
 				errmsg("skipping slot synchronization because the received slot sync"
-					   " LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X",
+					   " LSN %X/%08X for slot \"%s\" is ahead of the standby position %X/%08X",
 					   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
 					   remote_slot->name,
 					   LSN_FORMAT_ARGS(latestFlushPtr)));
@@ -733,7 +733,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid)
 				ereport(ERROR,
 						errmsg_internal("cannot synchronize local slot \"%s\"",
 										remote_slot->name),
-						errdetail_internal("Local slot's start streaming location LSN(%X/%X) is ahead of remote slot's LSN(%X/%X).",
+						errdetail_internal("Local slot's start streaming location LSN(%X/%08X) is ahead of remote slot's LSN(%X/%08X).",
 										   LSN_FORMAT_ARGS(slot->data.confirmed_flush),
 										   LSN_FORMAT_ARGS(remote_slot->confirmed_lsn)));
 
diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index adf18c397db..dc4e3571bdc 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -774,7 +774,7 @@ SnapBuildDistributeSnapshotAndInval(SnapBuild *builder, XLogRecPtr lsn, Transact
 		if (rbtxn_is_prepared(txn))
 			continue;
 
-		elog(DEBUG2, "adding a new snapshot and invalidations to %u at %X/%X",
+		elog(DEBUG2, "adding a new snapshot and invalidations to %u at %X/%08X",
 			 txn->xid, LSN_FORMAT_ARGS(lsn));
 
 		/*
@@ -1271,7 +1271,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 									builder->initial_xmin_horizon))
 	{
 		ereport(DEBUG1,
-				(errmsg_internal("skipping snapshot at %X/%X while building logical decoding snapshot, xmin horizon too low",
+				(errmsg_internal("skipping snapshot at %X/%08X while building logical decoding snapshot, xmin horizon too low",
 								 LSN_FORMAT_ARGS(lsn)),
 				 errdetail_internal("initial xmin horizon of %u vs the snapshot's %u",
 									builder->initial_xmin_horizon, running->oldestRunningXid)));
@@ -1310,7 +1310,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = InvalidTransactionId;
 
 		ereport(LOG,
-				(errmsg("logical decoding found consistent point at %X/%X",
+				(errmsg("logical decoding found consistent point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("There are no running transactions.")));
 
@@ -1359,7 +1359,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		Assert(TransactionIdIsNormal(builder->xmax));
 
 		ereport(LOG,
-				(errmsg("logical decoding found initial starting point at %X/%X",
+				(errmsg("logical decoding found initial starting point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("Waiting for transactions (approximately %d) older than %u to end.",
 						   running->xcnt, running->nextXid)));
@@ -1383,7 +1383,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = running->nextXid;
 
 		ereport(LOG,
-				(errmsg("logical decoding found initial consistent point at %X/%X",
+				(errmsg("logical decoding found initial consistent point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("Waiting for transactions (approximately %d) older than %u to end.",
 						   running->xcnt, running->nextXid)));
@@ -1407,7 +1407,7 @@ SnapBuildFindSnapshot(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *runn
 		builder->next_phase_at = InvalidTransactionId;
 
 		ereport(LOG,
-				(errmsg("logical decoding found consistent point at %X/%X",
+				(errmsg("logical decoding found consistent point at %X/%08X",
 						LSN_FORMAT_ARGS(lsn)),
 				 errdetail("There are no old transactions anymore.")));
 	}
@@ -1913,7 +1913,7 @@ SnapBuildRestore(SnapBuild *builder, XLogRecPtr lsn)
 	Assert(builder->state == SNAPBUILD_CONSISTENT);
 
 	ereport(LOG,
-			(errmsg("logical decoding found consistent point at %X/%X",
+			(errmsg("logical decoding found consistent point at %X/%08X",
 					LSN_FORMAT_ARGS(lsn)),
 			 errdetail("Logical decoding will begin using saved snapshot.")));
 	return true;
@@ -2061,7 +2061,7 @@ SnapBuildSnapshotExists(XLogRecPtr lsn)
 	int			ret;
 	struct stat stat_buf;
 
-	sprintf(path, "%s/%X-%X.snap",
+	sprintf(path, "%s/%08X-%08X.snap",
 			PG_LOGICAL_SNAPSHOTS_DIR,
 			LSN_FORMAT_ARGS(lsn));
 
diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c
index c90f23ee5b0..e4fd6347fd1 100644
--- a/src/backend/replication/logical/tablesync.c
+++ b/src/backend/replication/logical/tablesync.c
@@ -1553,7 +1553,7 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos)
 copy_table_done:
 
 	elog(DEBUG1,
-		 "LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%X",
+		 "LogicalRepSyncTableStart: '%s' origin_startpos lsn %X/%08X",
 		 originname, LSN_FORMAT_ARGS(*origin_startpos));
 
 	/*
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index fd11805a44c..d470d624055 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -1016,7 +1016,7 @@ apply_handle_commit(StringInfo s)
 	if (commit_data.commit_lsn != remote_final_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_PROTOCOL_VIOLATION),
-				 errmsg_internal("incorrect commit LSN %X/%X in commit message (expected %X/%X)",
+				 errmsg_internal("incorrect commit LSN %X/%08X in commit message (expected %X/%08X)",
 								 LSN_FORMAT_ARGS(commit_data.commit_lsn),
 								 LSN_FORMAT_ARGS(remote_final_lsn))));
 
@@ -1108,7 +1108,7 @@ apply_handle_prepare(StringInfo s)
 	if (prepare_data.prepare_lsn != remote_final_lsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_PROTOCOL_VIOLATION),
-				 errmsg_internal("incorrect prepare LSN %X/%X in prepare message (expected %X/%X)",
+				 errmsg_internal("incorrect prepare LSN %X/%08X in prepare message (expected %X/%08X)",
 								 LSN_FORMAT_ARGS(prepare_data.prepare_lsn),
 								 LSN_FORMAT_ARGS(remote_final_lsn))));
 
@@ -3903,7 +3903,7 @@ send_feedback(XLogRecPtr recvpos, bool force, bool requestReply)
 	pq_sendint64(reply_message, now);	/* sendTime */
 	pq_sendbyte(reply_message, requestReply);	/* replyRequested */
 
-	elog(DEBUG2, "sending feedback (force %d) to recv %X/%X, write %X/%X, flush %X/%X",
+	elog(DEBUG2, "sending feedback (force %d) to recv %X/%08X, write %X/%08X, flush %X/%08X",
 		 force,
 		 LSN_FORMAT_ARGS(recvpos),
 		 LSN_FORMAT_ARGS(writepos),
@@ -4909,7 +4909,7 @@ maybe_start_skipping_changes(XLogRecPtr finish_lsn)
 	skip_xact_finish_lsn = finish_lsn;
 
 	ereport(LOG,
-			errmsg("logical replication starts skipping transaction at LSN %X/%X",
+			errmsg("logical replication starts skipping transaction at LSN %X/%08X",
 				   LSN_FORMAT_ARGS(skip_xact_finish_lsn)));
 }
 
@@ -4923,7 +4923,7 @@ stop_skipping_changes(void)
 		return;
 
 	ereport(LOG,
-			(errmsg("logical replication completed skipping transaction at LSN %X/%X",
+			(errmsg("logical replication completed skipping transaction at LSN %X/%08X",
 					LSN_FORMAT_ARGS(skip_xact_finish_lsn))));
 
 	/* Stop skipping changes */
@@ -5012,7 +5012,7 @@ clear_subscription_skip_lsn(XLogRecPtr finish_lsn)
 		if (myskiplsn != finish_lsn)
 			ereport(WARNING,
 					errmsg("skip-LSN of subscription \"%s\" cleared", MySubscription->name),
-					errdetail("Remote transaction's finish WAL location (LSN) %X/%X did not match skip-LSN %X/%X.",
+					errdetail("Remote transaction's finish WAL location (LSN) %X/%08X did not match skip-LSN %X/%08X.",
 							  LSN_FORMAT_ARGS(finish_lsn),
 							  LSN_FORMAT_ARGS(myskiplsn)));
 	}
@@ -5049,7 +5049,7 @@ apply_error_callback(void *arg)
 					   logicalrep_message_type(errarg->command),
 					   errarg->remote_xid);
 		else
-			errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%X",
+			errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" in transaction %u, finished at %X/%08X",
 					   errarg->origin_name,
 					   logicalrep_message_type(errarg->command),
 					   errarg->remote_xid,
@@ -5067,7 +5067,7 @@ apply_error_callback(void *arg)
 						   errarg->rel->remoterel.relname,
 						   errarg->remote_xid);
 			else
-				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%X",
+				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" in transaction %u, finished at %X/%08X",
 						   errarg->origin_name,
 						   logicalrep_message_type(errarg->command),
 						   errarg->rel->remoterel.nspname,
@@ -5086,7 +5086,7 @@ apply_error_callback(void *arg)
 						   errarg->rel->remoterel.attnames[errarg->remote_attnum],
 						   errarg->remote_xid);
 			else
-				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%X",
+				errcontext("processing remote data for replication origin \"%s\" during message type \"%s\" for replication target relation \"%s.%s\" column \"%s\" in transaction %u, finished at %X/%08X",
 						   errarg->origin_name,
 						   logicalrep_message_type(errarg->command),
 						   errarg->rel->remoterel.nspname,
diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y
index 7440aae5a1a..8a649199ec6 100644
--- a/src/backend/replication/repl_gram.y
+++ b/src/backend/replication/repl_gram.y
@@ -279,7 +279,7 @@ alter_replication_slot:
 			;
 
 /*
- * START_REPLICATION [SLOT slot] [PHYSICAL] %X/%X [TIMELINE %u]
+ * START_REPLICATION [SLOT slot] [PHYSICAL] %X/%08X [TIMELINE %u]
  */
 start_replication:
 			K_START_REPLICATION opt_slot opt_physical RECPTR opt_timeline
@@ -295,7 +295,7 @@ start_replication:
 				}
 			;
 
-/* START_REPLICATION SLOT slot LOGICAL %X/%X options */
+/* START_REPLICATION SLOT slot LOGICAL %X/%08X options */
 start_logical_replication:
 			K_START_REPLICATION K_SLOT IDENT K_LOGICAL RECPTR plugin_options
 				{
diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l
index 014ea8d25c6..b6930e28659 100644
--- a/src/backend/replication/repl_scanner.l
+++ b/src/backend/replication/repl_scanner.l
@@ -155,7 +155,7 @@ UPLOAD_MANIFEST		{ return K_UPLOAD_MANIFEST; }
 {hexdigit}+\/{hexdigit}+		{
 					uint32	hi,
 							lo;
-					if (sscanf(yytext, "%X/%X", &hi, &lo) != 2)
+					if (sscanf(yytext, "%X/%08X", &hi, &lo) != 2)
 						replication_yyerror(NULL, yyscanner, "invalid streaming start location");
 					yylval->recptr = ((uint64) hi) << 32 | lo;
 					return RECPTR;
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c
index f9fec50ae88..f369fce2485 100644
--- a/src/backend/replication/slot.c
+++ b/src/backend/replication/slot.c
@@ -1591,8 +1591,8 @@ ReportSlotInvalidation(ReplicationSlotInvalidationCause cause,
 				uint64		ex = oldestLSN - restart_lsn;
 
 				appendStringInfo(&err_detail,
-								 ngettext("The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " byte.",
-										  "The slot's restart_lsn %X/%X exceeds the limit by %" PRIu64 " bytes.",
+								 ngettext("The slot's restart_lsn %X/%08X exceeds the limit by %" PRIu64 " byte.",
+										  "The slot's restart_lsn %X/%08X exceeds the limit by %" PRIu64 " bytes.",
 										  ex),
 								 LSN_FORMAT_ARGS(restart_lsn),
 								 ex);
diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c
index 36cc2ed4e44..69f4c6157c5 100644
--- a/src/backend/replication/slotfuncs.c
+++ b/src/backend/replication/slotfuncs.c
@@ -566,7 +566,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
 	if (moveto < minlsn)
 		ereport(ERROR,
 				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-				 errmsg("cannot advance replication slot to %X/%X, minimum is %X/%X",
+				 errmsg("cannot advance replication slot to %X/%08X, minimum is %X/%08X",
 						LSN_FORMAT_ARGS(moveto), LSN_FORMAT_ARGS(minlsn))));
 
 	/* Do the actual slot update, depending on the slot type */
diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c
index cc35984ad00..32cf3a48b89 100644
--- a/src/backend/replication/syncrep.c
+++ b/src/backend/replication/syncrep.c
@@ -258,7 +258,7 @@ SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
 	{
 		char		buffer[32];
 
-		sprintf(buffer, "waiting for %X/%X", LSN_FORMAT_ARGS(lsn));
+		sprintf(buffer, "waiting for %X/%08X", LSN_FORMAT_ARGS(lsn));
 		set_ps_display_suffix(buffer);
 	}
 
@@ -566,7 +566,7 @@ SyncRepReleaseWaiters(void)
 
 	LWLockRelease(SyncRepLock);
 
-	elog(DEBUG3, "released %d procs up to write %X/%X, %d procs up to flush %X/%X, %d procs up to apply %X/%X",
+	elog(DEBUG3, "released %d procs up to write %X/%08X, %d procs up to flush %X/%08X, %d procs up to apply %X/%08X",
 		 numwrite, LSN_FORMAT_ARGS(writePtr),
 		 numflush, LSN_FORMAT_ARGS(flushPtr),
 		 numapply, LSN_FORMAT_ARGS(applyPtr));
diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c
index 8c4d0fd9aed..33aece08de2 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -386,11 +386,11 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
 		{
 			if (first_stream)
 				ereport(LOG,
-						(errmsg("started streaming WAL from primary at %X/%X on timeline %u",
+						(errmsg("started streaming WAL from primary at %X/%08X on timeline %u",
 								LSN_FORMAT_ARGS(startpoint), startpointTLI)));
 			else
 				ereport(LOG,
-						(errmsg("restarted WAL streaming at %X/%X on timeline %u",
+						(errmsg("restarted WAL streaming at %X/%08X on timeline %u",
 								LSN_FORMAT_ARGS(startpoint), startpointTLI)));
 			first_stream = false;
 
@@ -470,7 +470,7 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
 						{
 							ereport(LOG,
 									(errmsg("replication terminated by primary server"),
-									 errdetail("End of WAL reached on timeline %u at %X/%X.",
+									 errdetail("End of WAL reached on timeline %u at %X/%08X.",
 											   startpointTLI,
 											   LSN_FORMAT_ARGS(LogstreamResult.Write))));
 							endofwal = true;
@@ -711,7 +711,7 @@ WalRcvWaitForStartPosition(XLogRecPtr *startpoint, TimeLineID *startpointTLI)
 	{
 		char		activitymsg[50];
 
-		snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%X",
+		snprintf(activitymsg, sizeof(activitymsg), "restarting at %X/%08X",
 				 LSN_FORMAT_ARGS(*startpoint));
 		set_ps_display(activitymsg);
 	}
@@ -1014,7 +1014,7 @@ XLogWalRcvFlush(bool dying, TimeLineID tli)
 		{
 			char		activitymsg[50];
 
-			snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
+			snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%08X",
 					 LSN_FORMAT_ARGS(LogstreamResult.Write));
 			set_ps_display(activitymsg);
 		}
@@ -1138,7 +1138,7 @@ XLogWalRcvSendReply(bool force, bool requestReply)
 	pq_sendbyte(&reply_message, requestReply ? 1 : 0);
 
 	/* Send it */
-	elog(DEBUG2, "sending write %X/%X flush %X/%X apply %X/%X%s",
+	elog(DEBUG2, "sending write %X/%08X flush %X/%08X apply %X/%08X%s",
 		 LSN_FORMAT_ARGS(writePtr),
 		 LSN_FORMAT_ARGS(flushPtr),
 		 LSN_FORMAT_ARGS(applyPtr),
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index f2c33250e8b..486ebe01c8b 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -408,7 +408,7 @@ IdentifySystem(void)
 	else
 		logptr = GetFlushRecPtr(&currTLI);
 
-	snprintf(xloc, sizeof(xloc), "%X/%X", LSN_FORMAT_ARGS(logptr));
+	snprintf(xloc, sizeof(xloc), "%X/%08X", LSN_FORMAT_ARGS(logptr));
 
 	if (MyDatabaseId != InvalidOid)
 	{
@@ -515,7 +515,7 @@ ReadReplicationSlot(ReadReplicationSlotCmd *cmd)
 		{
 			char		xloc[64];
 
-			snprintf(xloc, sizeof(xloc), "%X/%X",
+			snprintf(xloc, sizeof(xloc), "%X/%08X",
 					 LSN_FORMAT_ARGS(slot_contents.data.restart_lsn));
 			values[i] = CStringGetTextDatum(xloc);
 			nulls[i] = false;
@@ -892,10 +892,10 @@ StartReplication(StartReplicationCmd *cmd)
 				switchpoint < cmd->startpoint)
 			{
 				ereport(ERROR,
-						(errmsg("requested starting point %X/%X on timeline %u is not in this server's history",
+						(errmsg("requested starting point %X/%08X on timeline %u is not in this server's history",
 								LSN_FORMAT_ARGS(cmd->startpoint),
 								cmd->timeline),
-						 errdetail("This server's history forked from timeline %u at %X/%X.",
+						 errdetail("This server's history forked from timeline %u at %X/%08X.",
 								   cmd->timeline,
 								   LSN_FORMAT_ARGS(switchpoint))));
 			}
@@ -939,7 +939,7 @@ StartReplication(StartReplicationCmd *cmd)
 		if (FlushPtr < cmd->startpoint)
 		{
 			ereport(ERROR,
-					(errmsg("requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X",
+					(errmsg("requested starting point %X/%08X is ahead of the WAL flush position of this server %X/%08X",
 							LSN_FORMAT_ARGS(cmd->startpoint),
 							LSN_FORMAT_ARGS(FlushPtr))));
 		}
@@ -983,7 +983,7 @@ StartReplication(StartReplicationCmd *cmd)
 		Datum		values[2];
 		bool		nulls[2] = {0};
 
-		snprintf(startpos_str, sizeof(startpos_str), "%X/%X",
+		snprintf(startpos_str, sizeof(startpos_str), "%X/%08X",
 				 LSN_FORMAT_ARGS(sendTimeLineValidUpto));
 
 		dest = CreateDestReceiver(DestRemoteSimple);
@@ -1324,7 +1324,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
 			ReplicationSlotPersist();
 	}
 
-	snprintf(xloc, sizeof(xloc), "%X/%X",
+	snprintf(xloc, sizeof(xloc), "%X/%08X",
 			 LSN_FORMAT_ARGS(MyReplicationSlot->data.confirmed_flush));
 
 	dest = CreateDestReceiver(DestRemoteSimple);
@@ -2429,7 +2429,7 @@ ProcessStandbyReplyMessage(void)
 		/* Copy because timestamptz_to_str returns a static buffer */
 		replyTimeStr = pstrdup(timestamptz_to_str(replyTime));
 
-		elog(DEBUG2, "write %X/%X flush %X/%X apply %X/%X%s reply_time %s",
+		elog(DEBUG2, "write %X/%08X flush %X/%08X apply %X/%08X%s reply_time %s",
 			 LSN_FORMAT_ARGS(writePtr),
 			 LSN_FORMAT_ARGS(flushPtr),
 			 LSN_FORMAT_ARGS(applyPtr),
@@ -3251,7 +3251,7 @@ XLogSendPhysical(void)
 
 		WalSndCaughtUp = true;
 
-		elog(DEBUG1, "walsender reached end of timeline at %X/%X (sent up to %X/%X)",
+		elog(DEBUG1, "walsender reached end of timeline at %X/%08X (sent up to %X/%08X)",
 			 LSN_FORMAT_ARGS(sendTimeLineValidUpto),
 			 LSN_FORMAT_ARGS(sentPtr));
 		return;
@@ -3392,7 +3392,7 @@ retry:
 	{
 		char		activitymsg[50];
 
-		snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
+		snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%08X",
 				 LSN_FORMAT_ARGS(sentPtr));
 		set_ps_display(activitymsg);
 	}
diff --git a/src/backend/storage/ipc/standby.c b/src/backend/storage/ipc/standby.c
index 7fa8d9247e0..4222bdab078 100644
--- a/src/backend/storage/ipc/standby.c
+++ b/src/backend/storage/ipc/standby.c
@@ -1376,7 +1376,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
 
 	if (xlrec.subxid_overflow)
 		elog(DEBUG2,
-			 "snapshot of %d running transactions overflowed (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
+			 "snapshot of %d running transactions overflowed (lsn %X/%08X oldest xid %u latest complete %u next xid %u)",
 			 CurrRunningXacts->xcnt,
 			 LSN_FORMAT_ARGS(recptr),
 			 CurrRunningXacts->oldestRunningXid,
@@ -1384,7 +1384,7 @@ LogCurrentRunningXacts(RunningTransactions CurrRunningXacts)
 			 CurrRunningXacts->nextXid);
 	else
 		elog(DEBUG2,
-			 "snapshot of %d+%d running transaction ids (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
+			 "snapshot of %d+%d running transaction ids (lsn %X/%08X oldest xid %u latest complete %u next xid %u)",
 			 CurrRunningXacts->xcnt, CurrRunningXacts->subxcnt,
 			 LSN_FORMAT_ARGS(recptr),
 			 CurrRunningXacts->oldestRunningXid,
diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index 16311590a14..12de2446f5b 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -83,7 +83,7 @@ pg_lsn_out(PG_FUNCTION_ARGS)
 	char		buf[MAXPG_LSNLEN + 1];
 	char	   *result;
 
-	snprintf(buf, sizeof buf, "%X/%X", LSN_FORMAT_ARGS(lsn));
+	snprintf(buf, sizeof buf, "%X/%08X", LSN_FORMAT_ARGS(lsn));
 	result = pstrdup(buf);
 	PG_RETURN_CSTRING(result);
 }
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index eb7354200bc..55621f35fb6 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -487,7 +487,7 @@ reached_end_position(XLogRecPtr segendpos, uint32 timeline,
 			if (r < 0)
 				pg_fatal("could not read from ready pipe: %m");
 
-			if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2)
+			if (sscanf(xlogend, "%X/%08X", &hi, &lo) != 2)
 				pg_fatal("could not parse write-ahead log location \"%s\"",
 						 xlogend);
 			xlogendptr = ((uint64) hi) << 32 | lo;
@@ -629,7 +629,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier,
 	param->wal_compress_level = wal_compress_level;
 
 	/* Convert the starting position */
-	if (sscanf(startpos, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(startpos, "%X/%08X", &hi, &lo) != 2)
 		pg_fatal("could not parse write-ahead log location \"%s\"",
 				 startpos);
 	param->startptr = ((uint64) hi) << 32 | lo;
@@ -2255,7 +2255,7 @@ BaseBackup(char *compression_algorithm, char *compression_detail,
 		 * value directly in the variable, and then set the flag that says
 		 * it's there.
 		 */
-		if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2)
+		if (sscanf(xlogend, "%X/%08X", &hi, &lo) != 2)
 			pg_fatal("could not parse write-ahead log location \"%s\"",
 					 xlogend);
 		xlogendptr = ((uint64) hi) << 32 | lo;
diff --git a/src/bin/pg_basebackup/pg_createsubscriber.c b/src/bin/pg_basebackup/pg_createsubscriber.c
index 11f71c03801..025b893a41e 100644
--- a/src/bin/pg_basebackup/pg_createsubscriber.c
+++ b/src/bin/pg_basebackup/pg_createsubscriber.c
@@ -1262,7 +1262,7 @@ setup_recovery(const struct LogicalRepInfo *dbinfo, const char *datadir, const c
 	{
 		appendPQExpBufferStr(recoveryconfcontents, "# dry run mode");
 		appendPQExpBuffer(recoveryconfcontents,
-						  "recovery_target_lsn = '%X/%X'\n",
+						  "recovery_target_lsn = '%X/%08X'\n",
 						  LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
 	}
 	else
@@ -1876,7 +1876,7 @@ set_replication_progress(PGconn *conn, const struct LogicalRepInfo *dbinfo, cons
 	if (dry_run)
 	{
 		suboid = InvalidOid;
-		lsnstr = psprintf("%X/%X", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
+		lsnstr = psprintf("%X/%08X", LSN_FORMAT_ARGS((XLogRecPtr) InvalidXLogRecPtr));
 	}
 	else
 	{
diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c
index e816cf58101..289ca14dcfe 100644
--- a/src/bin/pg_basebackup/pg_receivewal.c
+++ b/src/bin/pg_basebackup/pg_receivewal.c
@@ -188,14 +188,14 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
 
 	/* we assume that we get called once at the end of each segment */
 	if (verbose && segment_finished)
-		pg_log_info("finished segment at %X/%X (timeline %u)",
+		pg_log_info("finished segment at %X/%08X (timeline %u)",
 					LSN_FORMAT_ARGS(xlogpos),
 					timeline);
 
 	if (!XLogRecPtrIsInvalid(endpos) && endpos < xlogpos)
 	{
 		if (verbose)
-			pg_log_info("stopped log streaming at %X/%X (timeline %u)",
+			pg_log_info("stopped log streaming at %X/%08X (timeline %u)",
 						LSN_FORMAT_ARGS(xlogpos),
 						timeline);
 		time_to_stop = true;
@@ -211,7 +211,7 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished)
 	 * timeline, but it's close enough for reporting purposes.
 	 */
 	if (verbose && prevtimeline != 0 && prevtimeline != timeline)
-		pg_log_info("switched to timeline %u at %X/%X",
+		pg_log_info("switched to timeline %u at %X/%08X",
 					timeline,
 					LSN_FORMAT_ARGS(prevpos));
 
@@ -575,7 +575,7 @@ StreamLog(void)
 	 * Start the replication
 	 */
 	if (verbose)
-		pg_log_info("starting log streaming at %X/%X (timeline %u)",
+		pg_log_info("starting log streaming at %X/%08X (timeline %u)",
 					LSN_FORMAT_ARGS(stream.startpos),
 					stream.timeline);
 
@@ -689,7 +689,7 @@ main(int argc, char **argv)
 				basedir = pg_strdup(optarg);
 				break;
 			case 'E':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2)
 					pg_fatal("could not parse end position \"%s\"", optarg);
 				endpos = ((uint64) hi) << 32 | lo;
 				break;
diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c
index fb7a6a1d05d..8a5dd24e6c9 100644
--- a/src/bin/pg_basebackup/pg_recvlogical.c
+++ b/src/bin/pg_basebackup/pg_recvlogical.c
@@ -144,7 +144,7 @@ sendFeedback(PGconn *conn, TimestampTz now, bool force, bool replyRequested)
 		return true;
 
 	if (verbose)
-		pg_log_info("confirming write up to %X/%X, flush to %X/%X (slot %s)",
+		pg_log_info("confirming write up to %X/%08X, flush to %X/%08X (slot %s)",
 					LSN_FORMAT_ARGS(output_written_lsn),
 					LSN_FORMAT_ARGS(output_fsync_lsn),
 					replication_slot);
@@ -238,13 +238,13 @@ StreamLogicalLog(void)
 	 * Start the replication
 	 */
 	if (verbose)
-		pg_log_info("starting log streaming at %X/%X (slot %s)",
+		pg_log_info("starting log streaming at %X/%08X (slot %s)",
 					LSN_FORMAT_ARGS(startpos),
 					replication_slot);
 
 	/* Initiate the replication stream at specified location */
 	query = createPQExpBuffer();
-	appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%X",
+	appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%08X",
 					  replication_slot, LSN_FORMAT_ARGS(startpos));
 
 	/* print options if there are any */
@@ -800,12 +800,12 @@ main(int argc, char **argv)
 				break;
 /* replication options */
 			case 'I':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2)
 					pg_fatal("could not parse start position \"%s\"", optarg);
 				startpos = ((uint64) hi) << 32 | lo;
 				break;
 			case 'E':
-				if (sscanf(optarg, "%X/%X", &hi, &lo) != 2)
+				if (sscanf(optarg, "%X/%08X", &hi, &lo) != 2)
 					pg_fatal("could not parse end position \"%s\"", optarg);
 				endpos = ((uint64) hi) << 32 | lo;
 				break;
@@ -1075,12 +1075,12 @@ prepareToTerminate(PGconn *conn, XLogRecPtr endpos, StreamStopReason reason,
 				pg_log_info("received interrupt signal, exiting");
 				break;
 			case STREAM_STOP_KEEPALIVE:
-				pg_log_info("end position %X/%X reached by keepalive",
+				pg_log_info("end position %X/%08X reached by keepalive",
 							LSN_FORMAT_ARGS(endpos));
 				break;
 			case STREAM_STOP_END_OF_WAL:
 				Assert(!XLogRecPtrIsInvalid(lsn));
-				pg_log_info("end position %X/%X reached by WAL record at %X/%X",
+				pg_log_info("end position %X/%08X reached by WAL record at %X/%08X",
 							LSN_FORMAT_ARGS(endpos), LSN_FORMAT_ARGS(lsn));
 				break;
 			case STREAM_STOP_NONE:
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 6b6e32dfbdf..d6b7f117fa3 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -571,7 +571,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 			return true;
 
 		/* Initiate the replication stream at specified location */
-		snprintf(query, sizeof(query), "START_REPLICATION %s%X/%X TIMELINE %u",
+		snprintf(query, sizeof(query), "START_REPLICATION %s%X/%08X TIMELINE %u",
 				 slotcmd,
 				 LSN_FORMAT_ARGS(stream->startpos),
 				 stream->timeline);
@@ -628,7 +628,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 			}
 			if (stream->startpos > stoppos)
 			{
-				pg_log_error("server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X",
+				pg_log_error("server stopped streaming timeline %u at %X/%08X, but reported next timeline %u to begin at %X/%08X",
 							 stream->timeline, LSN_FORMAT_ARGS(stoppos),
 							 newtimeline, LSN_FORMAT_ARGS(stream->startpos));
 				goto error;
@@ -720,7 +720,7 @@ ReadEndOfStreamingResult(PGresult *res, XLogRecPtr *startpos, uint32 *timeline)
 	}
 
 	*timeline = atoi(PQgetvalue(res, 0, 0));
-	if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &startpos_xlogid,
+	if (sscanf(PQgetvalue(res, 0, 1), "%X/%08X", &startpos_xlogid,
 			   &startpos_xrecoff) != 2)
 	{
 		pg_log_error("could not parse next timeline's starting point \"%s\"",
diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c
index c7b8a4c3a4b..e5a7cb6e5b1 100644
--- a/src/bin/pg_basebackup/streamutil.c
+++ b/src/bin/pg_basebackup/streamutil.c
@@ -445,7 +445,7 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli,
 	/* Get LSN start position if necessary */
 	if (startpos != NULL)
 	{
-		if (sscanf(PQgetvalue(res, 0, 2), "%X/%X", &hi, &lo) != 2)
+		if (sscanf(PQgetvalue(res, 0, 2), "%X/%08X", &hi, &lo) != 2)
 		{
 			pg_log_error("could not parse write-ahead log location \"%s\"",
 						 PQgetvalue(res, 0, 2));
@@ -551,7 +551,7 @@ GetSlotInformation(PGconn *conn, const char *slot_name,
 		uint32		hi,
 					lo;
 
-		if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &hi, &lo) != 2)
+		if (sscanf(PQgetvalue(res, 0, 1), "%X/%08X", &hi, &lo) != 2)
 		{
 			pg_log_error("could not parse restart_lsn \"%s\" for replication slot \"%s\"",
 						 PQgetvalue(res, 0, 1), slot_name);
diff --git a/src/bin/pg_combinebackup/backup_label.c b/src/bin/pg_combinebackup/backup_label.c
index e89d4603f09..e774bc78a62 100644
--- a/src/bin/pg_combinebackup/backup_label.c
+++ b/src/bin/pg_combinebackup/backup_label.c
@@ -247,7 +247,7 @@ parse_lsn(char *s, char *e, XLogRecPtr *lsn, char **c)
 	unsigned	lo;
 
 	*e = '\0';
-	success = (sscanf(s, "%X/%X%n", &hi, &lo, &nchars) == 2);
+	success = (sscanf(s, "%X/%08X%n", &hi, &lo, &nchars) == 2);
 	*e = save;
 
 	if (success)
diff --git a/src/bin/pg_combinebackup/pg_combinebackup.c b/src/bin/pg_combinebackup/pg_combinebackup.c
index 28e58cd8ef4..f5cef99f627 100644
--- a/src/bin/pg_combinebackup/pg_combinebackup.c
+++ b/src/bin/pg_combinebackup/pg_combinebackup.c
@@ -569,7 +569,7 @@ check_backup_label_files(int n_backups, char **backup_dirs)
 			pg_fatal("backup at \"%s\" starts on timeline %u, but expected %u",
 					 backup_dirs[i], start_tli, check_tli);
 		if (i < n_backups - 1 && start_lsn != check_lsn)
-			pg_fatal("backup at \"%s\" starts at LSN %X/%X, but expected %X/%X",
+			pg_fatal("backup at \"%s\" starts at LSN %X/%08X, but expected %X/%08X",
 					 backup_dirs[i],
 					 LSN_FORMAT_ARGS(start_lsn),
 					 LSN_FORMAT_ARGS(check_lsn));
diff --git a/src/bin/pg_combinebackup/write_manifest.c b/src/bin/pg_combinebackup/write_manifest.c
index 313f8929df5..819a3fd0b7a 100644
--- a/src/bin/pg_combinebackup/write_manifest.c
+++ b/src/bin/pg_combinebackup/write_manifest.c
@@ -155,7 +155,7 @@ finalize_manifest(manifest_writer *mwriter,
 	for (wal_range = first_wal_range; wal_range != NULL;
 		 wal_range = wal_range->next)
 		appendStringInfo(&mwriter->buf,
-						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
+						 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%08X\", \"End-LSN\": \"%X/%08X\" }",
 						 wal_range == first_wal_range ? "" : ",\n",
 						 wal_range->tli,
 						 LSN_FORMAT_ARGS(wal_range->start_lsn),
diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c
index 7bb801bb886..10de058ce91 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -245,9 +245,9 @@ main(int argc, char *argv[])
 		   dbState(ControlFile->state));
 	printf(_("pg_control last modified:             %s\n"),
 		   pgctime_str);
-	printf(_("Latest checkpoint location:           %X/%X\n"),
+	printf(_("Latest checkpoint location:           %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->checkPoint));
-	printf(_("Latest checkpoint's REDO location:    %X/%X\n"),
+	printf(_("Latest checkpoint's REDO location:    %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->checkPointCopy.redo));
 	printf(_("Latest checkpoint's REDO WAL file:    %s\n"),
 		   xlogfilename);
@@ -282,15 +282,15 @@ main(int argc, char *argv[])
 		   ControlFile->checkPointCopy.newestCommitTsXid);
 	printf(_("Time of latest checkpoint:            %s\n"),
 		   ckpttime_str);
-	printf(_("Fake LSN counter for unlogged rels:   %X/%X\n"),
+	printf(_("Fake LSN counter for unlogged rels:   %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->unloggedLSN));
-	printf(_("Minimum recovery ending location:     %X/%X\n"),
+	printf(_("Minimum recovery ending location:     %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->minRecoveryPoint));
 	printf(_("Min recovery ending loc's timeline:   %u\n"),
 		   ControlFile->minRecoveryPointTLI);
-	printf(_("Backup start location:                %X/%X\n"),
+	printf(_("Backup start location:                %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->backupStartPoint));
-	printf(_("Backup end location:                  %X/%X\n"),
+	printf(_("Backup end location:                  %X/%08X\n"),
 		   LSN_FORMAT_ARGS(ControlFile->backupEndPoint));
 	printf(_("End-of-backup record required:        %s\n"),
 		   ControlFile->backupEndRequired ? _("yes") : _("no"));
diff --git a/src/bin/pg_rewind/libpq_source.c b/src/bin/pg_rewind/libpq_source.c
index 56c2ad55d4a..e80edb7077e 100644
--- a/src/bin/pg_rewind/libpq_source.c
+++ b/src/bin/pg_rewind/libpq_source.c
@@ -215,7 +215,7 @@ libpq_get_current_wal_insert_lsn(rewind_source *source)
 
 	val = run_simple_query(conn, "SELECT pg_current_wal_insert_lsn()");
 
-	if (sscanf(val, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(val, "%X/%08X", &hi, &lo) != 2)
 		pg_fatal("unrecognized result \"%s\" for current WAL insert location", val);
 
 	result = ((uint64) hi) << 32 | lo;
diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c
index 2cd44625ca3..6de5e32fd9e 100644
--- a/src/bin/pg_rewind/parsexlog.c
+++ b/src/bin/pg_rewind/parsexlog.c
@@ -89,11 +89,11 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
 			XLogRecPtr	errptr = xlogreader->EndRecPtr;
 
 			if (errormsg)
-				pg_fatal("could not read WAL record at %X/%X: %s",
+				pg_fatal("could not read WAL record at %X/%08X: %s",
 						 LSN_FORMAT_ARGS(errptr),
 						 errormsg);
 			else
-				pg_fatal("could not read WAL record at %X/%X",
+				pg_fatal("could not read WAL record at %X/%08X",
 						 LSN_FORMAT_ARGS(errptr));
 		}
 
@@ -105,7 +105,7 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
 	 * messed up.
 	 */
 	if (xlogreader->EndRecPtr != endpoint)
-		pg_fatal("end pointer %X/%X is not a valid end point; expected %X/%X",
+		pg_fatal("end pointer %X/%08X is not a valid end point; expected %X/%08X",
 				 LSN_FORMAT_ARGS(endpoint), LSN_FORMAT_ARGS(xlogreader->EndRecPtr));
 
 	XLogReaderFree(xlogreader);
@@ -143,10 +143,10 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex,
 	if (record == NULL)
 	{
 		if (errormsg)
-			pg_fatal("could not read WAL record at %X/%X: %s",
+			pg_fatal("could not read WAL record at %X/%08X: %s",
 					 LSN_FORMAT_ARGS(ptr), errormsg);
 		else
-			pg_fatal("could not read WAL record at %X/%X",
+			pg_fatal("could not read WAL record at %X/%08X",
 					 LSN_FORMAT_ARGS(ptr));
 	}
 	endptr = xlogreader->EndRecPtr;
@@ -211,11 +211,11 @@ findLastCheckpoint(const char *datadir, XLogRecPtr forkptr, int tliIndex,
 		if (record == NULL)
 		{
 			if (errormsg)
-				pg_fatal("could not find previous WAL record at %X/%X: %s",
+				pg_fatal("could not find previous WAL record at %X/%08X: %s",
 						 LSN_FORMAT_ARGS(searchptr),
 						 errormsg);
 			else
-				pg_fatal("could not find previous WAL record at %X/%X",
+				pg_fatal("could not find previous WAL record at %X/%08X",
 						 LSN_FORMAT_ARGS(searchptr));
 		}
 
@@ -459,7 +459,7 @@ extractPageInfo(XLogReaderState *record)
 		 * track that change.
 		 */
 		pg_fatal("WAL record modifies a relation, but record type is not recognized: "
-				 "lsn: %X/%X, rmid: %d, rmgr: %s, info: %02X",
+				 "lsn: %X/%08X, rmid: %d, rmgr: %s, info: %02X",
 				 LSN_FORMAT_ARGS(record->ReadRecPtr),
 				 rmid, RmgrName(rmid), info);
 	}
diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c
index 9d16c1e6b47..0c68dd4235e 100644
--- a/src/bin/pg_rewind/pg_rewind.c
+++ b/src/bin/pg_rewind/pg_rewind.c
@@ -393,7 +393,7 @@ main(int argc, char **argv)
 								   targetHistory, targetNentries,
 								   &divergerec, &lastcommontliIndex);
 
-		pg_log_info("servers diverged at WAL location %X/%X on timeline %u",
+		pg_log_info("servers diverged at WAL location %X/%08X on timeline %u",
 					LSN_FORMAT_ARGS(divergerec),
 					targetHistory[lastcommontliIndex].tli);
 
@@ -461,7 +461,7 @@ main(int argc, char **argv)
 
 	findLastCheckpoint(datadir_target, divergerec, lastcommontliIndex,
 					   &chkptrec, &chkpttli, &chkptredo, restore_command);
-	pg_log_info("rewinding from last common checkpoint at %X/%X on timeline %u",
+	pg_log_info("rewinding from last common checkpoint at %X/%08X on timeline %u",
 				LSN_FORMAT_ARGS(chkptrec), chkpttli);
 
 	/* Initialize the hash table to track the status of each file */
@@ -902,7 +902,7 @@ getTimelineHistory(TimeLineID tli, bool is_source, int *nentries)
 			TimeLineHistoryEntry *entry;
 
 			entry = &history[i];
-			pg_log_debug("%u: %X/%X - %X/%X", entry->tli,
+			pg_log_debug("%u: %X/%08X - %X/%08X", entry->tli,
 						 LSN_FORMAT_ARGS(entry->begin),
 						 LSN_FORMAT_ARGS(entry->end));
 		}
@@ -981,8 +981,8 @@ createBackupLabel(XLogRecPtr startpoint, TimeLineID starttli, XLogRecPtr checkpo
 	strftime(strfbuf, sizeof(strfbuf), "%Y-%m-%d %H:%M:%S %Z", tmp);
 
 	len = snprintf(buf, sizeof(buf),
-				   "START WAL LOCATION: %X/%X (file %s)\n"
-				   "CHECKPOINT LOCATION: %X/%X\n"
+				   "START WAL LOCATION: %X/%08X (file %s)\n"
+				   "CHECKPOINT LOCATION: %X/%08X\n"
 				   "BACKUP METHOD: pg_rewind\n"
 				   "BACKUP FROM: standby\n"
 				   "START TIME: %s\n",
diff --git a/src/bin/pg_rewind/timeline.c b/src/bin/pg_rewind/timeline.c
index 4d9f0d8301b..6784969951f 100644
--- a/src/bin/pg_rewind/timeline.c
+++ b/src/bin/pg_rewind/timeline.c
@@ -66,7 +66,7 @@ rewind_parseTimeLineHistory(char *buffer, TimeLineID targetTLI, int *nentries)
 		if (*ptr == '\0' || *ptr == '#')
 			continue;
 
-		nfields = sscanf(fline, "%u\t%X/%X", &tli, &switchpoint_hi, &switchpoint_lo);
+		nfields = sscanf(fline, "%u\t%X/%08X", &tli, &switchpoint_hi, &switchpoint_lo);
 
 		if (nfields < 1)
 		{
diff --git a/src/bin/pg_verifybackup/pg_verifybackup.c b/src/bin/pg_verifybackup/pg_verifybackup.c
index 48994ef9bc6..5e6c13bb921 100644
--- a/src/bin/pg_verifybackup/pg_verifybackup.c
+++ b/src/bin/pg_verifybackup/pg_verifybackup.c
@@ -1207,7 +1207,7 @@ parse_required_wal(verifier_context *context, char *pg_waldump_path,
 	{
 		char	   *pg_waldump_cmd;
 
-		pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=%X/%X --end=%X/%X\n",
+		pg_waldump_cmd = psprintf("\"%s\" --quiet --path=\"%s\" --timeline=%u --start=%X/%08X --end=%X/%08X\n",
 								  pg_waldump_path, wal_directory, this_wal_range->tli,
 								  LSN_FORMAT_ARGS(this_wal_range->start_lsn),
 								  LSN_FORMAT_ARGS(this_wal_range->end_lsn));
diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c
index 51fb76efc48..13d3ec2f5be 100644
--- a/src/bin/pg_waldump/pg_waldump.c
+++ b/src/bin/pg_waldump/pg_waldump.c
@@ -656,7 +656,7 @@ XLogDumpDisplayStats(XLogDumpConfig *config, XLogStats *stats)
 	}
 	total_len = total_rec_len + total_fpi_len;
 
-	printf("WAL statistics between %X/%X and %X/%X:\n",
+	printf("WAL statistics between %X/%08X and %X/%08X:\n",
 		   LSN_FORMAT_ARGS(stats->startptr), LSN_FORMAT_ARGS(stats->endptr));
 
 	/*
@@ -904,7 +904,7 @@ main(int argc, char **argv)
 				config.filter_by_extended = true;
 				break;
 			case 'e':
-				if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2)
+				if (sscanf(optarg, "%X/%08X", &xlogid, &xrecoff) != 2)
 				{
 					pg_log_error("invalid WAL location: \"%s\"",
 								 optarg);
@@ -1002,7 +1002,7 @@ main(int argc, char **argv)
 				config.filter_by_extended = true;
 				break;
 			case 's':
-				if (sscanf(optarg, "%X/%X", &xlogid, &xrecoff) != 2)
+				if (sscanf(optarg, "%X/%08X", &xlogid, &xrecoff) != 2)
 				{
 					pg_log_error("invalid WAL location: \"%s\"",
 								 optarg);
@@ -1140,7 +1140,7 @@ main(int argc, char **argv)
 			XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr);
 		else if (!XLByteInSeg(private.startptr, segno, WalSegSz))
 		{
-			pg_log_error("start WAL location %X/%X is not inside file \"%s\"",
+			pg_log_error("start WAL location %X/%08X is not inside file \"%s\"",
 						 LSN_FORMAT_ARGS(private.startptr),
 						 fname);
 			goto bad_argument;
@@ -1182,7 +1182,7 @@ main(int argc, char **argv)
 		if (!XLByteInSeg(private.endptr, segno, WalSegSz) &&
 			private.endptr != (segno + 1) * WalSegSz)
 		{
-			pg_log_error("end WAL location %X/%X is not inside file \"%s\"",
+			pg_log_error("end WAL location %X/%08X is not inside file \"%s\"",
 						 LSN_FORMAT_ARGS(private.endptr),
 						 argv[argc - 1]);
 			goto bad_argument;
@@ -1214,7 +1214,7 @@ main(int argc, char **argv)
 	first_record = XLogFindNextRecord(xlogreader_state, private.startptr);
 
 	if (first_record == InvalidXLogRecPtr)
-		pg_fatal("could not find a valid record after %X/%X",
+		pg_fatal("could not find a valid record after %X/%08X",
 				 LSN_FORMAT_ARGS(private.startptr));
 
 	/*
@@ -1224,8 +1224,8 @@ main(int argc, char **argv)
 	 */
 	if (first_record != private.startptr &&
 		XLogSegmentOffset(private.startptr, WalSegSz) != 0)
-		pg_log_info(ngettext("first record is after %X/%X, at %X/%X, skipping over %u byte",
-							 "first record is after %X/%X, at %X/%X, skipping over %u bytes",
+		pg_log_info(ngettext("first record is after %X/%08X, at %X/%08X, skipping over %u byte",
+							 "first record is after %X/%08X, at %X/%08X, skipping over %u bytes",
 							 (first_record - private.startptr)),
 					LSN_FORMAT_ARGS(private.startptr),
 					LSN_FORMAT_ARGS(first_record),
@@ -1309,7 +1309,7 @@ main(int argc, char **argv)
 		exit(0);
 
 	if (errormsg)
-		pg_fatal("error in WAL record at %X/%X: %s",
+		pg_fatal("error in WAL record at %X/%08X: %s",
 				 LSN_FORMAT_ARGS(xlogreader_state->ReadRecPtr),
 				 errormsg);
 
diff --git a/src/common/parse_manifest.c b/src/common/parse_manifest.c
index 71973af199b..58e0948100f 100644
--- a/src/common/parse_manifest.c
+++ b/src/common/parse_manifest.c
@@ -942,7 +942,7 @@ parse_xlogrecptr(XLogRecPtr *result, char *input)
 	uint32		hi;
 	uint32		lo;
 
-	if (sscanf(input, "%X/%X", &hi, &lo) != 2)
+	if (sscanf(input, "%X/%08X", &hi, &lo) != 2)
 		return false;
 	*result = ((uint64) hi) << 32 | lo;
 	return true;
diff --git a/src/include/access/xlogdefs.h b/src/include/access/xlogdefs.h
index 9e41c9f6e84..514f03df0b6 100644
--- a/src/include/access/xlogdefs.h
+++ b/src/include/access/xlogdefs.h
@@ -38,7 +38,10 @@ typedef uint64 XLogRecPtr;
 /*
  * Handy macro for printing XLogRecPtr in conventional format, e.g.,
  *
- * printf("%X/%X", LSN_FORMAT_ARGS(lsn));
+ * printf("%X/08X", LSN_FORMAT_ARGS(lsn));
+ *
+ * To avoid breaking translatable messages, we're directly applying the
+ * LSN format instead of using a macro.
  */
 #define LSN_FORMAT_ARGS(lsn) (AssertVariableIsOfTypeMacro((lsn), XLogRecPtr), (uint32) ((lsn) >> 32)), ((uint32) (lsn))
 
diff --git a/src/test/recovery/t/016_min_consistency.pl b/src/test/recovery/t/016_min_consistency.pl
index 9a3b4866fce..b381d0c21b5 100644
--- a/src/test/recovery/t/016_min_consistency.pl
+++ b/src/test/recovery/t/016_min_consistency.pl
@@ -39,7 +39,7 @@ sub find_largest_lsn
 	defined($len) or die "read error on $filename: $!";
 	close($fh);
 
-	return sprintf("%X/%X", $max_hi, $max_lo);
+	return sprintf("%X/%08X", $max_hi, $max_lo);
 }
 
 # Initialize primary node
diff --git a/src/test/regress/expected/numeric.out b/src/test/regress/expected/numeric.out
index 93e93be5668..c58e232a263 100644
--- a/src/test/regress/expected/numeric.out
+++ b/src/test/regress/expected/numeric.out
@@ -3872,15 +3872,15 @@ ERROR:  factorial of a negative number is undefined
 -- Tests for pg_lsn()
 --
 SELECT pg_lsn(23783416::numeric);
-  pg_lsn   
------------
- 0/16AE7F8
+   pg_lsn   
+------------
+ 0/016AE7F8
 (1 row)
 
 SELECT pg_lsn(0::numeric);
- pg_lsn 
---------
- 0/0
+   pg_lsn   
+------------
+ 0/00000000
 (1 row)
 
 SELECT pg_lsn(18446744073709551615::numeric);
diff --git a/src/test/regress/expected/pg_lsn.out b/src/test/regress/expected/pg_lsn.out
index b27eec7c015..8ab59b2e445 100644
--- a/src/test/regress/expected/pg_lsn.out
+++ b/src/test/regress/expected/pg_lsn.out
@@ -41,9 +41,9 @@ SELECT * FROM pg_input_error_info('16AE7F7', 'pg_lsn');
 
 -- Min/Max aggregation
 SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL;
- min |        max        
------+-------------------
- 0/0 | FFFFFFFF/FFFFFFFF
+    min     |        max        
+------------+-------------------
+ 0/00000000 | FFFFFFFF/FFFFFFFF
 (1 row)
 
 DROP TABLE PG_LSN_TBL;
@@ -85,21 +85,21 @@ SELECT '0/16AE7F8'::pg_lsn - '0/16AE7F7'::pg_lsn;
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn + 16::numeric;
- ?column?  
------------
- 0/16AE807
+  ?column?  
+------------
+ 0/016AE807
 (1 row)
 
 SELECT 16::numeric + '0/16AE7F7'::pg_lsn;
- ?column?  
------------
- 0/16AE807
+  ?column?  
+------------
+ 0/016AE807
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn - 16::numeric;
- ?column?  
------------
- 0/16AE7E7
+  ?column?  
+------------
+ 0/016AE7E7
 (1 row)
 
 SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 1::numeric;
@@ -111,9 +111,9 @@ SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 1::numeric;
 SELECT 'FFFFFFFF/FFFFFFFE'::pg_lsn + 2::numeric; -- out of range error
 ERROR:  pg_lsn out of range
 SELECT '0/1'::pg_lsn - 1::numeric;
- ?column? 
-----------
- 0/0
+  ?column?  
+------------
+ 0/00000000
 (1 row)
 
 SELECT '0/1'::pg_lsn - 2::numeric; -- out of range error
@@ -125,9 +125,9 @@ SELECT '0/0'::pg_lsn + ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
 (1 row)
 
 SELECT 'FFFFFFFF/FFFFFFFF'::pg_lsn - ('FFFFFFFF/FFFFFFFF'::pg_lsn - '0/0'::pg_lsn);
- ?column? 
-----------
- 0/0
+  ?column?  
+------------
+ 0/00000000
 (1 row)
 
 SELECT '0/16AE7F7'::pg_lsn + 'NaN'::numeric;
@@ -164,107 +164,107 @@ SELECT DISTINCT (i || '/' || j)::pg_lsn f
        generate_series(1, 5) k
   WHERE i <= 10 AND j > 0 AND j <= 10
   ORDER BY f;
-   f   
--------
- 1/1
- 1/2
- 1/3
- 1/4
- 1/5
- 1/6
- 1/7
- 1/8
- 1/9
- 1/10
- 2/1
- 2/2
- 2/3
- 2/4
- 2/5
- 2/6
- 2/7
- 2/8
- 2/9
- 2/10
- 3/1
- 3/2
- 3/3
- 3/4
- 3/5
- 3/6
- 3/7
- 3/8
- 3/9
- 3/10
- 4/1
- 4/2
- 4/3
- 4/4
- 4/5
- 4/6
- 4/7
- 4/8
- 4/9
- 4/10
- 5/1
- 5/2
- 5/3
- 5/4
- 5/5
- 5/6
- 5/7
- 5/8
- 5/9
- 5/10
- 6/1
- 6/2
- 6/3
- 6/4
- 6/5
- 6/6
- 6/7
- 6/8
- 6/9
- 6/10
- 7/1
- 7/2
- 7/3
- 7/4
- 7/5
- 7/6
- 7/7
- 7/8
- 7/9
- 7/10
- 8/1
- 8/2
- 8/3
- 8/4
- 8/5
- 8/6
- 8/7
- 8/8
- 8/9
- 8/10
- 9/1
- 9/2
- 9/3
- 9/4
- 9/5
- 9/6
- 9/7
- 9/8
- 9/9
- 9/10
- 10/1
- 10/2
- 10/3
- 10/4
- 10/5
- 10/6
- 10/7
- 10/8
- 10/9
- 10/10
+      f      
+-------------
+ 1/00000001
+ 1/00000002
+ 1/00000003
+ 1/00000004
+ 1/00000005
+ 1/00000006
+ 1/00000007
+ 1/00000008
+ 1/00000009
+ 1/00000010
+ 2/00000001
+ 2/00000002
+ 2/00000003
+ 2/00000004
+ 2/00000005
+ 2/00000006
+ 2/00000007
+ 2/00000008
+ 2/00000009
+ 2/00000010
+ 3/00000001
+ 3/00000002
+ 3/00000003
+ 3/00000004
+ 3/00000005
+ 3/00000006
+ 3/00000007
+ 3/00000008
+ 3/00000009
+ 3/00000010
+ 4/00000001
+ 4/00000002
+ 4/00000003
+ 4/00000004
+ 4/00000005
+ 4/00000006
+ 4/00000007
+ 4/00000008
+ 4/00000009
+ 4/00000010
+ 5/00000001
+ 5/00000002
+ 5/00000003
+ 5/00000004
+ 5/00000005
+ 5/00000006
+ 5/00000007
+ 5/00000008
+ 5/00000009
+ 5/00000010
+ 6/00000001
+ 6/00000002
+ 6/00000003
+ 6/00000004
+ 6/00000005
+ 6/00000006
+ 6/00000007
+ 6/00000008
+ 6/00000009
+ 6/00000010
+ 7/00000001
+ 7/00000002
+ 7/00000003
+ 7/00000004
+ 7/00000005
+ 7/00000006
+ 7/00000007
+ 7/00000008
+ 7/00000009
+ 7/00000010
+ 8/00000001
+ 8/00000002
+ 8/00000003
+ 8/00000004
+ 8/00000005
+ 8/00000006
+ 8/00000007
+ 8/00000008
+ 8/00000009
+ 8/00000010
+ 9/00000001
+ 9/00000002
+ 9/00000003
+ 9/00000004
+ 9/00000005
+ 9/00000006
+ 9/00000007
+ 9/00000008
+ 9/00000009
+ 9/00000010
+ 10/00000001
+ 10/00000002
+ 10/00000003
+ 10/00000004
+ 10/00000005
+ 10/00000006
+ 10/00000007
+ 10/00000008
+ 10/00000009
+ 10/00000010
 (100 rows)
 
diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out
index 1443e1d9292..529b2241731 100644
--- a/src/test/regress/expected/subscription.out
+++ b/src/test/regress/expected/subscription.out
@@ -116,18 +116,18 @@ CREATE SUBSCRIPTION regress_testsub4 CONNECTION 'dbname=regress_doesnotexist' PU
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+ regress_testsub4
-                                                                                                                 List of subscriptions
-       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | none   | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                  List of subscriptions
+       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | none   | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub4 SET (origin = any);
 \dRs+ regress_testsub4
-                                                                                                                 List of subscriptions
-       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
-------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                  List of subscriptions
+       Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub4 | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub3;
@@ -145,10 +145,10 @@ ALTER SUBSCRIPTION regress_testsub CONNECTION 'foobar';
 ERROR:  invalid connection string syntax: missing "=" after "foobar" in connection info string
 
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH (refresh = false);
@@ -157,10 +157,10 @@ ALTER SUBSCRIPTION regress_testsub SET (slot_name = 'newname');
 ALTER SUBSCRIPTION regress_testsub SET (password_required = false);
 ALTER SUBSCRIPTION regress_testsub SET (run_as_owner = true);
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | f                 | t             | f        | off                | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | f                 | t             | f        | off                | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (password_required = true);
@@ -176,10 +176,10 @@ ERROR:  unrecognized subscription parameter: "create_slot"
 -- ok
 ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/12345');
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/12345
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/00012345
 (1 row)
 
 -- ok - with lsn = NONE
@@ -188,10 +188,10 @@ ALTER SUBSCRIPTION regress_testsub SKIP (lsn = NONE);
 ALTER SUBSCRIPTION regress_testsub SKIP (lsn = '0/0');
 ERROR:  invalid WAL location (LSN): 0/0
 \dRs+
-                                                                                                                     List of subscriptions
-      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                      List of subscriptions
+      Name       |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 BEGIN;
@@ -223,10 +223,10 @@ ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar);
 ERROR:  invalid value for parameter "synchronous_commit": "foobar"
 HINT:  Available values: local, remote_write, remote_apply, on, off.
 \dRs+
-                                                                                                                       List of subscriptions
-        Name         |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           | Skip LSN 
----------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+----------
- regress_testsub_foo | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | local              | dbname=regress_doesnotexist2 | 0/0
+                                                                                                                        List of subscriptions
+        Name         |           Owner           | Enabled |     Publication     | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |           Conninfo           |  Skip LSN  
+---------------------+---------------------------+---------+---------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+------------------------------+------------
+ regress_testsub_foo | regress_subscription_user | f       | {testpub2,testpub3} | f      | parallel  | d                | f                | any    | t                 | f             | f        | local              | dbname=regress_doesnotexist2 | 0/00000000
 (1 row)
 
 -- rename back to keep the rest simple
@@ -255,19 +255,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | t      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | t      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (binary = false);
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub;
@@ -279,27 +279,27 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (streaming = parallel);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (streaming = false);
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- fail - publication already exists
@@ -314,10 +314,10 @@ ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refr
 ALTER SUBSCRIPTION regress_testsub ADD PUBLICATION testpub1, testpub2 WITH (refresh = false);
 ERROR:  publication "testpub1" is already in subscription "regress_testsub"
 \dRs+
-                                                                                                                        List of subscriptions
-      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                         List of subscriptions
+      Name       |           Owner           | Enabled |         Publication         | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-----------------------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub,testpub1,testpub2} | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- fail - publication used more than once
@@ -332,10 +332,10 @@ ERROR:  publication "testpub3" is not in subscription "regress_testsub"
 -- ok - delete publications
 ALTER SUBSCRIPTION regress_testsub DROP PUBLICATION testpub1, testpub2 WITH (refresh = false);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | off       | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 DROP SUBSCRIPTION regress_testsub;
@@ -371,19 +371,19 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 -- we can alter streaming when two_phase enabled
 ALTER SUBSCRIPTION regress_testsub SET (streaming = true);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -393,10 +393,10 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | on        | p                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
@@ -409,18 +409,18 @@ CREATE SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist' PUB
 WARNING:  subscription was created, but is not connected
 HINT:  To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | f                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (disable_on_error = true);
 \dRs+
-                                                                                                                List of subscriptions
-      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           | Skip LSN 
------------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+----------
- regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | t                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/0
+                                                                                                                 List of subscriptions
+      Name       |           Owner           | Enabled | Publication | Binary | Streaming | Two-phase commit | Disable on error | Origin | Password required | Run as owner? | Failover | Synchronous commit |          Conninfo           |  Skip LSN  
+-----------------+---------------------------+---------+-------------+--------+-----------+------------------+------------------+--------+-------------------+---------------+----------+--------------------+-----------------------------+------------
+ regress_testsub | regress_subscription_user | f       | {testpub}   | f      | parallel  | d                | t                | any    | t                 | f             | f        | off                | dbname=regress_doesnotexist | 0/00000000
 (1 row)
 
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = NONE);
-- 
2.43.0

#15Álvaro Herrera
alvherre@kurilemu.de
In reply to: Japin Li (#14)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-04, Japin Li wrote:

I've opted to directly use %X/%08X for LSN formatting in this patch, with an
accompanying comment near LSN_FORMAT_ARGS.

Thank you! I support this approach and intend to work on getting this
patch committed soon after some more review, unless there are further
objections.

--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
"World domination is proceeding according to plan" (Andrew Morton)

#16Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Álvaro Herrera (#15)
Re: Inconsistent LSN format in pg_waldump output

On Fri, Jul 4, 2025 at 8:01 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-04, Japin Li wrote:

I've opted to directly use %X/%08X for LSN formatting in this patch, with an
accompanying comment near LSN_FORMAT_ARGS.

Thank you! I support this approach and intend to work on getting this
patch committed soon after some more review, unless there are further
objections.

+1. I think we need to update LSN values in the documentation too.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#17Álvaro Herrera
alvherre@kurilemu.de
In reply to: Masahiko Sawada (#16)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-05, Masahiko Sawada wrote:

On Fri, Jul 4, 2025 at 8:01 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-04, Japin Li wrote:

I've opted to directly use %X/%08X for LSN formatting in this patch, with an
accompanying comment near LSN_FORMAT_ARGS.

Thank you! I support this approach and intend to work on getting this
patch committed soon after some more review, unless there are further
objections.

+1. I think we need to update LSN values in the documentation too.

You're right, we had a few of those. I grepped for them and adjusted
what I found. I could have missed some, because there's a bunch of
other values that also look like slash-separated hexadecimal numbers.
The only case where I did something other than adding a leading zero was
the example output for gist_page_opaque_info() because I wasn't sure
that the 'nsn' column was also going to be printed as an LSN :-) so I
just ran the example query using one index from the regression database.

And pushed. Thanks!

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"No tengo por qué estar de acuerdo con lo que pienso"
(Carlos Caszeli)

#18Ashutosh Bapat
ashutosh.bapat.oss@gmail.com
In reply to: Álvaro Herrera (#15)
Re: Inconsistent LSN format in pg_waldump output

On Fri, Jul 4, 2025 at 5:18 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-04, Japin Li wrote:

I've opted to directly use %X/%08X for LSN formatting in this patch, with an
accompanying comment near LSN_FORMAT_ARGS.

Thank you! I support this approach and intend to work on getting this
patch committed soon after some more review, unless there are further
objections.

I am wondering whether we should question the restriction on using
format macros because of translations. In fact, these format macros
can actually aid translations e.g. if the translation sees LSN_FORMAT
instead of %X/%X, it can use that knowledge to better translate the
message since it knows that it's an LSN instead of two sets of hex
numbers separated by /. If we could devise a prefix which will tell
them that what comes next is a FORMAT for a special datatype, would
the translation system be able to make use of this information. I am
not familiar with the translation system and I might be wrong in
making such an assumption.

--
Best Wishes,
Ashutosh Bapat

#19Japin Li
japinli@hotmail.com
In reply to: Ashutosh Bapat (#18)
Re: Inconsistent LSN format in pg_waldump output

On Mon, 07 Jul 2025 at 19:34, Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> wrote:

On Fri, Jul 4, 2025 at 5:18 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-04, Japin Li wrote:

I've opted to directly use %X/%08X for LSN formatting in this patch, with an
accompanying comment near LSN_FORMAT_ARGS.

Thank you! I support this approach and intend to work on getting this
patch committed soon after some more review, unless there are further
objections.

I am wondering whether we should question the restriction on using
format macros because of translations. In fact, these format macros
can actually aid translations e.g. if the translation sees LSN_FORMAT
instead of %X/%X, it can use that knowledge to better translate the
message since it knows that it's an LSN instead of two sets of hex
numbers separated by /. If we could devise a prefix which will tell
them that what comes next is a FORMAT for a special datatype, would
the translation system be able to make use of this information. I am
not familiar with the translation system and I might be wrong in
making such an assumption.

I see that PRI*64 macros, introduced in 15a79c73111, work for both translatable
and non-translatable messages. However, I'm unsure how to apply them for LSN
formatting.

--
Regards,
Japin Li

#20Japin Li
japinli@hotmail.com
In reply to: Álvaro Herrera (#17)
Re: Inconsistent LSN format in pg_waldump output

On Mon, 07 Jul 2025 at 14:18, Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-05, Masahiko Sawada wrote:

On Fri, Jul 4, 2025 at 8:01 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:

On 2025-Jul-04, Japin Li wrote:

I've opted to directly use %X/%08X for LSN formatting in this patch, with an
accompanying comment near LSN_FORMAT_ARGS.

Thank you! I support this approach and intend to work on getting this
patch committed soon after some more review, unless there are further
objections.

+1. I think we need to update LSN values in the documentation too.

You're right, we had a few of those. I grepped for them and adjusted
what I found. I could have missed some, because there's a bunch of
other values that also look like slash-separated hexadecimal numbers.
The only case where I did something other than adding a leading zero was
the example output for gist_page_opaque_info() because I wasn't sure
that the 'nsn' column was also going to be printed as an LSN :-) so I
just ran the example query using one index from the regression database.

And pushed. Thanks!

Thank you for pushing this patch. I noticed some other areas in the
documentation that could also use an update.

diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml
index 49a7c180a80..0994e089311 100644
--- a/doc/src/sgml/datatype.sgml
+++ b/doc/src/sgml/datatype.sgml
@@ -5121,7 +5121,7 @@ WHERE ...
     <literal>+(pg_lsn,numeric)</literal> and
     <literal>-(pg_lsn,numeric)</literal> operators, respectively. Note that
     the calculated LSN should be in the range of <type>pg_lsn</type> type,
-    i.e., between <literal>0/0</literal> and
+    i.e., between <literal>0/00000000</literal> and
     <literal>FFFFFFFF/FFFFFFFF</literal>.
    </para>
   </sect1>
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 810b2b50f0d..c28aa71f570 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -28521,7 +28521,7 @@ acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}
         Returns information about the progress of the WAL summarizer. If the
         WAL summarizer has never run since the instance was started, then
         <literal>summarized_tli</literal> and <literal>summarized_lsn</literal>
-        will be <literal>0</literal> and <literal>0/0</literal> respectively;
+        will be <literal>0</literal> and <literal>0/00000000</literal> respectively;
         otherwise, they will be the TLI and ending LSN of the last WAL summary
         file written to disk. If the WAL summarizer is currently running,
         <literal>pending_lsn</literal> will be the ending LSN of the last

I suggest we avoid changing the border style here.

+    lsn     │    nsn     │ rightlink │ flags
+────────────┼────────────┼───────────┼────────
+ 0/0B5FE088 │ 0/00000000 │         1 │ {leaf}

--
Regards,
Japin Li

#21Álvaro Herrera
alvherre@kurilemu.de
In reply to: Ashutosh Bapat (#18)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-07, Ashutosh Bapat wrote:

I am wondering whether we should question the restriction on using
format macros because of translations.

Sure Mr. Quixote, the windmills are over there.

In fact, these format macros can actually aid translations e.g. if the
translation sees LSN_FORMAT instead of %X/%X, it can use that
knowledge to better translate the message since it knows that it's an
LSN instead of two sets of hex numbers separated by /. If we could
devise a prefix which will tell them that what comes next is a FORMAT
for a special datatype, would the translation system be able to make
use of this information.

You'd have to talk with the gettext developers and then wait a decade or
so for all the live distributions get a patched gettext release. For
GNU gettext, this is explained at the bottom of this page:
https://www.gnu.org/software/gettext/manual/html_node/No-string-concatenation.html
I frankly wouldn't waste my time.

Meanwhile, crake is failing the cross-version upgrade test because of
this change, and I'm not sure what solution I'm going to offer. Maybe
use the AdjustUpgrade.pm infrastructure to set all the pg_lsn column
values to NULL if the old version is earlier than 19 and the new version
is 19 or later :-)

--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
Syntax error: function hell() needs an argument.
Please choose what hell you want to involve.

#22Álvaro Herrera
alvherre@kurilemu.de
In reply to: Álvaro Herrera (#21)
1 attachment(s)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-07, Álvaro Herrera wrote:

Meanwhile, crake is failing the cross-version upgrade test because of
this change, and I'm not sure what solution I'm going to offer. Maybe
use the AdjustUpgrade.pm infrastructure to set all the pg_lsn column
values to NULL if the old version is earlier than 19 and the new version
is 19 or later :-)

I think this should work, but I'm going to run against each of these
versions to verify it before pushing.

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"Hay que recordar que la existencia en el cosmos, y particularmente la
elaboración de civilizaciones dentro de él no son, por desgracia,
nada idílicas" (Ijon Tichy)

Attachments:

0001-fix-pg_upgrade-test.patchtext/x-diff; charset=utf-8Download
From 24d33edbb9dcdcb2fda44cf7a2ed7985977b60a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <alvherre@kurilemu.de>
Date: Mon, 7 Jul 2025 18:13:18 +0200
Subject: [PATCH] fix pg_upgrade test

---
 .../perl/PostgreSQL/Test/AdjustUpgrade.pm     | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
index 1725fe2f948..6ace862d8f7 100644
--- a/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
+++ b/src/test/perl/PostgreSQL/Test/AdjustUpgrade.pm
@@ -251,6 +251,36 @@ sub adjust_database_contents
 			'drop operator if exists public.=> (bigint, NONE)');
 	}
 
+	# Version 19 changed the output format of pg_lsn.  To avoid output
+	# differences, set all pg_lsn columns to NULL if the old version is
+	# older than 19.
+	if ($old_version < 19)
+	{
+		if ($old_version >= '9.5')
+		{
+			_add_st($result,
+				'regression',
+				"update brintest set lsncol = NULL");
+		}
+
+		if ($old_version >= 12)
+		{
+			_add_st($result,
+				'regression',
+				"update tab_core_types set pg_lsn = NULL");
+		}
+
+		if ($old_version >= 14)
+		{
+			for my $tab (qw(brintest_multi brintest_bloom))
+			{
+				_add_st($result,
+					'regression',
+					"update $tab set lsncol = NULL");
+			}
+		}
+	}
+
 	return $result;
 }
 
-- 
2.39.5

#23Álvaro Herrera
alvherre@kurilemu.de
In reply to: Álvaro Herrera (#22)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-07, Álvaro Herrera wrote:

I think this should work, but I'm going to run against each of these
versions to verify it before pushing.

Seems to work okay, so pushed. Crake will tell us if something's still
amiss.

--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
"I'm impressed how quickly you are fixing this obscure issue. I came from
MS SQL and it would be hard for me to put into words how much of a better job
you all are doing on [PostgreSQL]."
Steve Midgley, http://archives.postgresql.org/pgsql-sql/2008-08/msg00000.php

#24Álvaro Herrera
alvherre@kurilemu.de
In reply to: Japin Li (#20)
Re: Inconsistent LSN format in pg_waldump output

On 2025-Jul-07, Japin Li wrote:

Thank you for pushing this patch. I noticed some other areas in the
documentation that could also use an update.

Thanks! Pushed these fixes.

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
Syntax error: function hell() needs an argument.
Please choose what hell you want to involve.

#25Álvaro Herrera
alvherre@kurilemu.de
In reply to: Japin Li (#20)
1 attachment(s)
Re: Inconsistent LSN format in pg_waldump output

I found an old patch in my local worktree closely related to this work;
here we take the additional step of changing the pattern used for .snap
file names in logical decoding to use %X/%08X as the other patterns we
changed for this. This changes both the sscanf() part of it as well as
sprinft().

Any objections against this?

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/

Attachments:

0001-Use-a-define-for-the-.snap-printf-format-string.patchtext/x-diff; charset=utf-8Download
From 137bee91f616dcb098beb8993be5abafbf0aa1ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <alvherre@kurilemu.de>
Date: Thu, 16 Oct 2025 19:55:19 +0200
Subject: [PATCH] Use a #define for the .snap printf format string
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Related to 2633dae2e487.

Author: Álvaro Herrera <alvherre@kurilemu.de>
Discussion: https://postgr.es/m/202510161752.vnzpkapsf7mr@alvherre.pgsql
---
 contrib/pg_logicalinspect/pg_logicalinspect.c |  4 ++--
 src/backend/replication/logical/snapbuild.c   | 10 +++++-----
 src/include/replication/reorderbuffer.h       |  3 +++
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/contrib/pg_logicalinspect/pg_logicalinspect.c b/contrib/pg_logicalinspect/pg_logicalinspect.c
index 50e805d3195..4c2c9199c4e 100644
--- a/contrib/pg_logicalinspect/pg_logicalinspect.c
+++ b/contrib/pg_logicalinspect/pg_logicalinspect.c
@@ -69,7 +69,7 @@ parse_snapshot_filename(const char *filename)
 	 * check including the suffix. The subsequent check validates if the given
 	 * filename has the expected suffix.
 	 */
-	if (sscanf(filename, "%X-%X.snap", &hi, &lo) != 2)
+	if (sscanf(filename, PG_LOGICAL_SNAPFILE_PATTERN, &hi, &lo) != 2)
 		goto parse_error;
 
 	/*
@@ -77,7 +77,7 @@ parse_snapshot_filename(const char *filename)
 	 * to the given filename. This check strictly checks if the given filename
 	 * follows the format of the snapshot filename.
 	 */
-	sprintf(tmpfname, "%X-%X.snap", hi, lo);
+	sprintf(tmpfname, PG_LOGICAL_SNAPFILE_PATTERN, hi, lo);
 	if (strcmp(tmpfname, filename) != 0)
 		goto parse_error;
 
diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c
index 98ddee20929..704e7ee642b 100644
--- a/src/backend/replication/logical/snapbuild.c
+++ b/src/backend/replication/logical/snapbuild.c
@@ -1529,7 +1529,7 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
 	 * unless the user used pg_resetwal or similar. If a user did so, there's
 	 * no hope continuing to decode anyway.
 	 */
-	sprintf(path, "%s/%X-%X.snap",
+	sprintf(path, "%s/" PG_LOGICAL_SNAPFILE_PATTERN,
 			PG_LOGICAL_SNAPSHOTS_DIR,
 			LSN_FORMAT_ARGS(lsn));
 
@@ -1573,7 +1573,7 @@ SnapBuildSerialize(SnapBuild *builder, XLogRecPtr lsn)
 	elog(DEBUG1, "serializing snapshot to %s", path);
 
 	/* to make sure only we will write to this tempfile, include pid */
-	sprintf(tmppath, "%s/%X-%X.snap.%d.tmp",
+	sprintf(tmppath, "%s/" PG_LOGICAL_SNAPFILE_PATTERN ".%d.tmp",
 			PG_LOGICAL_SNAPSHOTS_DIR,
 			LSN_FORMAT_ARGS(lsn), MyProcPid);
 
@@ -1747,7 +1747,7 @@ SnapBuildRestoreSnapshot(SnapBuildOnDisk *ondisk, XLogRecPtr lsn,
 	Size		sz;
 	char		path[MAXPGPATH];
 
-	sprintf(path, "%s/%X-%X.snap",
+	sprintf(path, "%s/" PG_LOGICAL_SNAPFILE_PATTERN,
 			PG_LOGICAL_SNAPSHOTS_DIR,
 			LSN_FORMAT_ARGS(lsn));
 
@@ -2019,7 +2019,7 @@ CheckPointSnapBuild(void)
 		 * We just log a message if a file doesn't fit the pattern, it's
 		 * probably some editors lock/state file or similar...
 		 */
-		if (sscanf(snap_de->d_name, "%X-%X.snap", &hi, &lo) != 2)
+		if (sscanf(snap_de->d_name, PG_LOGICAL_SNAPFILE_PATTERN, &hi, &lo) != 2)
 		{
 			ereport(LOG,
 					(errmsg("could not parse file name \"%s\"", path)));
@@ -2061,7 +2061,7 @@ SnapBuildSnapshotExists(XLogRecPtr lsn)
 	int			ret;
 	struct stat stat_buf;
 
-	sprintf(path, "%s/%X-%X.snap",
+	sprintf(path, "%s/" PG_LOGICAL_SNAPFILE_PATTERN,
 			PG_LOGICAL_SNAPSHOTS_DIR,
 			LSN_FORMAT_ARGS(lsn));
 
diff --git a/src/include/replication/reorderbuffer.h b/src/include/replication/reorderbuffer.h
index 3cbe106a3c7..079de45cbe6 100644
--- a/src/include/replication/reorderbuffer.h
+++ b/src/include/replication/reorderbuffer.h
@@ -23,6 +23,9 @@
 #define PG_LOGICAL_MAPPINGS_DIR		PG_LOGICAL_DIR "/mappings"
 #define PG_LOGICAL_SNAPSHOTS_DIR	PG_LOGICAL_DIR "/snapshots"
 
+/* name pattern of snapshot spillfiles; always used with LSN_FORMAT_ARGS */
+#define PG_LOGICAL_SNAPFILE_PATTERN "%X-%08X.snap"
+
 /* GUC variables */
 extern PGDLLIMPORT int logical_decoding_work_mem;
 extern PGDLLIMPORT int debug_logical_replication_streaming;
-- 
2.47.3