mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Allow CURRENT_ROLE where CURRENT_USER is accepted
In the particular case of GRANTED BY, this is specified in the SQL standard. Since in PostgreSQL, CURRENT_ROLE is equivalent to CURRENT_USER, and CURRENT_USER is already supported here, adding CURRENT_ROLE is trivial. The other cases are PostgreSQL extensions, but for the same reason it also makes sense there. Reviewed-by: Vik Fearing <vik@postgresfriends.org> Reviewed-by: Asif Rehman <asifr.rehman@gmail.com> Reviewed-by: Alvaro Herrera <alvherre@2ndquadrant.com> Discussion: https://www.postgresql.org/message-id/flat/f2feac44-b4c5-f38f-3699-2851d6a76dc9%402ndquadrant.com
This commit is contained in:
		@@ -23,7 +23,7 @@ PostgreSQL documentation
 | 
				
			|||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> ) RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> ) RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> )
 | 
					ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> )
 | 
				
			||||||
                OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					                OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> ) SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					ALTER AGGREGATE <replaceable>name</replaceable> ( <replaceable>aggregate_signature</replaceable> ) SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<phrase>where <replaceable>aggregate_signature</replaceable> is:</phrase>
 | 
					<phrase>where <replaceable>aggregate_signature</replaceable> is:</phrase>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ PostgreSQL documentation
 | 
				
			|||||||
ALTER COLLATION <replaceable>name</replaceable> REFRESH VERSION
 | 
					ALTER COLLATION <replaceable>name</replaceable> REFRESH VERSION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER COLLATION <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER COLLATION <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER COLLATION <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER COLLATION <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER COLLATION <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					ALTER COLLATION <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER CONVERSION <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER CONVERSION <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER CONVERSION <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER CONVERSION <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER CONVERSION <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					ALTER CONVERSION <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ ALTER DATABASE <replaceable class="parameter">name</replaceable> [ [ WITH ] <rep
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ALTER DATABASE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER DATABASE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER DATABASE <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER DATABASE <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER DATABASE <replaceable class="parameter">name</replaceable> SET TABLESPACE <replaceable class="parameter">new_tablespace</replaceable>
 | 
					ALTER DATABASE <replaceable class="parameter">name</replaceable> SET TABLESPACE <replaceable class="parameter">new_tablespace</replaceable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
				
			|||||||
ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
					ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
				
			||||||
    VALIDATE CONSTRAINT <replaceable class="parameter">constraint_name</replaceable>
 | 
					    VALIDATE CONSTRAINT <replaceable class="parameter">constraint_name</replaceable>
 | 
				
			||||||
ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
					ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
				
			||||||
    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
					ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
				
			||||||
    RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
					    RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
				
			||||||
ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
					ALTER DOMAIN <replaceable class="parameter">name</replaceable>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ PostgreSQL documentation
 | 
				
			|||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> DISABLE
 | 
					ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> DISABLE
 | 
				
			||||||
ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> ENABLE [ REPLICA | ALWAYS ]
 | 
					ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> ENABLE [ REPLICA | ALWAYS ]
 | 
				
			||||||
ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
					ALTER EVENT TRIGGER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable>
 | 
				
			|||||||
    [ HANDLER <replaceable class="parameter">handler_function</replaceable> | NO HANDLER ]
 | 
					    [ HANDLER <replaceable class="parameter">handler_function</replaceable> | NO HANDLER ]
 | 
				
			||||||
    [ VALIDATOR <replaceable class="parameter">validator_function</replaceable> | NO VALIDATOR ]
 | 
					    [ VALIDATOR <replaceable class="parameter">validator_function</replaceable> | NO VALIDATOR ]
 | 
				
			||||||
    [ OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ]) ]
 | 
					    [ OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ]) ]
 | 
				
			||||||
ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER FOREIGN DATA WRAPPER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ ALTER FOREIGN TABLE [ IF EXISTS ] <replaceable class="parameter">name</replaceab
 | 
				
			|||||||
    SET WITHOUT OIDS
 | 
					    SET WITHOUT OIDS
 | 
				
			||||||
    INHERIT <replaceable class="parameter">parent_table</replaceable>
 | 
					    INHERIT <replaceable class="parameter">parent_table</replaceable>
 | 
				
			||||||
    NO INHERIT <replaceable class="parameter">parent_table</replaceable>
 | 
					    NO INHERIT <replaceable class="parameter">parent_table</replaceable>
 | 
				
			||||||
    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
    OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ])
 | 
					    OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ])
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="param
 | 
				
			|||||||
ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    RENAME TO <replaceable>new_name</replaceable>
 | 
					    RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER FUNCTION <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ ALTER GROUP <replaceable class="parameter">role_specification</replaceable> DROP
 | 
				
			|||||||
<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
					<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <replaceable class="parameter">role_name</replaceable>
 | 
					    <replaceable class="parameter">role_name</replaceable>
 | 
				
			||||||
 | 
					  | CURRENT_ROLE
 | 
				
			||||||
  | CURRENT_USER
 | 
					  | CURRENT_USER
 | 
				
			||||||
  | SESSION_USER
 | 
					  | SESSION_USER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER [ PROCEDURAL ] LANGUAGE <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER [ PROCEDURAL ] LANGUAGE <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER [ PROCEDURAL ] LANGUAGE <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER [ PROCEDURAL ] LANGUAGE <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER LARGE OBJECT <replaceable class="parameter">large_object_oid</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER LARGE OBJECT <replaceable class="parameter">large_object_oid</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,7 +44,7 @@ ALTER MATERIALIZED VIEW ALL IN TABLESPACE <replaceable class="parameter">name</r
 | 
				
			|||||||
    SET WITHOUT CLUSTER
 | 
					    SET WITHOUT CLUSTER
 | 
				
			||||||
    SET ( <replaceable class="parameter">storage_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] )
 | 
					    SET ( <replaceable class="parameter">storage_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] )
 | 
				
			||||||
    RESET ( <replaceable class="parameter">storage_parameter</replaceable> [, ... ] )
 | 
					    RESET ( <replaceable class="parameter">storage_parameter</replaceable> [, ... ] )
 | 
				
			||||||
    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ ALTER OPERATOR CLASS <replaceable>name</replaceable> USING <replaceable class="p
 | 
				
			|||||||
    RENAME TO <replaceable>new_name</replaceable>
 | 
					    RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER OPERATOR CLASS <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
					ALTER OPERATOR CLASS <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
				
			||||||
    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER OPERATOR CLASS <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
					ALTER OPERATOR CLASS <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
				
			||||||
    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER OPERATOR <replaceable>name</replaceable> ( { <replaceable>left_type</replaceable> | NONE } , { <replaceable>right_type</replaceable> | NONE } )
 | 
					ALTER OPERATOR <replaceable>name</replaceable> ( { <replaceable>left_type</replaceable> | NONE } , { <replaceable>right_type</replaceable> | NONE } )
 | 
				
			||||||
    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER OPERATOR <replaceable>name</replaceable> ( { <replaceable>left_type</replaceable> | NONE } , { <replaceable>right_type</replaceable> | NONE } )
 | 
					ALTER OPERATOR <replaceable>name</replaceable> ( { <replaceable>left_type</replaceable> | NONE } , { <replaceable>right_type</replaceable> | NONE } )
 | 
				
			||||||
    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@ ALTER OPERATOR FAMILY <replaceable>name</replaceable> USING <replaceable class="
 | 
				
			|||||||
    RENAME TO <replaceable>new_name</replaceable>
 | 
					    RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER OPERATOR FAMILY <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
					ALTER OPERATOR FAMILY <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
				
			||||||
    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER OPERATOR FAMILY <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
					ALTER OPERATOR FAMILY <replaceable>name</replaceable> USING <replaceable class="parameter">index_method</replaceable>
 | 
				
			||||||
    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ PostgreSQL documentation
 | 
				
			|||||||
ALTER POLICY <replaceable class="parameter">name</replaceable> ON <replaceable class="parameter">table_name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
					ALTER POLICY <replaceable class="parameter">name</replaceable> ON <replaceable class="parameter">table_name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER POLICY <replaceable class="parameter">name</replaceable> ON <replaceable class="parameter">table_name</replaceable>
 | 
					ALTER POLICY <replaceable class="parameter">name</replaceable> ON <replaceable class="parameter">table_name</replaceable>
 | 
				
			||||||
    [ TO { <replaceable class="parameter">role_name</replaceable> | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ]
 | 
					    [ TO { <replaceable class="parameter">role_name</replaceable> | PUBLIC | CURRENT_ROLE | CURRENT_USER | SESSION_USER } [, ...] ]
 | 
				
			||||||
    [ USING ( <replaceable class="parameter">using_expression</replaceable> ) ]
 | 
					    [ USING ( <replaceable class="parameter">using_expression</replaceable> ) ]
 | 
				
			||||||
    [ WITH CHECK ( <replaceable class="parameter">check_expression</replaceable> ) ]
 | 
					    [ WITH CHECK ( <replaceable class="parameter">check_expression</replaceable> ) ]
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="para
 | 
				
			|||||||
ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    RENAME TO <replaceable>new_name</replaceable>
 | 
					    RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER PROCEDURE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ ALTER PUBLICATION <replaceable class="parameter">name</replaceable> ADD TABLE [
 | 
				
			|||||||
ALTER PUBLICATION <replaceable class="parameter">name</replaceable> SET TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ] [, ...]
 | 
					ALTER PUBLICATION <replaceable class="parameter">name</replaceable> SET TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ] [, ...]
 | 
				
			||||||
