Re: making relfilenodes 56 bits
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: Dilip Kumar <dilipbalaut@gmail.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>, Andres Freund <andres@anarazel.de>, Heikki Linnakangas <hlinnaka@iki.fi>, Thomas Munro <thomas.munro@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-08-30T15:53:44Z
Lists: pgsql-hackers
On Tue, Aug 30, 2022 at 8:45 AM Dilip Kumar <dilipbalaut@gmail.com> wrote: > I have found one more issue with this approach of rewriting the > conflicting table. Earlier I thought we could do the conflict > checking and rewriting inside create_new_objects() right before the > restore command. But after implementing (while testing) this I > realized that we DROP and CREATE the database while restoring the dump > that means it will again generate the conflicting system tables. So > theoretically the rewriting should go in between the CREATE DATABASE > and restoring the object but as of now both create database and > restoring other objects are part of a single dump file. I haven't yet > analyzed how feasible it is to generate the dump in two parts, first > part just to create the database and in second part restore the rest > of the object. > > Thoughts? Well, that's very awkward. It doesn't seem like it would be very difficult to teach pg_upgrade to call pg_restore without --clean and just do the drop database itself, but that doesn't really help, because pg_restore will in any event be creating the new database. That doesn't seem like something we can practically refactor out, because only pg_dump knows what properties to use when creating the new database. What we could do is have the dump include a command like SELECT pg_binary_upgrade_move_things_out_of_the_way(some_arguments_here), but that doesn't really help very much, because passing the whole list of relfilenode values from the old database seems pretty certain to be a bad idea. The whole idea here was that we'd be able to build a hash table on the new database's system table OIDs, and it seems like that's not going to work. We could try to salvage some portion of the idea by making pg_binary_upgrade_move_things_out_of_the_way() take a more restricted set of arguments, like the smallest and largest relfilenode values from the old database, and then we'd just need to move things that overlap. But that feels pretty hit-or-miss to me as to whether it actually avoids any work, and pg_binary_upgrade_move_things_out_of_the_way() might also be annoying to write. So perhaps we have to go back to the drawing board here. -- Robert Haas EDB: http://www.enterprisedb.com
Commits
-
Fix typos in comments, code and documentation
- 33ab0a2a527e 16.0 cited
-
Increase width of RelFileNumbers from 32 bits to 56 bits.
- 05d4cbf9b6ba 16.0 landed
-
Move RelFileNumber declarations to common/relpath.h.
- 2f47715cc864 16.0 landed
-
Include RelFileLocator fields individually in BufferTag.
- 82ac34db2036 16.0 landed
-
Convert macros to static inline functions (buf_internals.h)
- 3ac88fddd92c 16.0 landed
-
Remove the restriction that the relmap must be 512 bytes.
- d8cd0c6c95c0 16.0 landed
-
Change internal RelFileNode references to RelFileNumber or RelFileLocator.
- b0a55e43299c 16.0 landed
-
Reorder subskiplsn in pg_subscription to avoid alignment issues.
- 79b716cfb7a1 15.0 cited
-
Fix DROP {DATABASE,TABLESPACE} on Windows.
- 4eb2176318d0 15.0 cited
-
Restructure smgr API as per recent proposal. smgr no longer depends on
- 87bd95638552 8.0.0 cited