ALTER ROLE

=====名字=====
ALTER ROLE -- 修改一个数据库角色
=====语法概要=====
 ALTER ROLE name [ [ WITH ] option [ ... ] ]
 
 where option can be:
 
 SUPERUSER | NOSUPERUSER
 | CREATEDB | NOCREATEDB
 | CREATEROLE | NOCREATEROLE
 | CREATEUSER | NOCREATEUSER
 | INHERIT | NOINHERIT
 | LOGIN | NOLOGIN
 | REPLICATION | NOREPLICATION
 | CONNECTION LIMIT connlimit
 | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
 | VALID UNTIL 'timestamp'
 
 ALTER ROLE name RENAME TO new_name
 
 ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
 ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
 ALTER ROLE name [ IN DATABASE database_name ] RESET configuration_parameter
 ALTER ROLE name [ IN DATABASE database_name ] RESET ALL
=====描述=====
ALTER ROLE 修改一个 PostgreSQL 角色的属性。
在语法概述中列出的这个命令的第一个变体可以修改角色的很多属性，这些属性在CREATE ROLE中指定。（除了增加和删除成员关系的选项之外，所有可能的属性都被覆盖了，这个操作应使用 GRANT 和 REVOKE。） 没有在命令出现的属性维持它们之前的设置。数据库超级用户可以给任何角色改变任何设置。 拥有 CREATEROLE 权限的角色可以修改任意这些设置，但是只能给非超级用户角色和非复制用户设置。 普通的角色只能修改它们自己的口令。
第二个变种修改角色的名称。 数据库超级用户可以修改任何角色的名称。 拥有 CREATEROLE 权限的角色可以给非超级用户角色进行重命名。 当前会话的用户是不能改名的。（如果需要这么做，以另外一个用户的身份连接。） 因为 MD5 加密的口令使用角色名字作为加密的salt， 所以，如果口令是 MD5 加密的，那么给一个用户改名会清空其口令。
剩下的变体修改角色的配置变量的会话缺省值，该缺省值既可作用于所有数据库，也可只作用于IN DATABASE子句中指定的数据库。随之该角色开始的新会话，之前设定的参数值就是会话的缺省值，覆盖 postgresql.conf 里面的或者 postgres 命令行上的参数。 角色特定的变量设置仅在登陆时起作用；SET ROLE 和 SET SESSION AUTHORIZATION 不处理角色特定的变量设置。 作用于所有数据库的缺省值会被依附于某个角色的特定数据库设置所覆盖。超级用户可以修改任何人的会话缺省值。 拥有 CREATEROLE 权限的角色可以给非超级用户修改缺省值，普通角色只可以改变自己的会话缺省值。 有些变量不能用这个方法设置，或者是只能由超级用户来设置。
=====参数=====
;name
:需要修改属性的角色的名称。
;SUPERUSER
;NOSUPERUSER
;CREATEDB
;NOCREATEDB
;CREATEROLE
;NOCREATEROLE
;CREATEUSER
;NOCREATEUSER
;INHERIT
;NOINHERIT
;LOGIN
;NOLOGIN
;REPLICATION
;NOREPLICATION
;CONNECTION LIMIT connlimit
;PASSWORD password
;ENCRYPTED
;UNENCRYPTED
;VALID UNTIL 'timestamp'
:这些子句修改由 CREATE ROLE 设置的初始值，参阅该命令获取更多信息。
;new_name
:角色的新名称。
;database_name
:配置变量作用的数据库名。
;configuration_parameter
;value
:把该角色指定的配置参数缺省值设置为value。 如果 value 是 DEFAULT， 或者是使用了等效的 RESET，则删除角色特定的变量设置， 这样该角色将在新的会话里继承系统范围的缺省值。 使用 RESET ALL 清理所有角色特定的设置。SET FROM CURRENT 将会话参数的当前值保存为角色特定值。 如果指定了IN DATABASE子句，则配置参数的修改只针对给定的角色和数据库有效。
:角色特定的变量设置仅在登陆时起作用；SET ROLE 和 SET SESSION AUTHORIZATION 不处理角色特定的变量设置。
:参阅 SET 和 9.1第十八章 获取有关允许的参数名字和数值的更多信息。
=====注意=====
使用 CREATE ROLE 增加新角色， 以及 DROP ROLE 删除角色。
ALTER ROLE 不能改变角色的成员关系。 使用 GRANT 和 REVOKE 来改变。
用这条命令设置非加密口令时必须引起注意。这个口令会被服务器当作明文文本处理，它可能会被记录在客户端命令历史的日志或者服务器日志中。 psql 有一个 \password命令可以用来修改角色口令的同时又不暴露出口令明文。
我们也可以把会话缺省值与数据库绑定，而不是和角色绑定； 参阅 ALTER DATABASE。 如果有冲突，那么特定角色特定数据库的设置覆盖特定角色的设置，特定角色的设置覆盖特定数据库相关的设置。
=====示例=====
改变一个角色的口令：
 ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
移除一个角色的口令：
 ALTER ROLE davide WITH PASSWORD NULL;
改变口令失效的日期，声明口令应该在 2015 年五月四日中午失效， 时区是比 UTC 早一个小时的时区：
 ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';
令一个口令永远有效：
 ALTER ROLE fred VALID UNTIL 'infinity';
赋予一个角色创建其它角色和新数据库的能力：
 ALTER ROLE miriam CREATEROLE CREATEDB;
给一个角色设置非缺省的 maintenance_work_mem 参数值：
 ALTER ROLE worker_bee SET maintenance_work_mem = 100000;
给一个角色设置非缺省的，特定数据库的 client_min_messages 参数：
 ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
=====兼容性=====
ALTER ROLE 语句是 PostgreSQL 扩展。
=====参见=====
CREATE ROLE, DROP ROLE, SET