SET 语句 用于修改会话中的配置变量,可以通过 SHOW来查询。

Warning: 在一些情形中,客户端可以删除或者重启和服务端的连接。在进行这些操作后,任何使用SET 配置的会话级别的变量都会失效。因为基于session的变量与用户的连接是有关的。有关不同语言的实例,请看Build an App with CockroachDB 教程。

所需权限

权限 要求

概要

图片

Note: 对于会话设置的SETSET TRANSACTIONSET CLUSTER SETTING 语句没有关系。

参数

SET <session variable> 语句接受连个参数值:变量名与变量的更改值。

变量名是大小写不敏感的。变量的更改值可以是一个或多个值。例如,search_path就是多值的一个变量。

支持的变量

Variable name Description Initial value Can be viewed with SHOW?
application_name 用于统计信息收集的应用名字 空字符串 Yes
database 当前数据库 连接字符串中的数据库,如果未指定,则为空 Yes
default_transaction_isolation New in v2.0: 当前会话的默认隔离级别,更多相关信息,请看 Transaction parametersSET TRANSACTION 在连接是字符串中设置,如果没有设置,则默认为SERIALIZABLE Yes
default_transaction_read_only 当前会话的默认事务访问方式。如果设置成on, 当前会话的事务只允许进行都操作;如果设置成off, 读写都可以。更多相关信息,请看 SET TRANSACTION off Yes
sql_safe_updates 如果设置成 false, 一些不安全的操作可以被操作,如 DROP 一个非空的数据库和这个数据库中所有对象,不使用 WHERE 条件进行DELETE操作,不使用 WHERE 条件进行 UPDATE 操作, 和进行操作 ALTER TABLE .. DROP COLUMN. 更多相关信息,请看Allow Potentially Unsafe SQL Statements 在内置的 built-in SQL client的交互会话中,默认为 true
其他客户端连接设置为false
Yes
search_path Changed in v2.0:为了解析不合理的表名与函数,一些元数据将会被搜索。更多相关信息,请看 Name Resolution. "{public}" Yes
server_version_num New in v2.0: CockcroachDB使用的PostgreSQL 版本。 Version-dependent Yes
timezone 当前会话的默认时区。

值是一个代表当地系统定义时区的字符串。(例如, 'EST', 'America/New_York') 或者对于UTC的一个偏移(e.g., -7, +7). DEFAULT, LOCAL, 或者 0 表示设置该参数为UTC.

更多详细信息,请看 Setting the Time Zone

Changed in v2.0: 在CockroachDB 1.x中,该参数中间有空格,为 "time zone",但是为了和PostgreSQL兼容,现在这个参数中间没有空格
UTC Yes
tracing 跟踪记录状态

更多相关信息,请看 SET TRACING
off Yes
transaction_isolation 当前事务的隔离级别。更多信息,请看 Transaction parameters

Changed in v2.0: 在CockroachDB 1.x中,该参数是transaction isolation level(有空格),为了与PostgreSQL兼容,改成当前的名字。
SERIALIZABLE Yes
transaction_priority 事务优先级。相关更多信息,请看Transaction parameters

Changed in v2.0: 在CockroachDB 1.x中,该参数是 transaction priority (有空格),为了与PostgreSQL兼容,改成当前的名字。
NORMAL Yes
transaction_read_only 事务发访问模式。更多信息,请看Set Transaction off Yes
transaction_status 当前事务的状态。 更所信息,请看 Transactions

Changed in v2.0: 在CockroachDB 1.x中,该参数是 transaction status (有空格)。为了与PostgreSQL兼容,改成当前的名字。
NoTxn Yes
client_encoding 忽略; 为了与PostgreSQL客户端的兼容。仅仅可能的值是"UTF8" N/A No
client_min_messages 忽略; 为了与PostgreSQL客户端的兼容。仅仅可能的值是 "on". N/A No
extra_float_digits 忽略; 为了与PostgreSQL客户端的兼容。 N/A No
standard_conforming_strings 忽略; 为了与PostgreSQL客户端的兼容 N/A No

特殊语法案例:

Syntax Equivalent to Notes
USE ... SET database = ... 这为具有MySQL / MSSQL背景的用户提供便利。
SET NAMES ... SET client_encoding = ... 为了与PostgreSQL客户端兼容。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ... SET default_transaction_isolation = ... 为了与标准SQL兼容
SET TIME ZONE ... SET timezone = ... 为了与PostgreSQL客户端兼容。

例子

设置简单变量

以下演示如何使用SET来设置当前会话的默认数据库。

> SET database = bank;
> SHOW database;
+----------+
| database |
+----------+
| bank     |
+----------+
(1 row)

将变量设置成包含空格的值

下面展示如何使用引号来使用包含空格的值:

> SET database = "database name with spaces";
> SHOW database;
+---------------------------+
|         database          |
+---------------------------+
| database name with spaces |
+---------------------------+
(1 row)

设置变量成一系列值

下面展示如何把一系列值赋给变量

> SET search_path = pg_catalog,public;
> SHOW search_path;
+---------------------------+
|        search_path        |
+---------------------------+
| pg_catalog, public        |
+---------------------------+
(1 row)

重置一个变量值为默认初始值

Note: 也可以使用RESET 来重置变量值。

> SET default_transaction_isolation = SNAPSHOT;
> SHOW default_transaction_isolation;
+-------------------------------+
| default_transaction_isolation |
+-------------------------------+
| SNAPSHOT                      |
+-------------------------------+
(1 row)
> SET default_transaction_isolation = DEFAULT;
> SHOW default_transaction_isolation;
+-------------------------------+
| default_transaction_isolation |
+-------------------------------+
| SERIALIZABLE                  |
+-------------------------------+
(1 row)

SET TIME ZONE

Warning 作为最佳实践,我们不推荐这个设置,而且避免设置数据库的会话时间。我们更推荐把UTC 的值转变成客户端时区的值。

可以通过SET TIME ZONE来控制当前会话的客户端默认时区。这将会使这个会话的所有TIMESTAMP WITH TIME ZONE 出现值的偏移

Note 在SET TIME ZONE设置中,CockroachDB使用UTC作为默认时区。

参数

时区值表示当前会话所在的时区。 值是一个代表当地系统定义时区的字符串。(例如, 'EST', 'America/New_York') 或者对于UTC的一个偏移(e.g., -7, +7).。DEFAULT, LOCAL, 或者 0 表示设置该参数为UTC.

例子:通过 SET TIME ZONE设置默认时区

> SET TIME ZONE 'EST'; -- same as SET "timezone" = 'EST'
> SHOW TIME ZONE;
+-----------+
| time zone |
+-----------+
| EST       |
+-----------+
(1 row)
> SET TIME ZONE DEFAULT; -- same as SET "timezone" = DEFAULT
> SHOW TIME ZONE;
+-----------+
| time zone |
+-----------+
| UTC       |
+-----------+
(1 row)

SET TRACING

SET TRACING 改变当前会话的跟踪记录状态。可以通过SHOW TRACE FOR SESSION 语句查看跟踪记录。

Value Description
off 关闭跟踪记录
cluster 启用跟踪记录,收集分布式跟踪记录。
on cluster一样
kv 除了是"kv messages"是收集,其他和cluster一样。相关信息,请看SHOW TRACE.
local 启用跟踪记录; 不过仅仅收集本地节点发出的跟踪消息。

See Also