diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 03dfd2e7fa..534b72c36f 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -4161,29 +4161,28 @@ AlterTableGetLockLevel(List *cmds)
 			case AT_DisableTrig:
 			case AT_DisableTrigAll:
 			case AT_DisableTrigUser:
+			case AT_ColumnDefault:
+			case AT_CookedColumnDefault:
+			case AT_ReplicaIdentity:
+			case AT_AlterConstraint:
+			case AT_AddIdentity:
+			case AT_DropIdentity:
+			case AT_SetIdentity:
+			case AT_DropExpression:
+			case AT_SetCompression:
 				cmd_lockmode = ShareRowExclusiveLock;
 				break;
 
 				/*
-				 * These subcommands affect write operations only. XXX
-				 * Theoretically, these could be ShareRowExclusiveLock.
+				 * These subcommands appear to have various special cases.
 				 */
-			case AT_ColumnDefault:
-			case AT_CookedColumnDefault:
-			case AT_AlterConstraint:
 			case AT_AddIndex:	/* from ADD CONSTRAINT */
 			case AT_AddIndexConstraint:
-			case AT_ReplicaIdentity:
 			case AT_SetNotNull:
 			case AT_EnableRowSecurity:
 			case AT_DisableRowSecurity:
 			case AT_ForceRowSecurity:
 			case AT_NoForceRowSecurity:
-			case AT_AddIdentity:
-			case AT_DropIdentity:
-			case AT_SetIdentity:
-			case AT_DropExpression:
-			case AT_SetCompression:
 				cmd_lockmode = AccessExclusiveLock;
 				break;
 
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 8dcb00ac67..d35a7c9b51 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -2697,9 +2697,9 @@ select * from my_locks order by 1;
 rollback;
 begin; alter table alterlock alter column f2 set default 'x';
 select * from my_locks order by 1;
-  relname  |    max_lockmode     
------------+---------------------
- alterlock | AccessExclusiveLock
+  relname  |     max_lockmode      
+-----------+-----------------------
+ alterlock | ShareRowExclusiveLock
 (1 row)
 
 rollback;
