更新时间:2025-09-11 GMT+08:00
分享

ALTER SESSION

功能描述

ALTER SESSION命令用于定义或修改那些对当前会话有影响的条件或参数。修改后的会话参数会一直保持,直到断开当前会话。

注意事项

  • 如果执行SET TRANSACTION之前没有执行START TRANSACTION,则事务立即结束,命令无法显示效果。
  • 可以用START TRANSACTION里面声明所需要的transaction_mode(s)的方法来避免使用SET TRANSACTION。具体请参见:START TRANSACTION

语法格式

  • 设置会话的事务参数。
    ALTER SESSION SET TRANSACTION
        { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE} } | { READ ONLY  | READ WRITE } } [, ...] ;
  • 设置会话的其他运行时参数。
    ALTER SESSION SET 
        {{config_parameter { { TO  | =  }  { value | DEFAULT } | FROM CURRENT }} 
          | TIME ZONE time_zone
          | CURRENT_SCHEMA schema
          | SCHEMA 'schema'
          | NAMES encoding_name
          | NAMES encoding_name COLLATE collate_name
          | ROLE role_name PASSWORD 'password'
          | SESSION AUTHORIZATION { role_name PASSWORD 'password' | DEFAULT }
        } ;

参数说明

  • 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 role_name

    role_name取值范围:已存在的角色名,角色名要求详见•role_name

  • PASSWORD 'password'

    password为角色的密码。要求符合密码的命名规则。

  • SESSION AUTHORIZATION

    当前会话的用户表示符。

  • ISOLATION LEVEL

    指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。

    取值范围:

    • READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。
    • READ UNCOMMITTED:读未提交隔离级别,指定后的行为和READ COMMITTED行为一致。

示例

-- 创建模式ds。
m_db=# CREATE SCHEMA ds;

--设置模式搜索路径。
m_db=# SET SEARCH_PATH TO ds, public;

--设置日期时间风格为传统的POSTGRES风格(日在月前)。
m_db=# SET DATESTYLE TO postgres, dmy;

--设置当前会话的字符编码为UTF8。
m_db=# ALTER SESSION SET NAMES 'UTF8';

--设置时区为加州伯克利。
m_db=# SET TIME ZONE 'PST8PDT';

--设置时区为意大利。
m_db=# SET TIME ZONE 'Europe/Rome';

--设置当前模式。
m_db=# ALTER SESSION SET CURRENT_SCHEMA TO ds;
--删除ds模式。
m_db=# DROP SCHEMA ds;
--开启事务,设置事务级别。
m_db=# START TRANSACTION;
m_db=# ALTER SESSION SET TRANSACTION READ ONLY;
m_db=# ROLLBACK;

相关链接

SET

相关文档