pgsql: pg_upgrade: Preserve relfilenodes and tablespace OIDs.

From: Robert Haas <rhaas(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: pg_upgrade: Preserve relfilenodes and tablespace OIDs.
Date: 2022-01-17 19:05:34
Message-ID: E1n9XJu-0004j2-8W@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

pg_upgrade: Preserve relfilenodes and tablespace OIDs.

Currently, database OIDs, relfilenodes, and tablespace OIDs can all
change when a cluster is upgraded using pg_upgrade. It seems better
to preserve them, because (1) it makes troubleshooting pg_upgrade
easier, since you don't have to do a lot of work to match up files
in the old and new clusters, (2) it allows 'rsync' to save bandwidth
when used to re-sync a cluster after an upgrade, and (3) if we ever
encrypt or sign blocks, we would likely want to use a nonce that
depends on these values.

This patch only arranges to preserve relfilenodes and tablespace
OIDs. The task of preserving database OIDs is left for another patch,
since it involves some complexities that don't exist in these cases.

Database OIDs have a similar issue, but there are some tricky points
in that case that do not apply to these cases, so that problem is left
for another patch.

Shruthi KC, based on an earlier patch from Antonin Houska, reviewed
and with some adjustments by me.

Discussion: http://postgr.es/m/CA+TgmoYgTwYcUmB=e8+hRHOFA0kkS6Kde85+UNdon6q7bt1niQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/9a974cbcba005256a19991203583a94b4f9a21a9

Modified Files
--------------
src/backend/bootstrap/bootparse.y | 3 +-
src/backend/catalog/heap.c | 63 ++++++++++---
src/backend/catalog/index.c | 23 ++++-
src/backend/commands/tablespace.c | 17 +++-
src/backend/utils/adt/pg_upgrade_support.c | 44 +++++++++
src/bin/pg_dump/pg_dump.c | 104 ++++++++++++++-------
src/bin/pg_dump/pg_dumpall.c | 3 +
src/bin/pg_upgrade/info.c | 31 +-----
src/bin/pg_upgrade/pg_upgrade.c | 13 +--
src/bin/pg_upgrade/pg_upgrade.h | 10 +-
src/bin/pg_upgrade/relfilenode.c | 6 +-
src/include/catalog/binary_upgrade.h | 5 +
src/include/catalog/catversion.h | 2 +-
src/include/catalog/heap.h | 3 +-
src/include/catalog/pg_proc.dat | 16 ++++
.../spgist_name_ops/expected/spgist_name_ops.out | 12 ++-
16 files changed, 247 insertions(+), 108 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2022-01-17 19:09:28 pgsql: Move 027_stream_regress.pl's output to tmp_check.
Previous Message Thomas Munro 2022-01-17 18:47:48 Re: pgsql: Test replay of regression tests, attempt II.

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2022-01-17 19:05:36 Re: preserving db/ts/relfilenode OIDs across pg_upgrade (was Re: storing an explicit nonce)
Previous Message Robert Haas 2022-01-17 19:05:17 Re: slowest tap tests - split or accelerate?