
# 语句行为
介绍SQL语句执行过程的相关默认参数。
#### search_path
**参数说明：**当一个被引用对象没有指定模式时，此参数设置模式搜索顺序。它的值由一个或多个模式名构成，不同的模式名用逗号隔开。
- 当前会话存放临时表的模式，可以使用别名pg_temp将它列在搜索路径中，如'pg_temp, public' 。 存放临时表的模式始终会作为第一个被搜索的对象，排在pg_catalog和search_path中所有模式的前面，即具有第一搜索优先级。建议用户不要在search_path中显式设置pg_temp。如果在search_path中指定了pg_temp，但不是在最前面，系统会提示设置无效，pg_temp仍被优先搜索。通过使用别名pg_temp，系统只会在存放临时表的模式中搜索表、视图和数据类型这样的数据库对象，不会在里面搜索函数或运算符这样的数据库对象。
- 系统表所在的模式pg_catalog，总是排在search_path中指定的所有模式前面被搜索，即具有第二搜索优先级（pg_temp具有第一搜索优先级）。建议用户不要在search_path中显式设置pg_catalog。如果在search_path中指定了pg_catalog，但不是在最前面，系统会提示设置无效，pg_catalog仍会被作为第二优先搜索。
- 当没有指定一个特定模式而创建一个对象时，它们被放置到以search_path为命名的第一个有效模式中。当搜索路径为空时，会报错误。
- 通过SQL函数current_schema可以检测当前搜索路径的有效值。这和检测search_path的值不尽相同，因为current_schema显示search_path中首位有效的模式名称。
**参数类型：**USERSET
**取值范围：**字符串
**默认值：**"$user",public
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
- $user表示与当前会话用户名同名的模式名，如果这样的模式不存在，$user将被忽略。
- 设置为"$user"，public时，支持共享数据库（没有用户具有私有模式和所有共享使用public），用户私有模式和这些功能的组合使用。可以通过改变默认搜索路径来获得其他效果，无论是全局化的还是私有化的。
- 设置为空串（''）的时候，系统会自动转换成一对双引号。
- 设置的内容中包含双引号，系统会认为是不安全字符，会将每个双引号转换成一对双引号。
 
#### current_schema
**参数说明：**设置当前的模式。
**参数类型：**USERSET
**取值范围：**字符串
**默认值：**"$user",public
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
$user表示与当前会话用户名同名的模式名，如果这样的模式不存在，$user将被忽略。
 #### default_tablespace
**参数说明：**当CREATE命令没有明确声明表空间时，所创建对象（表和索引等）的缺省表空间。
**参数类型：**USERSET
**取值范围：**字符串，空表示使用默认表空间。
**默认值：**空
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
- 值是一个表空间的名字或者一个表示使用当前数据库缺省表空间的空字符串。若指定的是一个非默认表空间，用户必须具有它的CREATE权限，否则尝试创建会失败。
- 临时表不使用此参数，可以用[temp_tablespaces]代替。
- 创建数据库时不使用此参数。默认情况下，一个新的数据库从模板数据库继承表空间配置。
 
#### default_storage_nodegroup
**参数说明：**设置当前的默认建表所在的Node Group，目前只适用普通表。
**参数类型：**USERSET
**取值范围：**字符串
- installation，表示默认建表在安装的Node Group上。
- random_node_group，表示默认建表在随机选择的NodeGroup上，该配置8.1.2及以上版本支持，仅用于测试环境。
- roach_group，表示默认建表在所有节点上，该值为roach工具预留，不能用于其他场景。
- 取值为其他字符串，表示默认建表在设置的Node Group上。
**默认值：**installation
 #### temp_tablespaces
**参数说明：**当一个CREATE命令没有明确指定一个表空间时，temp_tablespaces指定了创建临时对象（临时表和临时表的索引）所在的表空间。在这些表空间中创建临时文件用来做大型数据的排序工作。
其值是一系列表空间名的列表。如果列表中有多个表空间时，每次临时对象的创建，DWS会在列表中随机选择一个表空间；如果在事务中，连续创建的临时对象被放置在列表里连续的表空间中。如果选择的列表中的元素是一个空串，DWS将自动将当前的数据库设为默认的表空间。
**参数类型：**USERSET
**取值范围：** 字符串。空字符串表示所有的临时对象仅在当前数据库默认的表空间中创建，请参见[default_tablespace]。
**默认值：**空
#### check_function_bodies
**参数说明：**设置是否在CREATE FUNCTION执行过程中进行函数体字符串的合法性验证。为了避免产生问题（比如避免从转储中恢复函数定义时向前引用的问题），偶尔会禁用验证。
**参数类型：**USERSET
**取值范围：**布尔型
- on表示在CREATE FUNCTION执行过程中进行函数体字符串的合法性验证。
- off表示在CREATE FUNCTION执行过程中不进行函数体字符串的合法性验证。
**默认值：**on
#### default_transaction_isolation
**参数说明：**设置默认的事务隔离级别。
**参数类型：**USERSET
**取值范围：**枚举型
- read committed：读已提交隔离级别，只能读到已经提交的数据，而不会读到未提交的数据。
- read uncommitted：读未提交隔离级别，DWS不支持read uncommitted，如果设置了read uncommitted，实际上使用的是read committed。
- repeatable read：可重复读隔离级别，仅仅能看到事务开始之前提交的数据，不能看到未提交的数据，以及在事务执行期间由其它并发事务提交的修改。
- serializable：事务可序列化，DWS不支持SERIALIZABLE，如果设置了serializable，实际上使用的是repeatable read。
**默认值：**read committed
#### default_transaction_read_only_probe
**参数说明：**数据库即将只读（磁盘使用率达到90%）时，控制是否终止特殊语句（下盘语句、产生新表或者新物理文件的语句）的执行。该参数由CM模块检测磁盘使用阈值并设置，不建议用户设置。该参数仅9.1.0.200及以上集群版本支持。
**参数类型：**USERSET
**取值范围：**布尔型
- on表示终止特殊语句执行。
- off表示不终止特殊语句执行。
**默认值：**off
 #### default_transaction_deferrable
