]> granicus.if.org Git - postgresql/commitdiff
Add missing ALTER USER variants
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 4 Aug 2017 00:49:07 +0000 (20:49 -0400)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 4 Aug 2017 00:55:44 +0000 (20:55 -0400)
ALTER USER ... SET did not support all the syntax variants of ALTER ROLE
...  SET.

Reported-by: Pavel Golub <pavel@microolap.com>
doc/src/sgml/ref/alter_user.sgml
src/backend/parser/gram.y
src/test/regress/expected/rolenames.out

index 114572c5cc526966f9f6e722c72616c87ceb0764..95637ccc8448ac2806f23203230afc2f2f1cf871 100644 (file)
@@ -39,10 +39,10 @@ ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> [ WIT
 
 ALTER USER <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 
-ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
-ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> SET <replaceable>configuration_parameter</replaceable> FROM CURRENT
-ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> RESET <replaceable>configuration_parameter</replaceable>
-ALTER USER <replaceable class="PARAMETER">role_specification</replaceable> RESET ALL
+ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT }
+ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> FROM CURRENT
+ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] RESET <replaceable>configuration_parameter</replaceable>
+ALTER USER { <replaceable class="PARAMETER">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="PARAMETER">database_name</replaceable> ] RESET ALL
 
 <phrase>where <replaceable class="PARAMETER">role_specification</replaceable> can be:</phrase>
 
index 67e9a1a0c7dbeae571fa22af4372f66d1dbca765..d10411a987e9a6d574492dac9196c489bd633c63 100644 (file)
@@ -1116,12 +1116,20 @@ AlterUserStmt:
 
 
 AlterUserSetStmt:
-                       ALTER USER RoleSpec SetResetClause
+                       ALTER USER RoleSpec opt_in_database SetResetClause
                                {
                                        AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);
                                        n->role = $3;
-                                       n->database = NULL;
-                                       n->setstmt = $4;
+                                       n->database = $4;
+                                       n->setstmt = $5;
+                                       $$ = (Node *)n;
+                               }
+                       | ALTER USER ALL opt_in_database SetResetClause
+                               {
+                                       AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);
+                                       n->role = NULL;
+                                       n->database = $4;
+                                       n->setstmt = $5;
                                        $$ = (Node *)n;
                                }
                        ;
index 3ad007c55e936784984c4711552f7e2c64ffa4e0..437333153df5b53e98f87f7b49f713df4077565e 100644 (file)
@@ -298,9 +298,9 @@ ERROR:  syntax error at or near "CURRENT_ROLE"
 LINE 1: ALTER USER CURRENT_ROLE WITH LOGIN;
                    ^
 ALTER USER ALL WITH REPLICATION; -- error
-ERROR:  syntax error at or near "ALL"
+ERROR:  syntax error at or near "WITH"
 LINE 1: ALTER USER ALL WITH REPLICATION;
-                   ^
+                       ^
 ALTER USER SESSION_ROLE WITH NOREPLICATION; -- error
 ERROR:  role "session_role" does not exist
 ALTER USER PUBLIC WITH NOREPLICATION; -- error
@@ -380,9 +380,6 @@ ALTER USER SESSION_USER SET application_name to 'BAR';
 ALTER USER "current_user" SET application_name to 'FOOFOO';
 ALTER USER "Public" SET application_name to 'BARBAR';
 ALTER USER ALL SET application_name to 'SLAP';
-ERROR:  syntax error at or near "ALL"
-LINE 1: ALTER USER ALL SET application_name to 'SLAP';
-                   ^
 SELECT * FROM chksetconfig();
  db  |     role     |  rolkeyword  |         setconfig         
 -----+--------------+--------------+---------------------------
@@ -407,9 +404,6 @@ ALTER USER SESSION_USER RESET application_name;
 ALTER USER "current_user" RESET application_name;
 ALTER USER "Public" RESET application_name;
 ALTER USER ALL RESET application_name;
-ERROR:  syntax error at or near "ALL"
-LINE 1: ALTER USER ALL RESET application_name;
-                   ^
 SELECT * FROM chksetconfig();
  db | role | rolkeyword | setconfig 
 ----+------+------------+-----------