Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsd6t-00AlrG-0K for pgsql-general@arkaria.postgresql.org; Wed, 18 Feb 2026 08:40:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsd6s-00Ez2B-1O for pgsql-general@arkaria.postgresql.org; Wed, 18 Feb 2026 08:40:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsd6s-00Ez23-0G for pgsql-general@lists.postgresql.org; Wed, 18 Feb 2026 08:40:38 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vsd6p-00000001Khv-3AQx for pgsql-general@postgresql.org; Wed, 18 Feb 2026 08:40:37 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-59e65b8e268so4670484e87.2 for ; Wed, 18 Feb 2026 00:40:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771404034; cv=none; d=google.com; s=arc-20240605; b=fdWlBU37jNOGHR6EkOGnCzgYPz1ei0YA8LqvFH3faM8K3wrX6nmml8LdUeF/f0nAt3 c3LnTZgcveS7aw6nhbyyTncVjdfXeGUagY9WpxJW0zO9gv1HYyZhGojFKyTMryIO8IaW 12AsyOZl9USU4KKC9rV3GXUjT7AfFvZ4bjjTxrZqBHzq0lDGcwYWCBxSGXvqBSWoU6wB 9w8dOlpJL4IL1LBkryJw6eVotkmP/k+m2B6TnBUt+H4SCdPLbhxzRJjMNgeJqt8J5l5I w0exjh8ZNXTaEw8B3kyGm2Xs8dJwS9xciLd1oq9AGlhSAowHVwMEn8jEBi1vij6EHjEs 1vOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=UOkGnaSN/osK2BUuoDxRCY6S17IWj7Lgq9ESbzcYz60=; fh=oTjHdIyi06GyAxT24k6f8A3wFOXoLe7VglQh0Rut9Mg=; b=GyvaP4DfrQfq9OlMNEaviKPJR1GFUwfE/tC8KTSeDeNF1OrJOWjgEK/IqBE/7qK9NQ B72PWpC0VrWaow2vxW4Yvv9WHVRN+bPgl4SpiXdFo533B7cBBpLDc8ZGNmcc5gR5dCUK S3Smt29p/cT/idukt/xeT3TyOotRTxFvHBO9nv8pz6AGmteHVfS+Kmbb0Sw5Rbev13hA pZYfUnZhmcDI02SH70KvBz8xvIyjSm2d8oeSGHxAcE8VRVJ6Xb5q4wCrgs2xjRh8Mr4j wwq0/bvlhNjRLp9BAhL94JS3egUVUgRSvfssS7sP2Ox1eLMyqVkw4eLjZl1vtROzriI4 7bog==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771404034; x=1772008834; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=UOkGnaSN/osK2BUuoDxRCY6S17IWj7Lgq9ESbzcYz60=; b=jiBFXxwPQey8dPcGXAGbNsFcvLoYkXFGPj82CHPp0A7VJWxfEwijiUEFe9GABugeNS ukGajPVqtD1XU1IXZoXvbfPtGj8IGRgJAc2UJqygWxJs5AYXF9ZKXbbT4HmAUqoJYaCR KGFv1xX1f1ymtd1Da8rd2ef3DMclSa0twMYx6MqNePDwc85LUXcXdYp8z2QAL2VO4DuV ZXl3EO7u5ydxXoTAe71L+fiDrinGOWhKMbmdvfzJHR7P0DBW008FEOBSoyoDKm3esw3Q P1K24b6IWOcTgMl27V6zB2QGLDZ+3NPt86Ka63erZH8GVdcZ4tuJK0ZM5k+cwYuPWBlE QF2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771404034; x=1772008834; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UOkGnaSN/osK2BUuoDxRCY6S17IWj7Lgq9ESbzcYz60=; b=bL3iK/PTK9hcYtYNiF86SPiMEcXjJiEJfOLnh+QvCZNx0Rgt1vx5tb7vw0NAnYqrS5 HBLh39PjKHt7F0ac3jR5cK3i0SsKys8vgDroMrytiewqs/Q0sJdgDv8jSEy4RNkTwi4D UM/hPhpFShRqdKcmV4hzSLVbeg5dsg9JVWcm8Ps/ne6LEGfzKo+NM8TuHv1yZT8Bt+F9 9vSszBXnpov+NPma0fldwpdDXNqNbeml2R220RWGCIUIWvOJNCCmaIoq8uhK6gdnKX/E Gy7lwZT4QUlwpWCpWs3B4pkXIIhXl7m0Rb8O0UKFmzCLItN9uWoM8mR/3UxoPPN5UR9K wNjw== X-Gm-Message-State: AOJu0YzjIQZEU2HveY5Tbn3Zl71AXWn7xzxrxVTGIs8t+h4DbCWn1uk4 uhhSFT0ESqLapnYxMaYSIBwoJtjOmG8u9wz8vDE6puJlG8n6tuITq3EpdMBySsqQ/DhDhakFwwS tcTTJcy69cED19xtYVlLxs8KiNNCEL73TMMWAjw== X-Gm-Gg: AZuq6aKSCZfJ/amNNMf6TJMyMTA6RwTTErKhp7T3fkcI4Llho8PREuhNnr/kzmKdD/p oBO/kxa8a4KYmjOEpQio1LZVLRxXrQTL2h5HKKPD4Z9yps3EFDab9v2BBjanR7HNT7gqEznzbn4 1qzveAFskethem7MGxBcGuOij+9A8sMdNPcsEv9lXqkFgzMPiwoQJH4xjOI4qnL6RZ0ZwCZIM+O l9XxOZYluISQ2ZRhjPj8BBrBlmsObbYt+slImuKM9K73lqVnrc5t3hk/yfpjGb8VCbv/2h74HPb 3/sj X-Received: by 2002:a05:6512:10c9:b0:59e:1813:76ae with SMTP id 2adb3069b0e04-59f0282f749mr5931222e87.44.1771404033892; Wed, 18 Feb 2026 00:40:33 -0800 (PST) MIME-Version: 1.0 From: =?UTF-8?Q?Torsten_F=C3=B6rtsch?= Date: Wed, 18 Feb 2026 08:40:22 +0000 X-Gm-Features: AaiRm52_W4XbY7HeZRYQj5gytI5_g6u6ejE_xpzcSsw0ZhtawpBmFOqZBS4qu7E Message-ID: Subject: Bug: PG 14 recovery failure To: PostgreSQL mailing lists Content-Type: multipart/alternative; boundary="00000000000031a6ef064b15246d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000031a6ef064b15246d Content-Type: text/plain; charset="UTF-8" Hi, for many years I have been running a backup check system for my databases that constantly - upgrade to the latest available PG minor version (Debian PGDG) - restore a DB from a basebackup on S3 - replay all available WAL - perform a ton consistency checks - repeat the same with the next DB - when all DBs are done start from the beginning All the DBs are PG14. After 14.21 was released last week I saw some of our bigger DBs failing after replaying a few 1000 WAL files. The error message reads like so: 2026-02-14 01:53:59.595 UTC [2441074] LOG: restored log file "0000000500017F8D0000004E" from archive 2026-02-14 01:53:59.605 UTC [2441074] FATAL: could not access status of transaction 2030956544 2026-02-14 01:53:59.605 UTC [2441074] DETAIL: Could not read from file "pg_multixact/offsets/790D" at offset 245760: read too few bytes. 2026-02-14 01:53:59.605 UTC [2441074] CONTEXT: WAL redo at 17F8D/4E1E03E8 for MultiXact/CREATE_ID: 2030956543 offset 1335629905 nmembers 2: 691151655 (keysh) 691151658 (keysh) It does not happen every time. A freshly taken backup succeeded in restoring ~3000 WAL files. In the next round it failed at ~5000 WAL files. If it fails, it is reproducible. It will fail at the same multixact offset again. The multixact offset file where it fails does not exist in the base backup. It is built during replay. In all cases I saw, the offset mentioned in the error message is the length of the file. So, PG apparently wants to read beyond the end of the file. After rolling back to PG 14.20, everything started working again. The release notes mention a few multixact changes from 14.20 to 14.21. I can't claim to understand the change fully. But https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=81416e101 looks like the best culprit candidate to me. All the best, Torsten --00000000000031a6ef064b15246d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