ALTER PUBLICATION <replaceable class="parameter">name</replaceable> DROP TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ] [, ...]
 | 
					ALTER PUBLICATION <replaceable class="parameter">name</replaceable> DROP TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ] [, ...]
 | 
				
			||||||
ALTER PUBLICATION <replaceable class="parameter">name</replaceable> SET ( <replaceable class="parameter">publication_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] )
 | 
					ALTER PUBLICATION <replaceable class="parameter">name</replaceable> SET ( <replaceable class="parameter">publication_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] )
 | 
				
			||||||
ALTER PUBLICATION <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER PUBLICATION <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER PUBLICATION <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER PUBLICATION <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,7 @@ ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | A
 | 
				
			|||||||
<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
					<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <replaceable class="parameter">role_name</replaceable>
 | 
					    <replaceable class="parameter">role_name</replaceable>
 | 
				
			||||||
 | 
					  | CURRENT_ROLE
 | 
				
			||||||
  | CURRENT_USER
 | 
					  | CURRENT_USER
 | 
				
			||||||
  | SESSION_USER
 | 
					  | SESSION_USER
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
@@ -134,6 +135,7 @@ ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | A
 | 
				
			|||||||
     </varlistentry>
 | 
					     </varlistentry>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
     <varlistentry>
 | 
					     <varlistentry>
 | 
				
			||||||
 | 
					      <term><literal>CURRENT_ROLE</literal></term>
 | 
				
			||||||
      <term><literal>CURRENT_USER</literal></term>
 | 
					      <term><literal>CURRENT_USER</literal></term>
 | 
				
			||||||
      <listitem>
 | 
					      <listitem>
 | 
				
			||||||
       <para>
 | 
					       <para>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parame
 | 
				
			|||||||
ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    RENAME TO <replaceable>new_name</replaceable>
 | 
					    RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					    SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
					ALTER ROUTINE <replaceable>name</replaceable> [ ( [ [ <replaceable class="parameter">argmode</replaceable> ] [ <replaceable class="parameter">argname</replaceable> ] <replaceable class="parameter">argtype</replaceable> [, ...] ] ) ]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER SCHEMA <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER SCHEMA <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER SCHEMA <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER SCHEMA <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable>
 | 
				
			|||||||
    [ RESTART [ [ WITH ] <replaceable class="parameter">restart</replaceable> ] ]
 | 
					    [ RESTART [ [ WITH ] <replaceable class="parameter">restart</replaceable> ] ]
 | 
				
			||||||
    [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ]
 | 
					    [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ]
 | 
				
			||||||
    [ OWNED BY { <replaceable class="parameter">table_name</replaceable>.<replaceable class="parameter">column_name</replaceable> | NONE } ]
 | 
					    [ OWNED BY { <replaceable class="parameter">table_name</replaceable>.<replaceable class="parameter">column_name</replaceable> | NONE } ]
 | 
				
			||||||
ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
					ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
				
			||||||
ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
					ALTER SEQUENCE [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ PostgreSQL documentation
 | 
				
			|||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER SERVER <replaceable class="parameter">name</replaceable> [ VERSION '<replaceable class="parameter">new_version</replaceable>' ]
 | 
					ALTER SERVER <replaceable class="parameter">name</replaceable> [ VERSION '<replaceable class="parameter">new_version</replaceable>' ]
 | 
				
			||||||
    [ OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ] ) ]
 | 
					    [ OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ] ) ]
 | 
				
			||||||
ALTER SERVER <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER SERVER <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER SERVER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER SERVER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER STATISTICS <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER STATISTICS <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER STATISTICS <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
					ALTER STATISTICS <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
				
			||||||
ALTER STATISTICS <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
					ALTER STATISTICS <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
				
			||||||
ALTER STATISTICS <replaceable class="parameter">name</replaceable> SET STATISTICS <replaceable class="parameter">new_target</replaceable>
 | 
					ALTER STATISTICS <replaceable class="parameter">name</replaceable> SET STATISTICS <replaceable class="parameter">new_target</replaceable>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> REFRESH PUB
 | 
				
			|||||||
ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> ENABLE
 | 
					ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> ENABLE
 | 
				
			||||||
ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> DISABLE
 | 
					ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> DISABLE
 | 
				
			||||||
ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> SET ( <replaceable class="parameter">subscription_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] )
 | 
					ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> SET ( <replaceable class="parameter">subscription_parameter</replaceable> [= <replaceable class="parameter">value</replaceable>] [, ... ] )
 | 
				
			||||||
ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER SUBSCRIPTION <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,7 +82,7 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="parameter">name</replaceable>
 | 
				
			|||||||
    NO INHERIT <replaceable class="parameter">parent_table</replaceable>
 | 
					    NO INHERIT <replaceable class="parameter">parent_table</replaceable>
 | 
				
			||||||
    OF <replaceable class="parameter">type_name</replaceable>
 | 
					    OF <replaceable class="parameter">type_name</replaceable>
 | 
				
			||||||
    NOT OF
 | 
					    NOT OF
 | 
				
			||||||
    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					    OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
    REPLICA IDENTITY { DEFAULT | USING INDEX <replaceable class="parameter">index_name</replaceable> | FULL | NOTHING }
 | 
					    REPLICA IDENTITY { DEFAULT | USING INDEX <replaceable class="parameter">index_name</replaceable> | FULL | NOTHING }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<phrase>and <replaceable class="parameter">partition_bound_spec</replaceable> is:</phrase>
 | 
					<phrase>and <replaceable class="parameter">partition_bound_spec</replaceable> is:</phrase>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER TABLESPACE <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER TABLESPACE <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER TABLESPACE <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER TABLESPACE <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER TABLESPACE <replaceable>name</replaceable> SET ( <replaceable class="parameter">tablespace_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] )
 | 
					ALTER TABLESPACE <replaceable>name</replaceable> SET ( <replaceable class="parameter">tablespace_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] )
 | 
				
			||||||
ALTER TABLESPACE <replaceable>name</replaceable> RESET ( <replaceable class="parameter">tablespace_option</replaceable> [, ... ] )
 | 
					ALTER TABLESPACE <replaceable>name</replaceable> RESET ( <replaceable class="parameter">tablespace_option</replaceable> [, ... ] )
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable>
 | 
				
			|||||||
ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable>
 | 
					ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable>
 | 
				
			||||||
    DROP MAPPING [ IF EXISTS ] FOR <replaceable class="parameter">token_type</replaceable> [, ... ]
 | 
					    DROP MAPPING [ IF EXISTS ] FOR <replaceable class="parameter">token_type</replaceable> [, ... ]
 | 
				
			||||||
ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					ALTER TEXT SEARCH CONFIGURATION <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ ALTER TEXT SEARCH DICTIONARY <replaceable>name</replaceable> (
 | 
				
			|||||||
    <replaceable class="parameter">option</replaceable> [ = <replaceable class="parameter">value</replaceable> ] [, ... ]
 | 
					    <replaceable class="parameter">option</replaceable> [ = <replaceable class="parameter">value</replaceable> ] [, ... ]
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
ALTER TEXT SEARCH DICTIONARY <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
					ALTER TEXT SEARCH DICTIONARY <replaceable>name</replaceable> RENAME TO <replaceable>new_name</replaceable>
 | 
				
			||||||
ALTER TEXT SEARCH DICTIONARY <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER TEXT SEARCH DICTIONARY <replaceable>name</replaceable> OWNER TO { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER TEXT SEARCH DICTIONARY <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
					ALTER TEXT SEARCH DICTIONARY <replaceable>name</replaceable> SET SCHEMA <replaceable>new_schema</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER TYPE <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER TYPE <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER TYPE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
					ALTER TYPE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
				
			||||||
ALTER TYPE <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
					ALTER TYPE <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
				
			||||||
ALTER TYPE <replaceable class="parameter">name</replaceable> RENAME ATTRIBUTE <replaceable class="parameter">attribute_name</replaceable> TO <replaceable class="parameter">new_attribute_name</replaceable> [ CASCADE | RESTRICT ]
 | 
					ALTER TYPE <replaceable class="parameter">name</replaceable> RENAME ATTRIBUTE <replaceable class="parameter">attribute_name</replaceable> TO <replaceable class="parameter">new_attribute_name</replaceable> [ CASCADE | RESTRICT ]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,7 @@ ALTER USER { <replaceable class="parameter">role_specification</replaceable> | A
 | 
				
			|||||||
<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
					<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <replaceable class="parameter">role_name</replaceable>
 | 
					    <replaceable class="parameter">role_name</replaceable>
 | 
				
			||||||
 | 
					  | CURRENT_ROLE
 | 
				
			||||||
  | CURRENT_USER
 | 
					  | CURRENT_USER
 | 
				
			||||||
  | SESSION_USER
 | 
					  | SESSION_USER
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER USER MAPPING FOR { <replaceable class="parameter">user_name</replaceable> | USER | CURRENT_USER | SESSION_USER | PUBLIC }
 | 
					ALTER USER MAPPING FOR { <replaceable class="parameter">user_name</replaceable> | USER | CURRENT_ROLE | CURRENT_USER | SESSION_USER | PUBLIC }
 | 
				
			||||||
    SERVER <replaceable class="parameter">server_name</replaceable>
 | 
					    SERVER <replaceable class="parameter">server_name</replaceable>
 | 
				
			||||||
    OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ] )
 | 
					    OPTIONS ( [ ADD | SET | DROP ] <replaceable class="parameter">option</replaceable> ['<replaceable class="parameter">value</replaceable>'] [, ... ] )
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
@@ -51,7 +51,7 @@ ALTER USER MAPPING FOR { <replaceable class="parameter">user_name</replaceable>
 | 
				
			|||||||
    <term><replaceable class="parameter">user_name</replaceable></term>
 | 
					    <term><replaceable class="parameter">user_name</replaceable></term>
 | 
				
			||||||
    <listitem>
 | 
					    <listitem>
 | 
				
			||||||
     <para>
 | 
					     <para>
 | 
				
			||||||
      User name of the mapping. <literal>CURRENT_USER</literal>
 | 
					      User name of the mapping. <literal>CURRENT_ROLE</literal>, <literal>CURRENT_USER</literal>,
 | 
				
			||||||
      and <literal>USER</literal> match the name of the current
 | 
					      and <literal>USER</literal> match the name of the current
 | 
				
			||||||
      user. <literal>PUBLIC</literal> is used to match all present and future
 | 
					      user. <literal>PUBLIC</literal> is used to match all present and future
 | 
				
			||||||
      user names in the system.
 | 
					      user names in the system.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ PostgreSQL documentation
 | 
				
			|||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET DEFAULT <replaceable class="parameter">expression</replaceable>
 | 
					ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> SET DEFAULT <replaceable class="parameter">expression</replaceable>
 | 
				
			||||||
ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> DROP DEFAULT
 | 
					ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> ALTER [ COLUMN ] <replaceable class="parameter">column_name</replaceable> DROP DEFAULT
 | 
				
			||||||
ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> OWNER TO { <replaceable class="parameter">new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME [ COLUMN ] <replaceable class="parameter">column_name</replaceable> TO <replaceable class="parameter">new_column_name</replaceable>
 | 
					ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME [ COLUMN ] <replaceable class="parameter">column_name</replaceable> TO <replaceable class="parameter">new_column_name</replaceable>
 | 
				
			||||||
ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
					ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
 | 
				
			||||||
ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
					ALTER VIEW [ IF EXISTS ] <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ PostgreSQL documentation
 | 
				
			|||||||
CREATE POLICY <replaceable class="parameter">name</replaceable> ON <replaceable class="parameter">table_name</replaceable>
 | 
					CREATE POLICY <replaceable class="parameter">name</replaceable> ON <replaceable class="parameter">table_name</replaceable>
 | 
				
			||||||
    [ AS { PERMISSIVE | RESTRICTIVE } ]
 | 
					    [ AS { PERMISSIVE | RESTRICTIVE } ]
 | 
				
			||||||
    [ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]
 | 
					    [ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]
 | 
				
			||||||
    [ TO { <replaceable class="parameter">role_name</replaceable> | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ]
 | 
					    [ TO { <replaceable class="parameter">role_name</replaceable> | PUBLIC | CURRENT_ROLE | CURRENT_USER | SESSION_USER } [, ...] ]
 | 
				
			||||||
    [ USING ( <replaceable class="parameter">using_expression</replaceable> ) ]
 | 
					    [ USING ( <replaceable class="parameter">using_expression</replaceable> ) ]
 | 
				
			||||||
    [ WITH CHECK ( <replaceable class="parameter">check_expression</replaceable> ) ]
 | 
					    [ WITH CHECK ( <replaceable class="parameter">check_expression</replaceable> ) ]
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ CREATE SCHEMA IF NOT EXISTS AUTHORIZATION <replaceable class="parameter">role_sp
 | 
				
			|||||||
<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
					<phrase>where <replaceable class="parameter">role_specification</replaceable> can be:</phrase>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <replaceable class="parameter">user_name</replaceable>
 | 
					    <replaceable class="parameter">user_name</replaceable>
 | 
				
			||||||
 | 
					  | CURRENT_ROLE
 | 
				
			||||||
  | CURRENT_USER
 | 
					  | CURRENT_USER
 | 
				
			||||||
  | SESSION_USER
 | 
					  | SESSION_USER
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
CREATE TABLESPACE <replaceable class="parameter">tablespace_name</replaceable>
 | 
					CREATE TABLESPACE <replaceable class="parameter">tablespace_name</replaceable>
 | 
				
			||||||
    [ OWNER { <replaceable>new_owner</replaceable> | CURRENT_USER | SESSION_USER } ]
 | 
					    [ OWNER { <replaceable>new_owner</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ]
 | 
				
			||||||
    LOCATION '<replaceable class="parameter">directory</replaceable>'
 | 
					    LOCATION '<replaceable class="parameter">directory</replaceable>'
 | 
				
			||||||
    [ WITH ( <replaceable class="parameter">tablespace_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] ) ]
 | 
					    [ WITH ( <replaceable class="parameter">tablespace_option</replaceable> = <replaceable class="parameter">value</replaceable> [, ... ] ) ]
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
CREATE USER MAPPING [ IF NOT EXISTS ] FOR { <replaceable class="parameter">user_name</replaceable> | USER | CURRENT_USER | PUBLIC }
 | 
					CREATE USER MAPPING [ IF NOT EXISTS ] FOR { <replaceable class="parameter">user_name</replaceable> | USER | CURRENT_ROLE | CURRENT_USER | PUBLIC }
 | 
				
			||||||
    SERVER <replaceable class="parameter">server_name</replaceable>
 | 
					    SERVER <replaceable class="parameter">server_name</replaceable>
 | 
				
			||||||
    [ OPTIONS ( <replaceable class="parameter">option</replaceable> '<replaceable class="parameter">value</replaceable>' [ , ... ] ) ]
 | 
					    [ OPTIONS ( <replaceable class="parameter">option</replaceable> '<replaceable class="parameter">value</replaceable>' [ , ... ] ) ]
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
@@ -67,7 +67,7 @@ CREATE USER MAPPING [ IF NOT EXISTS ] FOR { <replaceable class="parameter">user_
 | 
				
			|||||||
    <listitem>
 | 
					    <listitem>
 | 
				
			||||||
     <para>
 | 
					     <para>
 | 
				
			||||||
      The name of an existing user that is mapped to foreign server.
 | 
					      The name of an existing user that is mapped to foreign server.
 | 
				
			||||||
      <literal>CURRENT_USER</literal> and <literal>USER</literal> match the name of
 | 
					      <literal>CURRENT_ROLE</literal>, <literal>CURRENT_USER</literal>, and <literal>USER</literal> match the name of
 | 
				
			||||||
      the current user.  When <literal>PUBLIC</literal> is specified, a
 | 
					      the current user.  When <literal>PUBLIC</literal> is specified, a
 | 
				
			||||||
      so-called public mapping is created that is used when no
 | 
					      so-called public mapping is created that is used when no
 | 
				
			||||||
      user-specific mapping is applicable.
 | 
					      user-specific mapping is applicable.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
DROP OWNED BY { <replaceable class="parameter">name</replaceable> | CURRENT_USER | SESSION_USER } [, ...] [ CASCADE | RESTRICT ]
 | 
					DROP OWNED BY { <replaceable class="parameter">name</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER } [, ...] [ CASCADE | RESTRICT ]
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
DROP USER MAPPING [ IF EXISTS ] FOR { <replaceable class="parameter">user_name</replaceable> | USER | CURRENT_USER | PUBLIC } SERVER <replaceable class="parameter">server_name</replaceable>
 | 
					DROP USER MAPPING [ IF EXISTS ] FOR { <replaceable class="parameter">user_name</replaceable> | USER | CURRENT_ROLE | CURRENT_USER | PUBLIC } SERVER <replaceable class="parameter">server_name</replaceable>
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,7 +59,7 @@ DROP USER MAPPING [ IF EXISTS ] FOR { <replaceable class="parameter">user_name</
 | 
				
			|||||||
    <term><replaceable class="parameter">user_name</replaceable></term>
 | 
					    <term><replaceable class="parameter">user_name</replaceable></term>
 | 
				
			||||||
    <listitem>
 | 
					    <listitem>
 | 
				
			||||||
     <para>
 | 
					     <para>
 | 
				
			||||||
      User name of the mapping.  <literal>CURRENT_USER</literal>
 | 
					      User name of the mapping.  <literal>CURRENT_ROLE</literal>, <literal>CURRENT_USER</literal>,
 | 
				
			||||||
      and <literal>USER</literal> match the name of the current
 | 
					      and <literal>USER</literal> match the name of the current
 | 
				
			||||||
      user.  <literal>PUBLIC</literal> is used to match all present and
 | 
					      user.  <literal>PUBLIC</literal> is used to match all present and
 | 
				
			||||||
      future user names in the system.
 | 
					      future user names in the system.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,6 +87,7 @@ GRANT <replaceable class="parameter">role_name</replaceable> [, ...] TO <replace
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    [ GROUP ] <replaceable class="parameter">role_name</replaceable>
 | 
					    [ GROUP ] <replaceable class="parameter">role_name</replaceable>
 | 
				
			||||||
  | PUBLIC
 | 
					  | PUBLIC
 | 
				
			||||||
 | 
					  | CURRENT_ROLE
 | 
				
			||||||
  | CURRENT_USER
 | 
					  | CURRENT_USER
 | 
				
			||||||
  | SESSION_USER
 | 
					  | SESSION_USER
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,8 +21,8 @@ PostgreSQL documentation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 <refsynopsisdiv>
 | 
					 <refsynopsisdiv>
 | 
				
			||||||
<synopsis>
 | 
					<synopsis>
 | 
				
			||||||
REASSIGN OWNED BY { <replaceable class="parameter">old_role</replaceable> | CURRENT_USER | SESSION_USER } [, ...]
 | 
					REASSIGN OWNED BY { <replaceable class="parameter">old_role</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER } [, ...]
 | 
				
			||||||
               TO { <replaceable class="parameter">new_role</replaceable> | CURRENT_USER | SESSION_USER }
 | 
					               TO { <replaceable class="parameter">new_role</replaceable> | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 </refsynopsisdiv>
 | 
					 </refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,6 +114,7 @@ REVOKE [ ADMIN OPTION FOR ]
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    [ GROUP ] <replaceable class="parameter">role_name</replaceable>
 | 
					    [ GROUP ] <replaceable class="parameter">role_name</replaceable>
 | 
				
			||||||
  | PUBLIC
 | 
					  | PUBLIC
 | 
				
			||||||
 | 
					  | CURRENT_ROLE
 | 
				
			||||||
  | CURRENT_USER
 | 
					  | CURRENT_USER
 | 
				
			||||||
  | SESSION_USER
 | 
					  | SESSION_USER
 | 
				
			||||||
</synopsis>
 | 
					</synopsis>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14919,6 +14919,13 @@ RoleId:		RoleSpec
 | 
				
			|||||||
											"CURRENT_USER"),
 | 
																"CURRENT_USER"),
 | 
				
			||||||
									 parser_errposition(@1)));
 | 
														 parser_errposition(@1)));
 | 
				
			||||||
							break;
 | 
												break;
 | 
				
			||||||
 | 
											case ROLESPEC_CURRENT_ROLE:
 | 
				
			||||||
 | 
												ereport(ERROR,
 | 
				
			||||||
 | 
														(errcode(ERRCODE_RESERVED_NAME),
 | 
				
			||||||
 | 
														 errmsg("%s cannot be used as a role name here",
 | 
				
			||||||
 | 
																"CURRENT_ROLE"),
 | 
				
			||||||
 | 
														 parser_errposition(@1)));
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			;
 | 
								;
 | 
				
			||||||
@@ -14950,6 +14957,10 @@ RoleSpec:	NonReservedWord
 | 
				
			|||||||
						}
 | 
											}
 | 
				
			||||||
						$$ = n;
 | 
											$$ = n;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
								| CURRENT_ROLE
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											$$ = makeRoleSpec(ROLESPEC_CURRENT_ROLE, @1);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
			| CURRENT_USER
 | 
								| CURRENT_USER
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						$$ = makeRoleSpec(ROLESPEC_CURRENT_USER, @1);
 | 
											$$ = makeRoleSpec(ROLESPEC_CURRENT_USER, @1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5217,6 +5217,7 @@ get_rolespec_oid(const RoleSpec *role, bool missing_ok)
 | 
				
			|||||||
			oid = get_role_oid(role->rolename, missing_ok);
 | 
								oid = get_role_oid(role->rolename, missing_ok);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case ROLESPEC_CURRENT_ROLE:
 | 
				
			||||||
		case ROLESPEC_CURRENT_USER:
 | 
							case ROLESPEC_CURRENT_USER:
 | 
				
			||||||
			oid = GetUserId();
 | 
								oid = GetUserId();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
@@ -5259,6 +5260,7 @@ get_rolespec_tuple(const RoleSpec *role)
 | 
				
			|||||||
						 errmsg("role \"%s\" does not exist", role->rolename)));
 | 
											 errmsg("role \"%s\" does not exist", role->rolename)));
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case ROLESPEC_CURRENT_ROLE:
 | 
				
			||||||
		case ROLESPEC_CURRENT_USER:
 | 
							case ROLESPEC_CURRENT_USER:
 | 
				
			||||||
			tuple = SearchSysCache1(AUTHOID, GetUserId());
 | 
								tuple = SearchSysCache1(AUTHOID, GetUserId());
 | 
				
			||||||
			if (!HeapTupleIsValid(tuple))
 | 
								if (!HeapTupleIsValid(tuple))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -318,6 +318,7 @@ typedef struct CollateClause
 | 
				
			|||||||
