Re: ALTER TABLE SET ACCESS METHOD on partitioned tables
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Justin Pryzby <pryzby@telsasoft.com>, Alexander Lakhin <exclusion@gmail.com>, Peter Eisentraut <peter@eisentraut.org>, Soumyadeep Chakraborty <soumyadeep2007@gmail.com>, Zhihong Yu <zyu@yugabyte.com>, pgsql-hackers@postgresql.org, Ashwin Agrawal <ashwinstar@gmail.com>, vanjared@vmware.com
Date: 2024-04-18T00:42:08Z
Lists: pgsql-hackers
Attachments
- v2-0001-Set-properly-table-AMs-of-partitioned-tables-in-p.patch (text/x-diff) patch v2-0001
On Wed, Apr 17, 2024 at 10:31:52AM +0200, Alvaro Herrera wrote: > On 2024-Apr-17, Michael Paquier wrote: >> Yeah, that would be easy enough to track but I was wondering about >> adding the relkind instead. Still, one thing that I found confusing >> is the dump generated in this case, as it would mix the SET and the >> ALTER TABLE commands so one reading the dumps may wonder why the SET >> has no effect for a CREATE TABLE PARTITION OF without USING. Perhaps >> that's fine and I just worry too much ;) > > Hmm, maybe we should do a RESET of default_table_access_method before > printing the CREATE TABLE to avoid the confusion. A hard reset would make the business around currTableAM that decides when to generate the SET default_table_access_method queries slightly more complicated, while increasing the number of queries run on the server. >> The extra ALTER commands need to be generated after the object >> definitions, so we'd need a new subroutine similar to >> _selectTableAccessMethod() like a _selectTableAccessMethodNoStorage(). >> Or grouping both together is just simpler? > > I think there should be two routines, since _select* routines just print > a SET command; maybe the new one would be _printAlterTableAM() or > something like that. Having _select() print an ALTER TABLE command > depending on relkind (or the boolean flag) would be confusing, I think. Fine by me to use two routines to generate the two different commands. I am finishing with the attached for now, making dumps, restores and upgrades work happily as far as I've tested. I was also worrying about a need to dump the protocol version to be able to track the relkind in the toc entries, but a45c78e3284b has already done one. The difference in AM handling between relations without storage and relations with storage pushes the relkind logic more within the internals of pg_backup_archiver.c. What do you think? -- Michael
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add information about access method for partitioned relations in \dP+
- 978f38c771fb 18.0 landed
-
Fix dumps of partitioned tables with table AMs
- f46bee346c3b 17.0 landed
-
Don't use the pg_am system catalog in new test
- 13b3b62746ec 17.0 landed
-
ALTER TABLE: rework determination of access method ID
- e2395cdbe83a 17.0 landed
-
Allow specifying an access method for partitioned tables
- 374c7a229042 17.0 landed
-
Review wording on tablespaces w.r.t. partitioned tables
- ea299d782511 15.7 landed
- e6c4e01bf440 16.3 landed
- a0390f6ca6c7 17.0 landed
- 58efabdc0ce9 12.19 landed
- 520e7afa5732 13.15 landed
- 33bfbef1d60f 14.12 landed
-
Add support for DEFAULT in ALTER TABLE .. SET ACCESS METHOD
- d61a6cad6418 17.0 landed
-
Update comment of AlterTableCmd->name in parsenodes.h
- 4f8c1e7aaf11 17.0 landed