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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy