Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 5ad672f

Browse files
committed
Fix ALTER DEFAULT PRIVILEGES with duplicated objects
Specifying duplicated objects in this command would lead to unique constraint violations in pg_default_acl or "tuple already updated by self" errors. Similarly to GRANT/REVOKE, increment the command ID after each subcommand processing to allow this case to work transparently. A regression test is added by tweaking one of the existing queries of privileges.sql to stress this case. Reported-by: Andrus Author: Michael Paquier Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/ae2a7dc1-9d71-8cba-3bb9-e4cb7eb1f44e@hot.ee Backpatch-through: 9.5
1 parent 6253159 commit 5ad672f

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

src/backend/catalog/aclchk.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1391,6 +1391,9 @@ SetDefaultACL(InternalDefaultACL *iacls)
13911391
ReleaseSysCache(tuple);
13921392

13931393
table_close(rel, RowExclusiveLock);
1394+
1395+
/* prevent error when processing duplicate objects */
1396+
CommandCounterIncrement();
13941397
}
13951398

13961399

src/test/regress/expected/privileges.out

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1617,7 +1617,8 @@ SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); -
16171617
f
16181618
(1 row)
16191619

1620-
ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT SELECT ON TABLES TO public;
1620+
-- placeholder for test with duplicated schema and role names
1621+
ALTER DEFAULT PRIVILEGES IN SCHEMA testns,testns GRANT SELECT ON TABLES TO public,public;
16211622
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'SELECT'); -- no
16221623
has_table_privilege
16231624
---------------------

src/test/regress/sql/privileges.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,7 +961,8 @@ CREATE TABLE testns.acltest1 (x int);
961961
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'SELECT'); -- no
962962
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); -- no
963963

964-
ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT SELECT ON TABLES TO public;
964+
-- placeholder for test with duplicated schema and role names
965+
ALTER DEFAULT PRIVILEGES IN SCHEMA testns,testns GRANT SELECT ON TABLES TO public,public;
965966

966967
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'SELECT'); -- no
967968
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); -- no

0 commit comments

Comments
 (0)