]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Remove misleading hint for "unexpected data beyond EOF" error.
authorRobert Haas <rhaas@postgresql.org>
Mon, 28 Jul 2025 15:15:47 +0000 (11:15 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 28 Jul 2025 15:15:47 +0000 (11:15 -0400)
Commit ffae5cc5a6024b4e25ec920ed5c4dfac649605f8 added this hint in 2006,
but it's now obsolete and doesn't reflect what users should really check
in this situation. We were not able to agree on a new hint, so just delete
the existing one and update the comments to mention one possibility that
is known to cause problems of this kind: something other than PostgreSQL
is modifying files in the PostgreSQL data directory.

Author: Jakub Wartak <jakub.wartak@enterprisedb.com>
Reviewed-by: Robert Haas <rhaas@postgresql.org>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Christoph Berg <myon@debian.org>
Discussion: https://postgr.es/m/CAKZiRmxNbcaL76x=09Sxf7aUmrRQJBf8drzDdUHo+j9_eM+VMg@mail.gmail.com

src/backend/storage/buffer/bufmgr.c

index 6afdd28dba6f2dc137a1a2a56d4183e63feb740d..9c6fe587ec94032b0b509cd4af1a9328cbb30866 100644 (file)
@@ -2743,11 +2743,9 @@ ExtendBufferedRelShared(BufferManagerRelation bmr,
                 * because mdread doesn't complain about reads beyond EOF (when
                 * zero_damaged_pages is ON) and so a previous attempt to read a block
                 * beyond EOF could have left a "valid" zero-filled buffer.
-                * Unfortunately, we have also seen this case occurring because of
-                * buggy Linux kernels that sometimes return an lseek(SEEK_END) result
-                * that doesn't account for a recent write. In that situation, the
-                * pre-existing buffer would contain valid data that we don't want to
-                * overwrite.  Since the legitimate cases should always have left a
+                *
+                * This has also been observed when relation was overwritten by external
+                * process. Since the legitimate cases should always have left a
                 * zero-filled buffer, complain if not PageIsNew.
                 */
                if (existing_id >= 0)
@@ -2778,8 +2776,7 @@ ExtendBufferedRelShared(BufferManagerRelation bmr,
                                ereport(ERROR,
                                                (errmsg("unexpected data beyond EOF in block %u of relation %s",
                                                                existing_hdr->tag.blockNum,
-                                                               relpath(bmr.smgr->smgr_rlocator, fork).str),
-                                                errhint("This has been seen to occur with buggy kernels; consider updating your system.")));
+                                                               relpath(bmr.smgr->smgr_rlocator, fork).str)));
 
                        /*
                         * We *must* do smgr[zero]extend before succeeding, else the page