pgsql: Fix pg_depend entry to AMs after ALTER TABLE .. SET ACCESS METHO

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix pg_depend entry to AMs after ALTER TABLE .. SET ACCESS METHO
Date: 2023-06-29 22:50:05
Message-ID: E1qF0Sk-00162A-1K@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix pg_depend entry to AMs after ALTER TABLE .. SET ACCESS METHOD

ALTER TABLE .. SET ACCESS METHOD was not registering a dependency to the
new access method with the relation altered in its rewrite phase, making
possible the drop of an access method even if there are relations that
depend on it. During the rewrite, a temporary relation is created to
build the new relation files before swapping the new and old files, and,
while the temporary relation was registering a correct dependency to the
new AM, the old relation did not do that. A dependency on the access
method is added when the relation files are swapped, which is the point
where pg_class is updated.

Materialized views and tables use the same code path, hence both were
impacted.

Backpatch down to 15, where this command has been introduced.

Reported-by: Alexander Lakhin
Reviewed-by: Nathan Bossart, Andres Freund
Discussion: https://postgr.es/m/18000-9145c25b1af475ca@postgresql.org
Backpatch-through: 15

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/97d89101045fac8cb36f4ef6c08526ea0841a596

Modified Files
--------------
src/backend/commands/cluster.c | 29 +++++++++++++++++++++++++++++
src/test/regress/expected/create_am.out | 29 +++++++++++++++++++++++++++++
src/test/regress/sql/create_am.sql | 18 ++++++++++++++++++
3 files changed, 76 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message noreply 2023-06-29 22:55:25 pgsql: Branch REL_16_STABLE was created
Previous Message Nathan Bossart 2023-06-29 20:29:40 Re: pgsql: Fix search_path to a safe value during maintenance operations.