SET SESSION CHARACTERISTICS AS TRANSACTION

设置在此语句发出后开始的所有事务的隔离级别和访问模式。

事务将保留其隔离级别直至其完成,即使在事务处理期间会话的隔离级别发生更改也是如此。Vertica 内部进程(例如 Tuple Mover刷新操作)以及 DDL 操作始终以 SERIALIZABLE 隔离级别运行以确保一致性。

语法

SET SESSION CHARACTERISTICS AS TRANSACTION settings
设置
以下两项中的一个或两个:
  • ISOLATION LEVEL [argument](#IsolationArgs)
  • [READ ONLY | READ WRITE](#ReadWrite)

ISOLATION LEVEL 实参

ISOLATION LEVEL 子句用于确定当同时运行其他多个事务时,此事务可以访问的数据。如果事务已运行,则不能在第一个查询 (SELECT) 或 DML 语句(INSERT、DELETE、UPDATE)之后更改隔离级别。

将 ISOLATION LEVEL 设置为以下实参之一:

SERIALIZABLE
设置最严格的 SQL 事务隔离级别。此级别连续而不是并发模拟事务。它持有锁并阻止写入操作,直到事务完成为止。

使用 SERIALIZABLE 的应用程序必须准备好在序列化失败后重试事务。对于正常的查询操作,不建议使用此隔离级别。

将事务隔离级别设置为 SERIALIZABLE 不会应用于临时表。临时表通过其事务范围进行隔离。

REPEATABLE READ
自动转换为 SERIALIZABLE
READ COMMITTED
默认值,允许并发事务。
READ UNCOMMITTED
自动转换为 READ COMMITTED

READ WRITE/READ ONLY

您可以将事务访问模式设置为以下几项之一:

READ WRITE
默认值,允许对 SQL 语句进行读取/写入。
READ ONLY
不允许需要写入权限的 SQL 语句:
  • 对任何非临时表的 INSERT、UPDATE、DELETE 和 COPY 操作。

  • CREATE、ALTER 和 DROP

  • GRANT、REVOKE

  • EXPLAIN(如果要解释的 SQL 语句需要写入权限)。

特权

查看会话事务特征

SHOW TRANSACTION_ISOLATIONSHOW TRANSACTION_READ_ONLY 可显示当前会话的事务设置:

=> SHOW TRANSACTION_ISOLATION;
         name          |   setting
-----------------------+--------------
 transaction_isolation | SERIALIZABLE
(1 row)

=> SHOW TRANSACTION_READ_ONLY;
         name          | setting
-----------------------+---------
 transaction_read_only | true
(1 row)