Thread: pgsql: Ensure correct lock level is used in ALTER ... RENAME

pgsql: Ensure correct lock level is used in ALTER ... RENAME

From
Alvaro Herrera
Date:
Ensure correct lock level is used in ALTER ... RENAME

Commit 1b5d797cd4f7 intended to relax the lock level used to rename
indexes, but inadvertently allowed *any* relation to be renamed with a
lowered lock level, as long as the command is spelled ALTER INDEX.
That's undesirable for other relation types, so retry the operation with
the higher lock if the relation turns out not to be an index.

After this fix, ALTER INDEX <sometable> RENAME will require access
exclusive lock, which it didn't before.

Author: Nathan Bossart <bossartn@amazon.com>
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Reported-by: Onder Kalaci <onderk@microsoft.com>
Discussion: https://postgr.es/m/PH0PR21MB1328189E2821CDEC646F8178D8AE9@PH0PR21MB1328.namprd21.prod.outlook.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c2c618ff1137f9ef58827f57e4ec0f97453e454e

Modified Files
--------------
src/backend/commands/tablecmds.c          | 62 ++++++++++++++++++++++++-------
src/test/regress/expected/alter_table.out | 48 ++++++++++++++++++++++++
src/test/regress/sql/alter_table.sql      | 31 ++++++++++++++++
3 files changed, 127 insertions(+), 14 deletions(-)


Re: pgsql: Ensure correct lock level is used in ALTER ... RENAME

From
Michael Paquier
Date:
Hi Alvaro,

On Tue, Oct 19, 2021 at 10:11:24PM +0000, Alvaro Herrera wrote:
> Ensure correct lock level is used in ALTER ... RENAME
>
> Commit 1b5d797cd4f7 intended to relax the lock level used to rename
> indexes, but inadvertently allowed *any* relation to be renamed with a
> lowered lock level, as long as the command is spelled ALTER INDEX.
> That's undesirable for other relation types, so retry the operation with
> the higher lock if the relation turns out not to be an index.
>
> After this fix, ALTER INDEX <sometable> RENAME will require access
> exclusive lock, which it didn't before.

hippopotamus and jay are complaining that this commit has introduced a
test with ordering issues:
 ORDER BY relation::regclass::text;
             relation            |        mode
 --------------------------------+---------------------
- alter_idx_rename_test_2        | AccessExclusiveLock
  alter_idx_rename_test_parted_2 | AccessExclusiveLock
+ alter_idx_rename_test_2        | AccessExclusiveLock
 (2 rows)

https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=hippopotamus&dt=2021-10-19%2023%3A43%3A14
--
Michael

Attachment

Re: pgsql: Ensure correct lock level is used in ALTER ... RENAME

From
Alvaro Herrera
Date:
Hi,

On 2021-Oct-20, Michael Paquier wrote:

> hippopotamus and jay are complaining that this commit has introduced a
> test with ordering issues:
>  ORDER BY relation::regclass::text;

Oh, I forgot that we need a COLLATE clause there.  Will fix, thanks ...


-- 
Álvaro Herrera              Valdivia, Chile  —  https://www.EnterpriseDB.com/
"No hay ausente sin culpa ni presente sin disculpa" (Prov. francés)