Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 31e0f9d

Browse filesBrowse 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
Copy full SHA for 31e0f9d

File tree

Expand file treeCollapse file tree

3 files changed

+7
-2
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+7
-2
lines changed

‎src/backend/catalog/aclchk.c

Copy file name to clipboardExpand all lines: src/backend/catalog/aclchk.c
+3Lines 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

Copy file name to clipboardExpand all lines: src/test/regress/expected/privileges.out
+2-1Lines 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

Copy file name to clipboardExpand all lines: src/test/regress/sql/privileges.sql
+2-1Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.