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

Commit 31e0f9d

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 188cd4f commit 31e0f9d

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

src/backend/catalog/aclchk.c

+3
Original file line numberDiff line numberDiff line change
@@ -1365,6 +1365,9 @@ SetDefaultACL(InternalDefaultACL *iacls)
13651365
ReleaseSysCache(tuple);
13661366

13671367
table_close(rel, RowExclusiveLock);
1368+
1369+
/* prevent error when processing duplicate objects */
1370+
CommandCounterIncrement();
13681371
}
13691372

13701373

src/test/regress/expected/privileges.out

+2-1
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,8 @@ SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); -
16491649
f
16501650
(1 row)
16511651

1652-
ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT SELECT ON TABLES TO public;
1652+
-- placeholder for test with duplicated schema and role names
1653+
ALTER DEFAULT PRIVILEGES IN SCHEMA testns,testns GRANT SELECT ON TABLES TO public,public;
16531654
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'SELECT'); -- no
16541655
has_table_privilege
16551656
---------------------

src/test/regress/sql/privileges.sql

+2-1
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,8 @@ CREATE TABLE testns.acltest1 (x int);
985985
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'SELECT'); -- no
986986
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); -- no
987987

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

990991
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'SELECT'); -- no
991992
SELECT has_table_privilege('regress_priv_user1', 'testns.acltest1', 'INSERT'); -- no

0 commit comments

Comments
 (0)