Skip to content

Commit 21378e1

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 a0efda8 commit 21378e1

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
@@ -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

Lines changed: 2 additions & 1 deletion
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

Lines changed: 2 additions & 1 deletion
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)
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