Re: IndexAmRoutine aminsertcleanup function can be NULL?

Japin Li <japinli@hotmail.com>

From: Japin Li <japinli@hotmail.com>
To: Peter Smith <smithpb2250@gmail.com>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-07-17T05:34:42Z
Lists: pgsql-hackers
On Wed, 16 Jul 2025 at 10:08, Peter Smith <smithpb2250@gmail.com> wrote:
> Hi hackers.
>
> I happened to notice that many contrib module indexes do not implement
> an aminsertcleanup function:
> e.g. amroutine->aminsertcleanup = NULL;
>
> But, unlike many of the other interface functions, the aminsertcleanup
> does not say "/* can be NULL */" in the typedef struct IndexAmRoutine
> [1].
>
> What's going on there? Is it just an accidentally missing "/* can be
> NULL */" comment?
>

It appears commit c1ec02be1d79 is missing the comment.

> Same also in the documentation... [2]
>
> ======
> [1] https://github.com/postgres/postgres/blob/master/src/include/access/amapi.h
> [2] https://www.postgresql.org/docs/devel/index-api.html
>

How about asserting the existence of all required callbacks, similar to
GetTableAmRoutine()?

-- 
Regards,
Japin Li



Commits

  1. Add assertions for all the required index AM callbacks

  2. doc: Inform about aminsertcleanup optional NULLness

  3. Reuse BrinDesc and BrinRevmap in brininsert