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-27T20:23:23Z
Lists: pgsql-bugs
Attachments
- v2-0001-Change-RELKIND_HAS_TABLE_AM-to-support-partitione.patch (application/octet-stream) patch v2-0001
On Sun, 27 Oct 2024 at 12:53, Kirill Reshke <reshkekirill@gmail.com> wrote: > > 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 As mentioned by Alexander off-list, v1 patch actually fails in a lot of regression tests... My bad. Seems that simply changing RELKIND_HAS_TABLE_AM marco is too invasive. However, I will make another try. In v2 version, regression tests still fail, i will adjust them, if patching this way is the right approach to fix the problem.. script provided by Alexander: 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; now gives the correct output. -- 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