repro_beyond_EOF_error.txt

text/plain

Filename: repro_beyond_EOF_error.txt
Type: text/plain
Part: 0
Message: Better HINT message for "unexpected data beyond EOF"
postgres@postgres:1234 : 8182 # create table t as select i, repeat(md5(i::text), 100) as txt  from generate_series(1 , 100000) i;
SELECT 100000
postgres@postgres:1234 : 8182 # analyze t;
ANALYZE
postgres@postgres:1234 : 8182 # select relfilenode, oid from pg_class where relname = 't';
 relfilenode |  oid
-------------+-------
       16387 | 16387
(1 row)

postgres@postgres:1234 : 8182 # select pg_relation_filepath('t'::regclass);
 pg_relation_filepath
----------------------
 base/5/16387
(1 row)

postgres@postgres:1234 : 8182 # \! find /tmp/pg18 -ls | grep 16387
  1584697      8 -rw-------   1 postgres postgres     8192 Mar 25 15:44 /tmp/pg18/base/5/16387_vm
  1590939  11780 -rw-------   1 postgres postgres 12058624 Mar 25 15:43 /tmp/pg18/base/5/16387
  1590944     24 -rw-------   1 postgres postgres    24576 Mar 25 15:44 /tmp/pg18/base/5/16387_fsm
postgres@postgres:1234 : 8182 # \! cp /tmp/pg18/base/5/16387* /tmp/
postgres@postgres:1234 : 8182 # insert into t select i, repeat(md5(i::text), 100) as txt  from generate_series(500000, 600000) i;
INSERT 0 100001
postgres@postgres:1234 : 8182 # \! mkdir /tmp/blah
postgres@postgres:1234 : 8182 # \! mv /tmp/pg18/base/5/16387* /tmp/blah
postgres@postgres:1234 : 8182 # \! cp /tmp/16387* /tmp/pg18/base/5/
postgres@postgres:1234 : 8182 # \! find /tmp/pg18 -ls | grep 16387
  1591007      8 -rw-------   1 postgres postgres     8192 Mar 25 15:45 /tmp/pg18/base/5/16387_vm
  1590947  11776 -rw-------   1 postgres postgres 12058624 Mar 25 15:45 /tmp/pg18/base/5/16387
  1590948     24 -rw-------   1 postgres postgres    24576 Mar 25 15:45 /tmp/pg18/base/5/16387_fsm
postgres@postgres:1234 : 8182 # select count(*) from t;
 count
--------
 200001
(1 row)

postgres@postgres:1234 : 8182 #
\q
postgres@hive:~$  psql -p 1234 -h /tmp
psql (17.2 (Debian 17.2-1.pgdg110+1), server 18devel)
WARNING: psql major version 17, server major version 18.
         Some psql features might not work.
Type "help" for help.

postgres@postgres:1234 : 8248 # select count(*) from t;
 count
--------
 103040
(1 row)

postgres@postgres:1234 : 8248 # vacuum t;
VACUUM
postgres@postgres:1234 : 8248 # insert into t select i, repeat(md5(i::text), 100) as txt  from generate_series(700000, 800000) i;
ERROR:  unexpected data beyond EOF in block 1472 of relation base/5/16387
HINT:  This has been seen to occur with buggy kernels; consider updating your system.