Re: Assertion failure in smgr.c when using pg_prewarm with partitioned tables

Masahiro Ikeda <ikedamsh@oss.nttdata.com>

From: Masahiro Ikeda <ikedamsh@oss.nttdata.com>
To: Richard Guo <guofenglinux@gmail.com>
Cc: Dilip Kumar <dilipbalaut@gmail.com>, Fujii Masao <masao.fujii@oss.nttdata.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-05-16T06:21:11Z
Lists: pgsql-hackers

Attachments

Thank you for your comments!

I updated the patch to use RELKIND_HAS_STORAGE() as done in
commit 4623d7144. Please see the v2-0001 patch for the changes.

On 2025-05-15 19:57, Richard Guo wrote:
> +1.  FWIW, not long ago we fixed a similar Assert failure in
> contrib/pg_freespacemap by verifying RELKIND_HAS_STORAGE() before
> trying to access the storage (see 4623d7144).  Wondering if there are
> other similar issues elsewhere in contrib ...

I tested all contrib functions that take regclass arguments (see
attached test.sql and test_result.txt). The result shows that only
pg_prewarm() can lead to the assertion failure.


However, I found that amcheck's error messages can be misleading
when run on partitioned indexes.

For example, on the master branch, amcheck (e.g., bt_index_check 
function)
shows this error:

  > ERROR:  expected "btree" index as targets for verification
  > DETAIL:  Relation "pgbench_accounts_pkey" is a btree index.

This message says it expects a "btree" index, yet also states the 
relation
is a "btree" index, which can seem contradictory. The actual issue is 
that
the index is a btree partitioned index, but this detail is missing, 
causing
possible confusion.

Therefore, I thought it would be better to update the detailed message
as shown in the v2-0002 patch:

* master with 0002 patch
  > ERROR:  expected "btree" index as targets for verification
  > DETAIL:  Relation "pgbench_accounts_pkey" is a btree partitioned 
index.


Regards,
-- 
Masahiro Ikeda
NTT DATA CORPORATION

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. amcheck: Improve error message for partitioned index target.

  2. Fix assertion failure in pg_prewarm() on objects without storage.

  3. Prevent assertion failure in contrib/pg_freespacemap.

  4. Don't try to open visibilitymap when analyzing a foreign table