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: Fujii Masao <masao.fujii@oss.nttdata.com>
Cc: Fujii Masao <masao.fujii@gmail.com>, Dilip Kumar
<dilipbalaut@gmail.com>, Richard Guo <guofenglinux@gmail.com>, PostgreSQL
Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-05-29T02:46:41Z
Lists: pgsql-hackers
Attachments
- v4-0001-Fix-assertion-failure-when-pg_prewarm-is-run-on-o.patch (text/x-diff) patch v4-0001
- v4-0002-Fix-error-message-for-partitioned-indexes-in-amch.patch (text/x-diff) patch v4-0002
- v4-0003-Improve-index_checkable-in-amcheck.patch (text/x-diff) patch v4-0003
Thanks for your feedback. I've attached the updated patches.
On 2025-05-28 10:10, Fujii Masao wrote:
> On 2025/05/26 16:55, ikedamsh wrote:
>> 2025/05/21 12:54 Fujii Masao <masao(dot)fujii(at)gmail(dot)com>:
>> Regarding the 0002 patch:
>>
>> - errdetail("Relation \"%s\" is a %s index.",
>> - RelationGetRelationName(rel), NameStr(((Form_pg_am)
>> GETSTRUCT(amtuprel))->amname))));
>> + errdetail("Relation \"%s\" is a %s %sindex.",
>> + RelationGetRelationName(rel), NameStr(((Form_pg_am)
>> GETSTRUCT(amtuprel))->amname),
>> + (rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) ?
>> "partitioned " : "")));
>>
>> Instead of manually building the message, how about using
>> errdetail_relkind_not_supported()?
>> It would be more consistent with similar error reporting
>> elsewhere.
>>
>> I was thinking of using errdetail_relkind_not_supported(),
>> but I’m reconsidering building the message manually
>> since the AM name seems to be important for the error.
>> What do you think?
>
> Understood.
> I was trying to better understand the error message, as I found
> the following is still a bit confusing for users. However, I don't
> have a better suggestion at the moment, so I'm okay with
> the proposed change.
>
> ERROR: expected "btree" index as targets for verification
> DETAIL: Relation "pgbench_accounts_pkey" is a btree partitioned
What do you think about adding new error messages specifically for
partitioned
indexes?
If the target is a partitioned index, the error messages would be:
ERROR: expected index as targets for verification
DETAIL: This operation is not supported for partitioned indexes.
If the target is an index, but its access method is not supported, the
error
messages would be:
ERROR: expected "btree" index as targets for verification
DETAIL: Relation "bttest_a_brin_idx" is a brin index.
> This is not directly relation to your proposal, but while reading
> the index_checkable() function, I noticed that ReleaseSysCache()
> is not called after SearchSysCache1(). Shouldn't we call
> ReleaseSysCache() here? Alternatively, we could use get_am_name()
> instead of SearchSysCache1(), which might be simpler.
Agreed.
> I also observed that the error code ERRCODE_FEATURE_NOT_SUPPORTED
> is used when the relation is not the expected type in
> index_checkable().
> However, based on similar cases (e.g., pgstattuple), it seems that
> ERRCODE_WRONG_OBJECT_TYPE might be more appropriate in this situation.
> Thought?
Agreed. I also change the error code to
ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE
when the index is not valid.
Regards,
--
Masahiro Ikeda
NTT DATA Japan Corporation
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
amcheck: Improve error message for partitioned index target.
- 88a658a42e1b 19 (unreleased) landed
-
Fix assertion failure in pg_prewarm() on objects without storage.
- b64c585fde77 17.6 landed
- 3c4d7557e03b 18.0 landed
-
Prevent assertion failure in contrib/pg_freespacemap.
- 4623d71443de 18.0 cited
-
Don't try to open visibilitymap when analyzing a foreign table
- 049ef3398d05 17.0 cited