for many years I have been running = a backup check system for my databases that constantly
- upgrade = to the latest available PG minor version (Debian PGDG)
- restore = a DB from a basebackup on S3
- replay all available WAL
- perform a ton consistency checks
- repeat the same with the ne= xt DB
- when all DBs are done start from the beginning
=
All the DBs are PG14. After 14.21 was released last week I s= aw some of our bigger DBs failing after replaying a few 1000 WAL files.

The error message reads like so:

=
2026-02-14 01:53:59.595 UTC [2441074] LOG: restore= d log file "0000000500017F8D0000004E" from archive 2026-02-14 01:53:59.605 UTC [2441074] FATAL: could not access status of tr= ansaction 2030956544 2026-02-14 01:53:59.605 UTC [2441074] DETAIL: Could not read from file &qu= ot;pg_multixact/offsets/790D" at offset 245760: read too few bytes. 2026-02-14 01:53:59.605 UTC [2441074] CONTEXT: WAL redo at 17F8D/4E1E03E8 = for MultiXact/CREATE_ID: 2030956543 offset 1335629905 nmembers 2: 691151655= (keysh) 691151658 (keysh)
It does not= happen every time. A freshly taken backup succeeded in restoring ~3000 WAL= files. In the next round it failed at ~5000 WAL files. If it fails, it is = reproducible. It will fail at the same multixact offset again.
The multixact offset file where it fails does not exist in the= base backup. It is built during replay. In all cases I saw, the offset men= tioned in the error message is the length of the file. So, PG apparently wa= nts to read beyond the end of the file.

After roll= ing back to PG 14.20, everything started working again.

The release notes mention a few multixact changes from 14.20 to 14.21= . I can't claim to understand the change fully. But=C2=A0https://git.postgresql.org/gitweb/?p=3Dpostgresql.git;a=3Dcommitdiff;= h=3D81416e101 looks like the best culprit candidate to me.
All the best,
Torsten
--00000000000031a6ef064b15246d--