
# ALTER SESSION
#### 功能描述
ALTER SESSION命令用于定义或修改那些对当前会话有影响的条件或参数。修改后的会话参数会一直保持，直到断开当前会话。
#### 注意事项
- 如果执行SET TRANSACTION之前没有执行START TRANSACTION，则事务立即结束，命令无法显示效果。
- 可以用START TRANSACTION里面声明所需要的transaction_mode(s)的方法来避免使用SET TRANSACTION。具体请参见：[START TRANSACTION](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-42-0661.html#ZH-CN_TOPIC_0000002200419526)。
 
#### 语法格式
- 设置会话的事务参数。
  ```
  ALTER SESSION SET [ SESSION CHARACTERISTICS AS ] TRANSACTION
      { ISOLATION LEVEL { READ COMMITTED } | { READ ONLY  | READ WRITE } } [, ...] ;
  ```
  
- 设置会话的其他运行时参数。
  ```
  ALTER SESSION SET 
      {{config_parameter { { TO  | =  }  { value | DEFAULT }
        | FROM CURRENT }} 
        | TIME ZONE time_zone
        | CURRENT_SCHEMA schema
        | NAMES encoding_name
        | ROLE role_name PASSWORD 'password'
        | SESSION AUTHORIZATION { role_name PASSWORD 'password' | DEFAULT }
        | XML OPTION { DOCUMENT | CONTENT }
      } ;
  ```
  
 
#### 参数说明
- **config_parameter**
  可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。
  - **value**
    config_parameter的新值。可以声明为字符串常量、标识符、数字，或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。
    - DEFAULT
    
    - OFF
    
    - RESET
    
    - 用户指定的值：需要满足修改参数的取值限制
     
  
  - **FROM CURRENT**
    取当前会话中的值设置为configuration_parameter的值。
    
   

- **TIME ZONE timezone**
  用于指定当前会话的本地时区。
  取值范围：有效的本地时区。该选项对应的运行时参数名称为TimeZone，DEFAULT缺省值为PRC。
  
- **CURRENT_SCHEMA**
  **schema**
  CURRENT_SCHEMA用于指定当前的模式。
  取值范围：已存在模式名称。如果模式名不存在，会导致CURRENT_SCHEMA值为空。
  
- **SCHEMA schema**
  同CURRENT_SCHEMA。此处的schema是个字符串。
  
- **NAMES encoding_name**
  用于设置客户端的字符编码。等价于set client_encoding to encoding_name。
  取值范围：有效的字符编码。该选项对应的运行时参数名称为client_encoding，默认编码为UTF8。
  
- **role_name**
  取值范围：字符串。要符合[标识符命名规范](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-42-0327.html#ZH-CN_TOPIC_0000002235339153__zh-cn_topic_0000002235101877_section1257443811315)。
  
- **password**
  角色的密码。要求符合密码的命名规则。
  
- **SESSION AUTHORIZATION**
  当前会话的用户表示符。
  
- **XML OPTION { DOCUMENT \| CONTENT }**
  用于设置XML的解析方式。
  取值范围：CONTENT（缺省）、DOCUMENT
  
 
#### 示例
```
--创建模式ds。
gaussdb=# CREATE SCHEMA ds;
--设置模式搜索路径。
gaussdb=# SET SEARCH_PATH TO ds, public;
--设置日期时间风格为传统的POSTGRES风格（日在月前）。
gaussdb=# SET DATESTYLE TO postgres, dmy;
--设置当前会话的字符编码为UTF8。
gaussdb=# ALTER SESSION SET NAMES 'UTF8';
--设置时区为加州伯克利。
gaussdb=# SET TIME ZONE 'PST8PDT';
--设置时区为意大利。
gaussdb=# SET TIME ZONE 'Europe/Rome';
--设置当前模式。
gaussdb=# ALTER SESSION SET CURRENT_SCHEMA TO tpcds;
--设置XML OPTION为DOCUMENT。
gaussdb=# ALTER SESSION SET XML OPTION DOCUMENT;
--创建角色joe，并设置会话的角色为joe。
gaussdb=# CREATE ROLE joe WITH PASSWORD '********';
gaussdb=# ALTER SESSION SET SESSION AUTHORIZATION joe PASSWORD '*********';
--切换到默认用户。
gaussdb=> ALTER SESSION SET SESSION AUTHORIZATION default;
--删除ds模式。
gaussdb=# DROP SCHEMA ds;
--删除joe。
gaussdb=# DROP ROLE joe;
--开启事务,设置事务级别
gaussdb=# START TRANSACTION;
gaussdb=# ALTER SESSION SET TRANSACTION READ ONLY;
gaussdb=# END;
```
#### 相关链接
[SET](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/gaussdb-42-0651.html#ZH-CN_TOPIC_0000002235459617)
