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

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 fe8edbb commit 7dc3be9
Copy full SHA for 7dc3be9

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
@@ -1312,6 +1312,9 @@ SetDefaultACL(InternalDefaultACL *iacls)
13121312
ReleaseSysCache(tuple);
13131313

13141314
heap_close(rel, RowExclusiveLock);
1315+
1316+
/* prevent error when processing duplicate objects */
1317+
CommandCounterIncrement();
13151318
}
13161319

13171320

‎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
@@ -1562,7 +1562,8 @@ SELECT has_table_privilege('regress_user1', 'testns.acltest1', 'INSERT'); -- no
15621562
f
15631563
(1 row)
15641564

1565-
ALTER DEFAULT PRIVILEGES IN SCHEMA testns GRANT SELECT ON TABLES TO public;
1565+
-- placeholder for test with duplicated schema and role names
1566+
ALTER DEFAULT PRIVILEGES IN SCHEMA testns,testns GRANT SELECT ON TABLES TO public,public;
15661567
SELECT has_table_privilege('regress_user1', 'testns.acltest1', 'SELECT'); -- no
15671568
has_table_privilege
15681569
---------------------

‎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
@@ -933,7 +933,8 @@ CREATE TABLE testns.acltest1 (x int);
933933
SELECT has_table_privilege('regress_user1', 'testns.acltest1', 'SELECT'); -- no
934934
SELECT has_table_privilege('regress_user1', 'testns.acltest1', 'INSERT'); -- no
935935

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

938939
SELECT has_table_privilege('regress_user1', 'testns.acltest1', 'SELECT'); -- no
939940
SELECT has_table_privilege('regress_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.