**参数说明：**控制每个新事务的默认延迟状态。只读事务或者那些比序列化更加低的隔离级别的事务除外。
DWS不支持可串行化的隔离级别，因此，该参数无实际意义。
**参数类型：**USERSET
**取值范围：**布尔型
- on表示默认延迟。
- off表示默认不延迟。
**默认值：**off
#### session_replication_role
**参数说明：**控制当前会话与复制相关的触发器和规则的行为。
**参数类型：**SUSET
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/notice_3.0-zh-cn.png)
设置此参数会丢弃之前所有缓存的执行计划。
**取值范围：**枚举型
- origin，表示从当前会话中复制插入、删除、更新等操作。
- replica，表示从其他地方复制插入、删除、更新等操作到当前会话。
- local，表示函数执行复制时会检测当前登录数据库的角色并采取相应的操作。
**默认值：**origin
#### statement_timeout
**参数说明：**当语句执行时间超过该参数设置的时间（从服务器收到命令时开始计时）时，该语句将会报错并退出执行。
**参数类型：**USERSET
**取值范围：**整型，0～2147483647，单位为毫秒（ms）。
**默认值：**86400000
#### vacuum_freeze_min_age
**参数说明：**指定VACUUM扫描表时用于判断是否用FrozenXID替换事务ID的年龄阈值（在同一个事务中）。
**参数类型：**USERSET
**取值范围：**整型，0～576 460 752 303 423 487
**默认值：**5000000000
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
虽然可以将此参数设为0到10亿之间的任意值，但VACUUM会将实际有效值范围限制在**autovacuum_freeze_max_age**的50%以内。
#### vacuum_freeze_table_age
**参数说明：** 指定VACUUM对全表的扫描冻结元组的时间。如果表的[pg_class](https://support.huaweicloud.com/devg-dws/dws_04_0578.html).relfrozenxid字段的值已经达到了参数指定的时间，VACUUM对全表进行扫描。
**参数类型：**USERSET
**取值范围：**整型，0～576 460 752 303 423 487
**默认值：**15000000000
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
虽然可以将此参数设为零到20亿之间的值，但VACUUM会将实际有效值范围限制在**autovacuum_freeze_max_age**的95%以内。定期的手动VACUUM可以在对此表的反重叠自动清理启动之前运行。
#### bytea_output
**参数说明：**设置bytea类型值的输出格式。
**参数类型：**USERSET
**取值范围：**枚举型
- hex：将二进制数据编码为每字节2位十六进制数字。
- escape：传统化的PostgreSQL格式。采用以ASCII字符序列表示二进制串的方法，同时将那些无法表示成ASCII字符的二进制串转换成特殊的转义序列。
**默认值：**hex
#### xmlbinary
**参数说明：**设置二进制值是如何在XML中进行编码的。
**参数类型：**USERSET
**取值范围：**枚举型
- base64
- hex
**默认值：**base64
#### xmloption
**参数说明：**当XML和字符串值之间进行转换时，设置document或content是否是隐含的。
**参数类型：**USERSET
**取值范围：**枚举型
- document：表示HTML格式的文档。
- content：普通的字符串。
**默认值：**content
#### gin_pending_list_limit
**参数说明：** 设置当GIN索引启用快速更新[FASTUPDATE](https://support.huaweicloud.com/sqlreference-dws/dws_06_0165.html)时，Pending List（待处理列表）容量的最大值。
**Pending List**是GIN索引特有的数据结构，用于临时存储索引更新操作。当GIN索引启用FASTUPDATE参数时，新的索引项不会直接写入主索引结构，而是先存入Pending List，待满足特定条件时再批量合并到主索引中。
当Pending List的容量大于设置值时，会把Pending List中数据批量移动到GIN索引数据结构中以进行清理。单个GIN索引可通过更改索引存储参数覆盖此设置值。
**参数类型：**USERSET
**取值范围：**整型，64～INT_MAX，单位为KB。
**默认值：**4MB
