I haven't produced a real problem in a small test case (yet), but I convinced myself that it's wrong enough to be called a bug.
If you add the following assertion to BufferAlloc: Assert(relpersistence == RELPERSISTENCE_PERMANENT || relpersistence == RELPERSISTENCE_UNLOGGED || relpersistence == RELPERSISTENCE_TEMP); (which seems like a reasonable assertion to me), then do: create table foo(i int); insert into foo values(1); vacuum foo; vacuum foo; insert into foo values(2); Then do an immediate shutdown, then restart, you hit the assertion. The problem is using CreateFakeRelcacheEntry, which has the following comment: Only the fields related to physical storage, like rd_rel, are initialized, so the fake entry is only usable in low-level operations like ReadBuffer(). That doesn't seem right, because ReadBuffer needs relpersistence set. One of the consequences is that you can get buffers with the wrong flags set; in particular, missing BM_PERMANENT, which seems like it could be a serious problem. Are there other areas where we might have similar problems? Regards, Jeff Davis -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs