Re: BUG #18674: Partitioned table doesn't depend on access method it uses

Kirill Reshke <reshkekirill@gmail.com>

From: Kirill Reshke <reshkekirill@gmail.com>
To: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2024-10-27T07:53:45Z
Lists: pgsql-bugs

Attachments

Hi!

On Sat, 26 Oct 2024 at 19:27, PG Bug reporting form
<noreply@postgresql.org> wrote:
>
> The following bug has been logged on the website:
>
> Bug reference:      18674
> Logged by:          Alexander Lakhin
> Email address:      exclusion@gmail.com
> PostgreSQL version: 17.0
> Operating system:   Ubuntu 22.04
> Description:
>
> The following script:
> CREATE ACCESS METHOD ham TYPE TABLE HANDLER heap_tableam_handler;
> CREATE TABLE pt (a int) PARTITION BY LIST (a) USING ham;
> DROP ACCESS METHOD ham;
>
> ends successfully, with the access method dropped, though then:
> CREATE TABLE tp1 PARTITION OF pt FOR VALUES IN (1);
>
> fails with
> ERROR:  cache lookup failed for access method 16385
>
> Whilst
> CREATE TABLE t (a int) USING ham;
> DROP ACCESS METHOD ham;
>
> fails with
> ERROR:  cannot drop access method ham because other objects depend on it
> DETAIL:  table t depends on access method ham
> HINT:  Use DROP ... CASCADE to drop the dependent objects too.
>
> Reproduced starting from 374c7a229.
>

Nice catch!

Did you dig into reasons? I did a little...

After looking closely at the DefineRelation workflow, I discovered
that it is  `RelationBuildLocalRelation` responsibility to add
dependency between relation and its TAM. The bug arises from the fact
that RELKIND_HAS_TABLE_AM doesn't respect partitioned relations.
So, a trivial fix is attached.

Does it look good for you?

-- 
Best regards,
Kirill Reshke

Commits

  1. Fix dependency of partitioned table and table AM with CREATE TABLE .. USING