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
- v1-0001-Change-RELKIND_HAS_TABLE_AM-to-support-partitione.patch (application/octet-stream) patch v1-0001
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
-
Fix dependency of partitioned table and table AM with CREATE TABLE .. USING
- bb584e831288 17.1 landed
- 49a23441ca7f 18.0 landed