typedef enum RoleSpecType
 | 
					typedef enum RoleSpecType
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ROLESPEC_CSTRING,			/* role name is stored as a C string */
 | 
						ROLESPEC_CSTRING,			/* role name is stored as a C string */
 | 
				
			||||||
 | 
						ROLESPEC_CURRENT_ROLE,		/* role spec is CURRENT_ROLE */
 | 
				
			||||||
	ROLESPEC_CURRENT_USER,		/* role spec is CURRENT_USER */
 | 
						ROLESPEC_CURRENT_USER,		/* role spec is CURRENT_USER */
 | 
				
			||||||
	ROLESPEC_SESSION_USER,		/* role spec is SESSION_USER */
 | 
						ROLESPEC_SESSION_USER,		/* role spec is SESSION_USER */
 | 
				
			||||||
	ROLESPEC_PUBLIC				/* role name is "public" */
 | 
						ROLESPEC_PUBLIC				/* role name is "public" */
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -3,8 +3,10 @@ CREATE OR REPLACE FUNCTION chkrolattr()
 | 
				
			|||||||
 AS $$
 | 
					 AS $$
 | 
				
			||||||
SELECT r.rolname, v.keyword, r.rolcanlogin, r.rolreplication
 | 
					SELECT r.rolname, v.keyword, r.rolcanlogin, r.rolreplication
 | 
				
			||||||
 FROM pg_roles r
 | 
					 FROM pg_roles r
 | 
				
			||||||
 JOIN (VALUES(CURRENT_USER, 'current_user'),
 | 
					 JOIN (VALUES(CURRENT_ROLE, 'current_role'),
 | 
				
			||||||
 | 
					             (CURRENT_USER, 'current_user'),
 | 
				
			||||||
             (SESSION_USER, 'session_user'),
 | 
					             (SESSION_USER, 'session_user'),
 | 
				
			||||||
 | 
					             ('current_role', '-'),
 | 
				
			||||||
             ('current_user', '-'),
 | 
					             ('current_user', '-'),
 | 
				
			||||||
             ('session_user', '-'),
 | 
					             ('session_user', '-'),
 | 
				
			||||||
             ('Public', '-'),
 | 
					             ('Public', '-'),
 | 
				
			||||||
@@ -22,8 +24,9 @@ SELECT COALESCE(d.datname, 'ALL'), COALESCE(r.rolname, 'ALL'),
 | 
				
			|||||||
 FROM pg_db_role_setting s
 | 
					 FROM pg_db_role_setting s
 | 
				
			||||||
 LEFT JOIN pg_roles r ON (r.oid = s.setrole)
 | 
					 LEFT JOIN pg_roles r ON (r.oid = s.setrole)
 | 
				
			||||||
 LEFT JOIN pg_database d ON (d.oid = s.setdatabase)
 | 
					 LEFT JOIN pg_database d ON (d.oid = s.setdatabase)
 | 
				
			||||||
 LEFT JOIN (VALUES(CURRENT_USER, 'current_user'),
 | 
					 LEFT JOIN (VALUES(CURRENT_ROLE, 'current_role'),
 | 
				
			||||||
             (SESSION_USER, 'session_user'))
 | 
					                  (CURRENT_USER, 'current_user'),
 | 
				
			||||||
 | 
					                  (SESSION_USER, 'session_user'))
 | 
				
			||||||
      AS v(uname, keyword)
 | 
					      AS v(uname, keyword)
 | 
				
			||||||
      ON (r.rolname = v.uname)
 | 
					      ON (r.rolname = v.uname)
 | 
				
			||||||
   WHERE (r.rolname) IN ('Public', 'current_user', 'regress_testrol1', 'regress_testrol2')
 | 
					   WHERE (r.rolname) IN ('Public', 'current_user', 'regress_testrol1', 'regress_testrol2')
 | 
				
			||||||
@@ -50,6 +53,7 @@ SET client_min_messages = ERROR;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CREATE ROLE "Public";
 | 
					CREATE ROLE "Public";
 | 
				
			||||||
CREATE ROLE "None";
 | 
					CREATE ROLE "None";
 | 
				
			||||||
 | 
					CREATE ROLE "current_role";
 | 
				
			||||||
CREATE ROLE "current_user";
 | 
					CREATE ROLE "current_user";
 | 
				
			||||||
CREATE ROLE "session_user";
 | 
					CREATE ROLE "session_user";
 | 
				
			||||||
CREATE ROLE "user";
 | 
					CREATE ROLE "user";
 | 
				
			||||||
@@ -84,6 +88,11 @@ SET ROLE regress_testrol2;
 | 
				
			|||||||
--  ALTER ROLE
 | 
					--  ALTER ROLE
 | 
				
			||||||
BEGIN;
 | 
					BEGIN;
 | 
				
			||||||
SELECT * FROM chkrolattr();
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
 | 
					ALTER ROLE CURRENT_ROLE WITH REPLICATION;
 | 
				
			||||||
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
 | 
					ALTER ROLE "current_role" WITH REPLICATION;
 | 
				
			||||||
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
 | 
					ALTER ROLE CURRENT_ROLE WITH NOREPLICATION;
 | 
				
			||||||
ALTER ROLE CURRENT_USER WITH REPLICATION;
 | 
					ALTER ROLE CURRENT_USER WITH REPLICATION;
 | 
				
			||||||
SELECT * FROM chkrolattr();
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
ALTER ROLE "current_user" WITH REPLICATION;
 | 
					ALTER ROLE "current_user" WITH REPLICATION;
 | 
				
			||||||
@@ -101,7 +110,6 @@ SELECT * FROM chkrolattr();
 | 
				
			|||||||
ROLLBACK;
 | 
					ROLLBACK;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER ROLE USER WITH LOGIN; -- error
 | 
					ALTER ROLE USER WITH LOGIN; -- error
 | 
				
			||||||
ALTER ROLE CURRENT_ROLE WITH LOGIN; --error
 | 
					 | 
				
			||||||
ALTER ROLE ALL WITH REPLICATION; -- error
 | 
					ALTER ROLE ALL WITH REPLICATION; -- error
 | 
				
			||||||
ALTER ROLE SESSION_ROLE WITH NOREPLICATION; -- error
 | 
					ALTER ROLE SESSION_ROLE WITH NOREPLICATION; -- error
 | 
				
			||||||
ALTER ROLE PUBLIC WITH NOREPLICATION; -- error
 | 
					ALTER ROLE PUBLIC WITH NOREPLICATION; -- error
 | 
				
			||||||
@@ -113,6 +121,11 @@ ALTER ROLE nonexistent WITH NOREPLICATION; -- error
 | 
				
			|||||||
--  ALTER USER
 | 
					--  ALTER USER
 | 
				
			||||||
BEGIN;
 | 
					BEGIN;
 | 
				
			||||||
SELECT * FROM chkrolattr();
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
 | 
					ALTER USER CURRENT_ROLE WITH REPLICATION;
 | 
				
			||||||
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
 | 
					ALTER USER "current_role" WITH REPLICATION;
 | 
				
			||||||
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
 | 
					ALTER USER CURRENT_ROLE WITH NOREPLICATION;
 | 
				
			||||||
ALTER USER CURRENT_USER WITH REPLICATION;
 | 
					ALTER USER CURRENT_USER WITH REPLICATION;
 | 
				
			||||||
SELECT * FROM chkrolattr();
 | 
					SELECT * FROM chkrolattr();
 | 
				
			||||||
ALTER USER "current_user" WITH REPLICATION;
 | 
					ALTER USER "current_user" WITH REPLICATION;
 | 
				
			||||||
@@ -130,7 +143,6 @@ SELECT * FROM chkrolattr();
 | 
				
			|||||||
ROLLBACK;
 | 
					ROLLBACK;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER USER USER WITH LOGIN; -- error
 | 
					ALTER USER USER WITH LOGIN; -- error
 | 
				
			||||||
ALTER USER CURRENT_ROLE WITH LOGIN; -- error
 | 
					 | 
				
			||||||
ALTER USER ALL WITH REPLICATION; -- error
 | 
					ALTER USER ALL WITH REPLICATION; -- error
 | 
				
			||||||
ALTER USER SESSION_ROLE WITH NOREPLICATION; -- error
 | 
					ALTER USER SESSION_ROLE WITH NOREPLICATION; -- error
 | 
				
			||||||
ALTER USER PUBLIC WITH NOREPLICATION; -- error
 | 
					ALTER USER PUBLIC WITH NOREPLICATION; -- error
 | 
				
			||||||
@@ -141,6 +153,7 @@ ALTER USER nonexistent WITH NOREPLICATION; -- error
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--  ALTER ROLE SET/RESET
 | 
					--  ALTER ROLE SET/RESET
 | 
				
			||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
 | 
					ALTER ROLE CURRENT_ROLE SET application_name to 'BAZ';
 | 
				
			||||||
ALTER ROLE CURRENT_USER SET application_name to 'FOO';
 | 
					ALTER ROLE CURRENT_USER SET application_name to 'FOO';
 | 
				
			||||||
ALTER ROLE SESSION_USER SET application_name to 'BAR';
 | 
					ALTER ROLE SESSION_USER SET application_name to 'BAR';
 | 
				
			||||||
ALTER ROLE "current_user" SET application_name to 'FOOFOO';
 | 
					ALTER ROLE "current_user" SET application_name to 'FOOFOO';
 | 
				
			||||||
@@ -149,6 +162,7 @@ ALTER ROLE ALL SET application_name to 'SLAP';
 | 
				
			|||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
ALTER ROLE regress_testrol1 SET application_name to 'SLAM';
 | 
					ALTER ROLE regress_testrol1 SET application_name to 'SLAM';
 | 
				
			||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
 | 
					ALTER ROLE CURRENT_ROLE RESET application_name;
 | 
				
			||||||
ALTER ROLE CURRENT_USER RESET application_name;
 | 
					ALTER ROLE CURRENT_USER RESET application_name;
 | 
				
			||||||
ALTER ROLE SESSION_USER RESET application_name;
 | 
					ALTER ROLE SESSION_USER RESET application_name;
 | 
				
			||||||
ALTER ROLE "current_user" RESET application_name;
 | 
					ALTER ROLE "current_user" RESET application_name;
 | 
				
			||||||
@@ -157,13 +171,13 @@ ALTER ROLE ALL RESET application_name;
 | 
				
			|||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER ROLE CURRENT_ROLE SET application_name to 'BAZ'; -- error
 | 
					 | 
				
			||||||
ALTER ROLE USER SET application_name to 'BOOM'; -- error
 | 
					ALTER ROLE USER SET application_name to 'BOOM'; -- error
 | 
				
			||||||
ALTER ROLE PUBLIC SET application_name to 'BOMB'; -- error
 | 
					ALTER ROLE PUBLIC SET application_name to 'BOMB'; -- error
 | 
				
			||||||
ALTER ROLE nonexistent SET application_name to 'BOMB'; -- error
 | 
					ALTER ROLE nonexistent SET application_name to 'BOMB'; -- error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--  ALTER USER SET/RESET
 | 
					--  ALTER USER SET/RESET
 | 
				
			||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
 | 
					ALTER USER CURRENT_ROLE SET application_name to 'BAZ';
 | 
				
			||||||
ALTER USER CURRENT_USER SET application_name to 'FOO';
 | 
					ALTER USER CURRENT_USER SET application_name to 'FOO';
 | 
				
			||||||
ALTER USER SESSION_USER SET application_name to 'BAR';
 | 
					ALTER USER SESSION_USER SET application_name to 'BAR';
 | 
				
			||||||
ALTER USER "current_user" SET application_name to 'FOOFOO';
 | 
					ALTER USER "current_user" SET application_name to 'FOOFOO';
 | 
				
			||||||
@@ -172,6 +186,7 @@ ALTER USER ALL SET application_name to 'SLAP';
 | 
				
			|||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
ALTER USER regress_testrol1 SET application_name to 'SLAM';
 | 
					ALTER USER regress_testrol1 SET application_name to 'SLAM';
 | 
				
			||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
 | 
					ALTER USER CURRENT_ROLE RESET application_name;
 | 
				
			||||||
ALTER USER CURRENT_USER RESET application_name;
 | 
					ALTER USER CURRENT_USER RESET application_name;
 | 
				
			||||||
ALTER USER SESSION_USER RESET application_name;
 | 
					ALTER USER SESSION_USER RESET application_name;
 | 
				
			||||||
ALTER USER "current_user" RESET application_name;
 | 
					ALTER USER "current_user" RESET application_name;
 | 
				
			||||||
@@ -180,7 +195,6 @@ ALTER USER ALL RESET application_name;
 | 
				
			|||||||
SELECT * FROM chksetconfig();
 | 
					SELECT * FROM chksetconfig();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER USER CURRENT_ROLE SET application_name to 'BAZ'; -- error
 | 
					 | 
				
			||||||
ALTER USER USER SET application_name to 'BOOM'; -- error
 | 
					ALTER USER USER SET application_name to 'BOOM'; -- error
 | 
				
			||||||
ALTER USER PUBLIC SET application_name to 'BOMB'; -- error
 | 
					ALTER USER PUBLIC SET application_name to 'BOMB'; -- error
 | 
				
			||||||
ALTER USER NONE SET application_name to 'BOMB'; -- error
 | 
					ALTER USER NONE SET application_name to 'BOMB'; -- error
 | 
				
			||||||
@@ -189,16 +203,16 @@ ALTER USER nonexistent SET application_name to 'BOMB'; -- error
 | 
				
			|||||||
-- CREATE SCHEMA
 | 
					-- CREATE SCHEMA
 | 
				
			||||||
CREATE SCHEMA newschema1 AUTHORIZATION CURRENT_USER;
 | 
					CREATE SCHEMA newschema1 AUTHORIZATION CURRENT_USER;
 | 
				
			||||||
CREATE SCHEMA newschema2 AUTHORIZATION "current_user";
 | 
					CREATE SCHEMA newschema2 AUTHORIZATION "current_user";
 | 
				
			||||||
CREATE SCHEMA newschema3 AUTHORIZATION SESSION_USER;
 | 
					CREATE SCHEMA newschema3 AUTHORIZATION CURRENT_ROLE;
 | 
				
			||||||
CREATE SCHEMA newschema4 AUTHORIZATION regress_testrolx;
 | 
					CREATE SCHEMA newschema4 AUTHORIZATION SESSION_USER;
 | 
				
			||||||
CREATE SCHEMA newschema5 AUTHORIZATION "Public";
 | 
					CREATE SCHEMA newschema5 AUTHORIZATION regress_testrolx;
 | 
				
			||||||
 | 
					CREATE SCHEMA newschema6 AUTHORIZATION "Public";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE SCHEMA newschema6 AUTHORIZATION USER; -- error
 | 
					CREATE SCHEMA newschemax AUTHORIZATION USER; -- error
 | 
				
			||||||
CREATE SCHEMA newschema6 AUTHORIZATION CURRENT_ROLE; -- error
 | 
					CREATE SCHEMA newschemax AUTHORIZATION PUBLIC; -- error
 | 
				
			||||||
CREATE SCHEMA newschema6 AUTHORIZATION PUBLIC; -- error
 | 
					CREATE SCHEMA newschemax AUTHORIZATION "public"; -- error
 | 
				
			||||||
CREATE SCHEMA newschema6 AUTHORIZATION "public"; -- error
 | 
					CREATE SCHEMA newschemax AUTHORIZATION NONE; -- error
 | 
				
			||||||
CREATE SCHEMA newschema6 AUTHORIZATION NONE; -- error
 | 
					CREATE SCHEMA newschemax AUTHORIZATION nonexistent; -- error
 | 
				
			||||||
CREATE SCHEMA newschema6 AUTHORIZATION nonexistent; -- error
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT n.nspname, r.rolname FROM pg_namespace n
 | 
					SELECT n.nspname, r.rolname FROM pg_namespace n
 | 
				
			||||||
 JOIN pg_roles r ON (r.oid = n.nspowner)
 | 
					 JOIN pg_roles r ON (r.oid = n.nspowner)
 | 
				
			||||||
@@ -206,16 +220,16 @@ SELECT n.nspname, r.rolname FROM pg_namespace n
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema1 AUTHORIZATION CURRENT_USER;
 | 
					CREATE SCHEMA IF NOT EXISTS newschema1 AUTHORIZATION CURRENT_USER;
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema2 AUTHORIZATION "current_user";
 | 
					CREATE SCHEMA IF NOT EXISTS newschema2 AUTHORIZATION "current_user";
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema3 AUTHORIZATION SESSION_USER;
 | 
					CREATE SCHEMA IF NOT EXISTS newschema3 AUTHORIZATION CURRENT_ROLE;
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema4 AUTHORIZATION regress_testrolx;
 | 
					CREATE SCHEMA IF NOT EXISTS newschema4 AUTHORIZATION SESSION_USER;
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema5 AUTHORIZATION "Public";
 | 
					CREATE SCHEMA IF NOT EXISTS newschema5 AUTHORIZATION regress_testrolx;
 | 
				
			||||||
 | 
					CREATE SCHEMA IF NOT EXISTS newschema6 AUTHORIZATION "Public";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema6 AUTHORIZATION USER; -- error
 | 
					CREATE SCHEMA IF NOT EXISTS newschemax AUTHORIZATION USER; -- error
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema6 AUTHORIZATION CURRENT_ROLE; -- error
 | 
					CREATE SCHEMA IF NOT EXISTS newschemax AUTHORIZATION PUBLIC; -- error
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema6 AUTHORIZATION PUBLIC; -- error
 | 
					CREATE SCHEMA IF NOT EXISTS newschemax AUTHORIZATION "public"; -- error
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema6 AUTHORIZATION "public"; -- error
 | 
					CREATE SCHEMA IF NOT EXISTS newschemax AUTHORIZATION NONE; -- error
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema6 AUTHORIZATION NONE; -- error
 | 
					CREATE SCHEMA IF NOT EXISTS newschemax AUTHORIZATION nonexistent; -- error
 | 
				
			||||||
CREATE SCHEMA IF NOT EXISTS newschema6 AUTHORIZATION nonexistent; -- error
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT n.nspname, r.rolname FROM pg_namespace n
 | 
					SELECT n.nspname, r.rolname FROM pg_namespace n
 | 
				
			||||||
 JOIN pg_roles r ON (r.oid = n.nspowner)
 | 
					 JOIN pg_roles r ON (r.oid = n.nspowner)
 | 
				
			||||||
@@ -230,6 +244,7 @@ CREATE TABLE testtab3 (a int);
 | 
				
			|||||||
CREATE TABLE testtab4 (a int);
 | 
					CREATE TABLE testtab4 (a int);
 | 
				
			||||||
CREATE TABLE testtab5 (a int);
 | 
					CREATE TABLE testtab5 (a int);
 | 
				
			||||||
CREATE TABLE testtab6 (a int);
 | 
					CREATE TABLE testtab6 (a int);
 | 
				
			||||||
 | 
					CREATE TABLE testtab7 (a int);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\c -
 | 
					\c -
 | 
				
			||||||
SET SESSION AUTHORIZATION regress_testrol1;
 | 
					SET SESSION AUTHORIZATION regress_testrol1;
 | 
				
			||||||
@@ -237,15 +252,15 @@ SET ROLE regress_testrol2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ALTER TABLE testtab1 OWNER TO CURRENT_USER;
 | 
					ALTER TABLE testtab1 OWNER TO CURRENT_USER;
 | 
				
			||||||
ALTER TABLE testtab2 OWNER TO "current_user";
 | 
					ALTER TABLE testtab2 OWNER TO "current_user";
 | 
				
			||||||
ALTER TABLE testtab3 OWNER TO SESSION_USER;
 | 
					ALTER TABLE testtab3 OWNER TO CURRENT_ROLE;
 | 
				
			||||||
ALTER TABLE testtab4 OWNER TO regress_testrolx;
 | 
					ALTER TABLE testtab4 OWNER TO SESSION_USER;
 | 
				
			||||||
ALTER TABLE testtab5 OWNER TO "Public";
 | 
					ALTER TABLE testtab5 OWNER TO regress_testrolx;
 | 
				
			||||||
 | 
					ALTER TABLE testtab6 OWNER TO "Public";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER TABLE testtab6 OWNER TO CURRENT_ROLE; -- error
 | 
					ALTER TABLE testtab7 OWNER TO USER; --error
 | 
				
			||||||
ALTER TABLE testtab6 OWNER TO USER; --error
 | 
					ALTER TABLE testtab7 OWNER TO PUBLIC; -- error
 | 
				
			||||||
ALTER TABLE testtab6 OWNER TO PUBLIC; -- error
 | 
					ALTER TABLE testtab7 OWNER TO "public"; -- error
 | 
				
			||||||
ALTER TABLE testtab6 OWNER TO "public"; -- error
 | 
					ALTER TABLE testtab7 OWNER TO nonexistent; -- error
 | 
				
			||||||
ALTER TABLE testtab6 OWNER TO nonexistent; -- error
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT c.relname, r.rolname
 | 
					SELECT c.relname, r.rolname
 | 
				
			||||||
 FROM pg_class c JOIN pg_roles r ON (r.oid = c.relowner)
 | 
					 FROM pg_class c JOIN pg_roles r ON (r.oid = c.relowner)
 | 
				
			||||||
@@ -267,6 +282,7 @@ CREATE AGGREGATE testagg6(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
				
			|||||||
CREATE AGGREGATE testagg7(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
					CREATE AGGREGATE testagg7(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
				
			||||||
CREATE AGGREGATE testagg8(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
					CREATE AGGREGATE testagg8(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
				
			||||||
CREATE AGGREGATE testagg9(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
					CREATE AGGREGATE testagg9(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
				
			||||||
 | 
					CREATE AGGREGATE testagga(int2) (SFUNC = int2_sum, STYPE = int8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\c -
 | 
					\c -
 | 
				
			||||||
SET SESSION AUTHORIZATION regress_testrol1;
 | 
					SET SESSION AUTHORIZATION regress_testrol1;
 | 
				
			||||||
@@ -274,15 +290,15 @@ SET ROLE regress_testrol2;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ALTER AGGREGATE testagg1(int2) OWNER TO CURRENT_USER;
 | 
					ALTER AGGREGATE testagg1(int2) OWNER TO CURRENT_USER;
 | 
				
			||||||
ALTER AGGREGATE testagg2(int2) OWNER TO "current_user";
 | 
					ALTER AGGREGATE testagg2(int2) OWNER TO "current_user";
 | 
				
			||||||
ALTER AGGREGATE testagg3(int2) OWNER TO SESSION_USER;
 | 
					ALTER AGGREGATE testagg3(int2) OWNER TO CURRENT_ROLE;
 | 
				
			||||||
ALTER AGGREGATE testagg4(int2) OWNER TO regress_testrolx;
 | 
					ALTER AGGREGATE testagg4(int2) OWNER TO SESSION_USER;
 | 
				
			||||||
ALTER AGGREGATE testagg5(int2) OWNER TO "Public";
 | 
					ALTER AGGREGATE testagg5(int2) OWNER TO regress_testrolx;
 | 
				
			||||||
 | 
					ALTER AGGREGATE testagg6(int2) OWNER TO "Public";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER AGGREGATE testagg5(int2) OWNER TO CURRENT_ROLE; -- error
 | 
					ALTER AGGREGATE testagg6(int2) OWNER TO USER; -- error
 | 
				
			||||||
ALTER AGGREGATE testagg5(int2) OWNER TO USER; -- error
 | 
					ALTER AGGREGATE testagg6(int2) OWNER TO PUBLIC; -- error
 | 
				
			||||||
ALTER AGGREGATE testagg5(int2) OWNER TO PUBLIC; -- error
 | 
					ALTER AGGREGATE testagg6(int2) OWNER TO "public"; -- error
 | 
				
			||||||
ALTER AGGREGATE testagg5(int2) OWNER TO "public"; -- error
 | 
					ALTER AGGREGATE testagg6(int2) OWNER TO nonexistent; -- error
 | 
				
			||||||
ALTER AGGREGATE testagg5(int2) OWNER TO nonexistent; -- error
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT p.proname, r.rolname
 | 
					SELECT p.proname, r.rolname
 | 
				
			||||||
 FROM pg_proc p JOIN pg_roles r ON (r.oid = p.proowner)
 | 
					 FROM pg_proc p JOIN pg_roles r ON (r.oid = p.proowner)
 | 
				
			||||||
@@ -300,20 +316,19 @@ CREATE SERVER sv6 FOREIGN DATA WRAPPER test_wrapper;
 | 
				
			|||||||
CREATE SERVER sv7 FOREIGN DATA WRAPPER test_wrapper;
 | 
					CREATE SERVER sv7 FOREIGN DATA WRAPPER test_wrapper;
 | 
				
			||||||
CREATE SERVER sv8 FOREIGN DATA WRAPPER test_wrapper;
 | 
					CREATE SERVER sv8 FOREIGN DATA WRAPPER test_wrapper;
 | 
				
			||||||
CREATE SERVER sv9 FOREIGN DATA WRAPPER test_wrapper;
 | 
					CREATE SERVER sv9 FOREIGN DATA WRAPPER test_wrapper;
 | 
				
			||||||
 | 
					CREATE SERVER sv10 FOREIGN DATA WRAPPER test_wrapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE USER MAPPING FOR CURRENT_USER SERVER sv1 OPTIONS (user 'CURRENT_USER');
 | 
					CREATE USER MAPPING FOR CURRENT_USER SERVER sv1 OPTIONS (user 'CURRENT_USER');
 | 
				
			||||||
CREATE USER MAPPING FOR "current_user" SERVER sv2 OPTIONS (user '"current_user"');
 | 
					CREATE USER MAPPING FOR "current_user" SERVER sv2 OPTIONS (user '"current_user"');
 | 
				
			||||||
CREATE USER MAPPING FOR USER SERVER sv3 OPTIONS (user 'USER');
 | 
					CREATE USER MAPPING FOR CURRENT_ROLE SERVER sv3 OPTIONS (user 'CURRENT_ROLE');
 | 
				
			||||||
CREATE USER MAPPING FOR "user" SERVER sv4 OPTIONS (user '"USER"');
 | 
					CREATE USER MAPPING FOR USER SERVER sv4 OPTIONS (user 'USER');
 | 
				
			||||||
CREATE USER MAPPING FOR SESSION_USER SERVER sv5 OPTIONS (user 'SESSION_USER');
 | 
					CREATE USER MAPPING FOR "user" SERVER sv5 OPTIONS (user '"USER"');
 | 
				
			||||||
CREATE USER MAPPING FOR PUBLIC SERVER sv6 OPTIONS (user 'PUBLIC');
 | 
					CREATE USER MAPPING FOR SESSION_USER SERVER sv6 OPTIONS (user 'SESSION_USER');
 | 
				
			||||||
CREATE USER MAPPING FOR "Public" SERVER sv7 OPTIONS (user '"Public"');
 | 
					CREATE USER MAPPING FOR PUBLIC SERVER sv7 OPTIONS (user 'PUBLIC');
 | 
				
			||||||
CREATE USER MAPPING FOR regress_testrolx SERVER sv8 OPTIONS (user 'regress_testrolx');
 | 
					CREATE USER MAPPING FOR "Public" SERVER sv8 OPTIONS (user '"Public"');
 | 
				
			||||||
 | 
					CREATE USER MAPPING FOR regress_testrolx SERVER sv9 OPTIONS (user 'regress_testrolx');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE USER MAPPING FOR CURRENT_ROLE SERVER sv9
 | 
					CREATE USER MAPPING FOR nonexistent SERVER sv10 OPTIONS (user 'nonexistent'); -- error;
 | 
				
			||||||
 OPTIONS (user 'CURRENT_ROLE'); -- error
 | 
					 | 
				
			||||||
CREATE USER MAPPING FOR nonexistent SERVER sv9
 | 
					 | 
				
			||||||
 OPTIONS (user 'nonexistent'); -- error;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -322,22 +337,22 @@ ALTER USER MAPPING FOR CURRENT_USER SERVER sv1
 | 
				
			|||||||
 OPTIONS (SET user 'CURRENT_USER_alt');
 | 
					 OPTIONS (SET user 'CURRENT_USER_alt');
 | 
				
			||||||
ALTER USER MAPPING FOR "current_user" SERVER sv2
 | 
					ALTER USER MAPPING FOR "current_user" SERVER sv2
 | 
				
			||||||
 OPTIONS (SET user '"current_user"_alt');
 | 
					 OPTIONS (SET user '"current_user"_alt');
 | 
				
			||||||
ALTER USER MAPPING FOR USER SERVER sv3
 | 
					ALTER USER MAPPING FOR CURRENT_ROLE SERVER sv3
 | 
				
			||||||
 | 
					 OPTIONS (SET user 'CURRENT_ROLE_alt');
 | 
				
			||||||
 | 
					ALTER USER MAPPING FOR USER SERVER sv4
 | 
				
			||||||
 OPTIONS (SET user 'USER_alt');
 | 
					 OPTIONS (SET user 'USER_alt');
 | 
				
			||||||
ALTER USER MAPPING FOR "user" SERVER sv4
 | 
					ALTER USER MAPPING FOR "user" SERVER sv5
 | 
				
			||||||
 OPTIONS (SET user '"user"_alt');
 | 
					 OPTIONS (SET user '"user"_alt');
 | 
				
			||||||
ALTER USER MAPPING FOR SESSION_USER SERVER sv5
 | 
					ALTER USER MAPPING FOR SESSION_USER SERVER sv6
 | 
				
			||||||
 OPTIONS (SET user 'SESSION_USER_alt');
 | 
					 OPTIONS (SET user 'SESSION_USER_alt');
 | 
				
			||||||
ALTER USER MAPPING FOR PUBLIC SERVER sv6
 | 
					ALTER USER MAPPING FOR PUBLIC SERVER sv7
 | 
				
			||||||
 OPTIONS (SET user 'public_alt');
 | 
					 OPTIONS (SET user 'public_alt');
 | 
				
			||||||
ALTER USER MAPPING FOR "Public" SERVER sv7
 | 
					ALTER USER MAPPING FOR "Public" SERVER sv8
 | 
				
			||||||
 OPTIONS (SET user '"Public"_alt');
 | 
					 OPTIONS (SET user '"Public"_alt');
 | 
				
			||||||
ALTER USER MAPPING FOR regress_testrolx SERVER sv8
 | 
					ALTER USER MAPPING FOR regress_testrolx SERVER sv9
 | 
				
			||||||
 OPTIONS (SET user 'regress_testrolx_alt');
 | 
					 OPTIONS (SET user 'regress_testrolx_alt');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ALTER USER MAPPING FOR CURRENT_ROLE SERVER sv9
 | 
					ALTER USER MAPPING FOR nonexistent SERVER sv10
 | 
				
			||||||
 OPTIONS (SET user 'CURRENT_ROLE_alt');
 | 
					 | 
				
			||||||
ALTER USER MAPPING FOR nonexistent SERVER sv9
 | 
					 | 
				
			||||||
 OPTIONS (SET user 'nonexistent_alt'); -- error
 | 
					 OPTIONS (SET user 'nonexistent_alt'); -- error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
@@ -345,25 +360,26 @@ SELECT * FROM chkumapping();
 | 
				
			|||||||
-- DROP USER MAPPING
 | 
					-- DROP USER MAPPING
 | 
				
			||||||
DROP USER MAPPING FOR CURRENT_USER SERVER sv1;
 | 
					DROP USER MAPPING FOR CURRENT_USER SERVER sv1;
 | 
				
			||||||
DROP USER MAPPING FOR "current_user" SERVER sv2;
 | 
					DROP USER MAPPING FOR "current_user" SERVER sv2;
 | 
				
			||||||
DROP USER MAPPING FOR USER SERVER sv3;
 | 
					DROP USER MAPPING FOR CURRENT_ROLE SERVER sv3;
 | 
				
			||||||
DROP USER MAPPING FOR "user" SERVER sv4;
 | 
					DROP USER MAPPING FOR USER SERVER sv4;
 | 
				
			||||||
DROP USER MAPPING FOR SESSION_USER SERVER sv5;
 | 
					DROP USER MAPPING FOR "user" SERVER sv5;
 | 
				
			||||||
DROP USER MAPPING FOR PUBLIC SERVER sv6;
 | 
					DROP USER MAPPING FOR SESSION_USER SERVER sv6;
 | 
				
			||||||
DROP USER MAPPING FOR "Public" SERVER sv7;
 | 
					DROP USER MAPPING FOR PUBLIC SERVER sv7;
 | 
				
			||||||
DROP USER MAPPING FOR regress_testrolx SERVER sv8;
 | 
					DROP USER MAPPING FOR "Public" SERVER sv8;
 | 
				
			||||||
 | 
					DROP USER MAPPING FOR regress_testrolx SERVER sv9;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DROP USER MAPPING FOR CURRENT_ROLE SERVER sv9; -- error
 | 
					DROP USER MAPPING FOR nonexistent SERVER sv10;  -- error
 | 
				
			||||||
DROP USER MAPPING FOR nonexistent SERVER sv;  -- error
 | 
					 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE USER MAPPING FOR CURRENT_USER SERVER sv1 OPTIONS (user 'CURRENT_USER');
 | 
					CREATE USER MAPPING FOR CURRENT_USER SERVER sv1 OPTIONS (user 'CURRENT_USER');
 | 
				
			||||||
CREATE USER MAPPING FOR "current_user" SERVER sv2 OPTIONS (user '"current_user"');
 | 
					CREATE USER MAPPING FOR "current_user" SERVER sv2 OPTIONS (user '"current_user"');
 | 
				
			||||||
CREATE USER MAPPING FOR USER SERVER sv3 OPTIONS (user 'USER');
 | 
					CREATE USER MAPPING FOR CURRENT_ROLE SERVER sv3 OPTIONS (user 'CURRENT_ROLE');
 | 
				
			||||||
CREATE USER MAPPING FOR "user" SERVER sv4 OPTIONS (user '"USER"');
 | 
					CREATE USER MAPPING FOR USER SERVER sv4 OPTIONS (user 'USER');
 | 
				
			||||||
CREATE USER MAPPING FOR SESSION_USER SERVER sv5 OPTIONS (user 'SESSION_USER');
 | 
					CREATE USER MAPPING FOR "user" SERVER sv5 OPTIONS (user '"USER"');
 | 
				
			||||||
CREATE USER MAPPING FOR PUBLIC SERVER sv6 OPTIONS (user 'PUBLIC');
 | 
					CREATE USER MAPPING FOR SESSION_USER SERVER sv6 OPTIONS (user 'SESSION_USER');
 | 
				
			||||||
CREATE USER MAPPING FOR "Public" SERVER sv7 OPTIONS (user '"Public"');
 | 
					CREATE USER MAPPING FOR PUBLIC SERVER sv7 OPTIONS (user 'PUBLIC');
 | 
				
			||||||
CREATE USER MAPPING FOR regress_testrolx SERVER sv8 OPTIONS (user 'regress_testrolx');
 | 
					CREATE USER MAPPING FOR "Public" SERVER sv8 OPTIONS (user '"Public"');
 | 
				
			||||||
 | 
					CREATE USER MAPPING FOR regress_testrolx SERVER sv9 OPTIONS (user 'regress_testrolx');
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- DROP USER MAPPING IF EXISTS
 | 
					-- DROP USER MAPPING IF EXISTS
 | 
				
			||||||
@@ -371,21 +387,22 @@ DROP USER MAPPING IF EXISTS FOR CURRENT_USER SERVER sv1;
 | 
				
			|||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR "current_user" SERVER sv2;
 | 
					DROP USER MAPPING IF EXISTS FOR "current_user" SERVER sv2;
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR USER SERVER sv3;
 | 
					DROP USER MAPPING IF EXISTS FOR CURRENT_USER SERVER sv3;
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR "user" SERVER sv4;
 | 
					DROP USER MAPPING IF EXISTS FOR USER SERVER sv4;
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR SESSION_USER SERVER sv5;
 | 
					DROP USER MAPPING IF EXISTS FOR "user" SERVER sv5;
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR PUBLIC SERVER sv6;
 | 
					DROP USER MAPPING IF EXISTS FOR SESSION_USER SERVER sv6;
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR "Public" SERVER sv7;
 | 
					DROP USER MAPPING IF EXISTS FOR PUBLIC SERVER sv7;
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR regress_testrolx SERVER sv8;
 | 
					DROP USER MAPPING IF EXISTS FOR "Public" SERVER sv8;
 | 
				
			||||||
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
 | 
					DROP USER MAPPING IF EXISTS FOR regress_testrolx SERVER sv9;
 | 
				
			||||||
SELECT * FROM chkumapping();
 | 
					SELECT * FROM chkumapping();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR CURRENT_ROLE SERVER sv9; --error
 | 
					DROP USER MAPPING IF EXISTS FOR nonexistent SERVER sv10;  -- error
 | 
				
			||||||
DROP USER MAPPING IF EXISTS FOR nonexistent SERVER sv9;  -- error
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- GRANT/REVOKE
 | 
					-- GRANT/REVOKE
 | 
				
			||||||
GRANT regress_testrol0 TO pg_signal_backend; -- success
 | 
					GRANT regress_testrol0 TO pg_signal_backend; -- success
 | 
				
			||||||
@@ -410,38 +427,38 @@ REVOKE ALL PRIVILEGES ON FUNCTION testagg8(int2) FROM PUBLIC;
 | 
				
			|||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg1(int2) TO PUBLIC;
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg1(int2) TO PUBLIC;
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg2(int2) TO CURRENT_USER;
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg2(int2) TO CURRENT_USER;
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg3(int2) TO "current_user";
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg3(int2) TO "current_user";
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg4(int2) TO SESSION_USER;
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg4(int2) TO CURRENT_ROLE;
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg5(int2) TO "Public";
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg5(int2) TO SESSION_USER;
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg6(int2) TO regress_testrolx;
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg6(int2) TO "Public";
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg7(int2) TO "public";
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg7(int2) TO regress_testrolx;
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg8(int2)
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg8(int2) TO "public";
 | 
				
			||||||
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagg9(int2)
 | 
				
			||||||
 TO current_user, public, regress_testrolx;
 | 
					 TO current_user, public, regress_testrolx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
					SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg9(int2) TO CURRENT_ROLE; --error
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagga(int2) TO USER; --error
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg9(int2) TO USER; --error
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagga(int2) TO NONE; --error
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg9(int2) TO NONE; --error
 | 
					GRANT ALL PRIVILEGES ON FUNCTION testagga(int2) TO "none"; --error
 | 
				
			||||||
GRANT ALL PRIVILEGES ON FUNCTION testagg9(int2) TO "none"; --error
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
					SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg1(int2) FROM PUBLIC;
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg1(int2) FROM PUBLIC;
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg2(int2) FROM CURRENT_USER;
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg2(int2) FROM CURRENT_USER;
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg3(int2) FROM "current_user";
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg3(int2) FROM "current_user";
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg4(int2) FROM SESSION_USER;
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg4(int2) FROM CURRENT_ROLE;
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg5(int2) FROM "Public";
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg5(int2) FROM SESSION_USER;
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg6(int2) FROM regress_testrolx;
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg6(int2) FROM "Public";
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg7(int2) FROM "public";
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg7(int2) FROM regress_testrolx;
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg8(int2)
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg8(int2) FROM "public";
 | 
				
			||||||
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagg9(int2)
 | 
				
			||||||
 FROM current_user, public, regress_testrolx;
 | 
					 FROM current_user, public, regress_testrolx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
					SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg9(int2) FROM CURRENT_ROLE; --error
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagga(int2) FROM USER; --error
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg9(int2) FROM USER; --error
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagga(int2) FROM NONE; --error
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg9(int2) FROM NONE; --error
 | 
					REVOKE ALL PRIVILEGES ON FUNCTION testagga(int2) FROM "none"; --error
 | 
				
			||||||
REVOKE ALL PRIVILEGES ON FUNCTION testagg9(int2) FROM "none"; --error
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
					SELECT proname, proacl FROM pg_proc WHERE proname LIKE 'testagg_';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -481,7 +498,7 @@ REVOKE pg_read_all_settings FROM regress_role_haspriv;
 | 
				
			|||||||
\c
 | 
					\c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DROP SCHEMA test_roles_schema;
 | 
					DROP SCHEMA test_roles_schema;
 | 
				
			||||||
DROP OWNED BY regress_testrol0, "Public", "current_user", regress_testrol1, regress_testrol2, regress_testrolx CASCADE;
 | 
					DROP OWNED BY regress_testrol0, "Public", "current_role", "current_user", regress_testrol1, regress_testrol2, regress_testrolx CASCADE;
 | 
				
			||||||
DROP ROLE regress_testrol0, regress_testrol1, regress_testrol2, regress_testrolx;
 | 
					DROP ROLE regress_testrol0, regress_testrol1, regress_testrol2, regress_testrolx;
 | 
				
			||||||
DROP ROLE "Public", "None", "current_user", "session_user", "user";
 | 
					DROP ROLE "Public", "None", "current_role", "current_user", "session_user", "user";
 | 
				
			||||||
DROP ROLE regress_role_haspriv, regress_role_nopriv;
 | 
					DROP ROLE regress_role_haspriv, regress_role_nopriv;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user