postgresql/src/include
Tomas Vondra ce06b5740e Use GetXLogInsertEndRecPtr in gistGetFakeLSN
The function used GetXLogInsertRecPtr() to generate the fake LSN. Most
of the time this is the same as what XLogInsert() would return, and so
it works fine with the XLogFlush() call. But if the last record ends at
a page boundary, GetXLogInsertRecPtr() returns LSN pointing after the
page header. In such case XLogFlush() fails with errors like this:

  ERROR: xlog flush request 0/01BD2018 is not satisfied --- flushed only to 0/01BD2000

Such failures are very hard to trigger, particularly outside aggressive
test scenarios.

Fixed by introducing GetXLogInsertEndRecPtr(), returning the correct LSN
without skipping the header. This is the same as GetXLogInsertRecPtr(),
except that it calls XLogBytePosToEndRecPtr().

Initial investigation by me, root cause identified by Andres Freund.

This is a long-standing bug in gistGetFakeLSN(), probably introduced by
c6b92041d3 in PG13. Backpatch to all supported versions.

Reported-by: Peter Geoghegan <pg@bowt.ie>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/vf4hbwrotvhbgcnknrqmfbqlu75oyjkmausvy66ic7x7vuhafx@e4rvwavtjswo
Backpatch-through: 14
2026-03-13 23:26:36 +01:00
..
access Use GetXLogInsertEndRecPtr in gistGetFakeLSN 2026-03-13 23:26:36 +01:00
backup Move basebackup code to new directory src/backend/backup 2022-08-10 14:03:09 -04:00
bootstrap Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
catalog Harden _int_matchsel() against being attached to the wrong operator. 2026-02-09 10:14:22 -05:00
commands Harden _int_matchsel() against being attached to the wrong operator. 2026-02-09 10:14:22 -05:00
common Fix corner-case 64-bit integer subtraction bug on some platforms. 2023-11-09 09:54:22 +00:00
datatype Avoid using timezone Asia/Manila in regression tests. 2025-01-20 15:47:53 -05:00
executor Fix replica identity check for MERGE. 2025-09-04 11:50:59 +01:00
fe_utils Specify the encoding of input to fmtId() 2025-02-10 10:03:39 -05:00
foreign Update copyright for 2022 2022-01-07 19:04:57 -05:00
jit Monkey-patch LLVM code to fix ARM relocation bug. 2024-11-06 23:09:28 +13:00
lib simplehash: Free collisions array in SH_STAT 2024-04-07 19:09:04 -07:00
libpq Make dblink interruptible, via new libpqsrv APIs. 2025-04-03 09:34:01 -07:00
mb Replace pg_mblen() with bounds-checked versions. 2026-02-09 12:34:24 +13:00
nodes Fix incorrect IndexOptInfo header comment 2025-11-24 17:02:00 +13:00
optimizer Disallow collecting transition tuples from child foreign tables. 2025-08-08 10:50:03 +09:00
parser Handle default NULL insertion a little better. 2025-01-29 15:31:55 -05:00
partitioning Refactor and cleanup runtime partition prune code a little 2022-04-05 11:46:48 +02:00
port Fix generic read and write barriers for Clang. 2025-11-08 12:30:08 +13:00
portability Update copyright for 2022 2022-01-07 19:04:57 -05:00
postmaster Un-revert "Disable STARTUP_PROGRESS_TIMEOUT in standby mode." 2023-02-10 16:27:05 -05:00
regex Avoid assertion due to disconnected NFA sub-graphs in regex parsing. 2024-11-15 18:23:38 -05:00
replication Make invalid primary_slot_name follow standard GUC error reporting. 2025-10-22 20:13:15 +09:00
rewrite Fix calculation of which GENERATED columns need to be updated. 2023-01-05 14:12:17 -05:00
snowball Update copyright for 2022 2022-01-07 19:04:57 -05:00
statistics Add stxdinherit flag to pg_statistic_ext_data 2022-01-16 13:38:01 +01:00
storage Assert lack of hazardous buffer locks before possible catalog read. 2025-12-16 16:13:55 -08:00
tcop Restrict accesses to non-system views and foreign tables during pg_dump. 2024-08-05 06:05:25 -07:00
tsearch Replace pg_mblen() with bounds-checked versions. 2026-02-09 12:34:24 +13:00
utils Add a syscache on pg_extension.oid. 2026-02-09 10:02:23 -05:00
.gitignore Refactor dlopen() support 2018-09-06 11:33:04 +02:00
c.h Allow PG_PRINTF_ATTRIBUTE to be different in C and C++ code. 2026-02-25 11:57:26 -05:00
fmgr.h Pre-beta mechanical code beautification. 2022-05-12 15:17:30 -04:00
funcapi.h Rename SetSingleFuncCall() to InitMaterializedSRF() 2022-10-18 10:22:40 +09:00
getaddrinfo.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
getopt_long.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
Makefile Build in some knowledge about foreign-key relationships in the catalogs. 2021-02-02 17:11:55 -05:00
miscadmin.h Avoid mixing void and integer in a conditional expression. 2025-11-02 12:31:17 -05:00
pg_config.h.in Allow PG_PRINTF_ATTRIBUTE to be different in C and C++ code. 2026-02-25 11:57:26 -05:00
pg_config_ext.h.in Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00
pg_config_manual.h Fix old-fd issues using global barriers everywhere. 2022-05-07 16:47:29 +12:00
pg_getopt.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
pg_trace.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
pgstat.h Fix assertion failure when updating stats_fetch_consistency in a transaction 2023-05-10 11:24:40 +09:00
pgtar.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
pgtime.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
port.h Avoid breaking SJIS encoding while de-backslashing Windows paths. 2025-01-29 14:24:36 -05:00
postgres.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
postgres_ext.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
postgres_fe.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
rusagestub.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
windowapi.h Update copyright for 2022 2022-01-07 19:04:57 -05:00