↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 命令 / 会话与参数

SQL COMMAND · 会话与参数

SET

更改运行时参数

SET会话与参数引入 10(基线)现存至 20 devel1 次语法变更

动词
SET
对象
—
引入版本
10(基线)
状态
现存
语法变更次数
1
手册小节数
6

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 无变化。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

SET SESSION LOCAL configuration_parameter TO = value ' value ' DEFAULT
SET · 语法 2
SET SESSION LOCAL TIME ZONE value ' value ' LOCAL DEFAULT

语法概要

SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { value | 'value' | LOCAL | DEFAULT }

PostgreSQL 18 手册 · 查看完整参考页

描述

SET命令用于更改运行时配置参数。许多在第 19 章中列出的运行时参数都可以通过 SET即时更改。(有些参数只能由超级用户以及被授予该参数SET权限的用户更改。还有一些参数在服务器启动或会话开始之后便无法再更改。)SET只影响当前会话所使用的值。

如果在一个随后被中止的事务中发出SET(或者等效的SET SESSION),那么在事务回滚时,SET命令的效果就会消失。一旦该事务提交,这些效果就会持续到会话结束,除非被另一个SET覆盖。

SET LOCAL的效果只持续到当前事务结束,无论事务是否提交。一种特殊情况是:在同一个事务中先执行 SET,再执行SET LOCAL。这样SET LOCAL设置的值会一直生效到事务结束,但在此之后(如果该事务被提交),SET设置的值将生效。

SET或SET LOCAL的效果,也会因为回滚到早于该命令的保存点而被取消。

如果在一个针对同一变量带有SET选项的函数内使用 SET LOCAL(见CREATE FUNCTION),那么SET LOCAL命令的效果会在函数退出时消失;也就是说,无论如何都会恢复函数被调用时生效的值。这使得SET LOCAL 可以在函数内部用于动态或重复地更改某个参数,同时仍能方便地利用 SET选项保存并恢复调用者的值。不过,普通的 SET命令会覆盖任何外围函数的SET选项;除非回滚,否则它的效果会一直保留。

注意

在PostgreSQL 8.0 到 8.2 版本中,SET LOCAL的效果会因为释放一个更早的保存点,或者成功退出某个PL/pgSQL异常块而被取消。由于这种行为被认为不够直观,因此后来对其进行了更改。

参数

SESSION

指定该命令对当前会话生效。(如果既没有出现SESSION,也没有出现LOCAL,这就是默认情况。)

LOCAL

指定该命令只对当前事务生效。在COMMIT或 ROLLBACK之后,会话级设置会再次生效。在事务块外发出该命令会发出警告,但除此之外没有效果。

configuration_parameter

可设置的运行时参数名称。可用参数见第 19 章以及下文。

value

参数的新值。根据具体参数的不同,值可以指定为字符串常量、标识符、数字,或由这些构成的逗号分隔列表。也可以写成DEFAULT,表示把该参数重置为其默认值(即当前会话中如果从未执行过 SET,它本应具有的值)。

除了在第 19 章中记录的配置参数之外,还有少数参数只能用SET命令调整,或者具有特殊语法:

SCHEMA

SET SCHEMA 'value'是 SET search_path TO value的别名。使用这种语法时只能指定一个模式。

NAMES

SET NAMES 'value'是 SET client_encoding TO value的别名。

SEED

设置随机数生成器(即函数random)的内部种子。允许的值是 -1 到 1(含端点)之间的浮点数。

种子也可以通过调用函数setseed来设置:

SELECT setseed(value);
TIME ZONE

SET TIME ZONE 'value'是 SET timezone TO 'value'的别名。SET TIME ZONE语法允许对时区指定使用特殊语法。下面是一些有效值示例:

'America/Los_Angeles'

加利福尼亚州伯克利所使用的时区。

'Europe/Rome'

意大利所使用的时区。

-7

UTC 以西 7 小时的时区(等同于 PDT)。正值表示位于 UTC 以东。

INTERVAL '-08:00' HOUR TO MINUTE

UTC 以西 8 小时的时区(等同于 PST)。

LOCAL
DEFAULT

将时区设置为本地时区(即服务器timezone的默认值)。

以数字或时间间隔给出的时区设置在内部会被转换为 POSIX 时区语法。例如,在SET TIME ZONE -7之后,SHOW TIME ZONE 会报告<-07>+07。

SET不支持时区缩写;关于时区的更多信息,见第 8.5.3 节。

注解

函数set_config提供了等效功能;见第 9.28.1 节。此外,也可以对 pg_settings 系统视图执行 UPDATE,以实现与SET等效的操作。

示例

设置模式搜索路径:

SET search_path TO my_schema, public;

将日期风格设置为传统POSTGRES风格,并采用“日在月之前”的输入惯例:

SET datestyle TO postgres, dmy;

将时区设置为加利福尼亚州伯克利所使用的时区:

SET TIME ZONE 'America/Los_Angeles';

将时区设置为意大利所使用的时区:

SET TIME ZONE 'Europe/Rome';

兼容性

SET TIME ZONE扩展了 SQL 标准定义的语法。标准只允许使用数值形式的时区偏移量,而PostgreSQL 允许更灵活的时区指定方式。其他所有SET特性都是 PostgreSQL扩展。

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 20← 19正文更新

    正文更新
  2. PostgreSQL 19← 18语法变化

    + SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value [, ...] | DEFAULT }− SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }− SET [ SESSION | LOCAL ] TIME ZONE { value | 'value' | LOCAL | DEFAULT }正文更新
  3. PostgreSQL 17← 16正文更新

    正文更新
  4. PostgreSQL 15← 14正文更新

    正文更新
  5. PostgreSQL 14← 13正文更新

    正文更新
  6. PostgreSQL 13← 12正文更新

    正文更新
  7. PostgreSQL 12← 11正文更新

    正文更新
  8. PostgreSQL 11← 10正文更新

    正文更新

同组命令

命令动词对象版本变动最近变更
SESSIONS & SETTINGS会话与参数8 条↑
DISCARDDISCARD— —
丢弃会话状态现存
LISTENLISTEN— —
监听通知现存
NOTIFYNOTIFY— —
发出一个通知现存
RESETRESET— —
将一个运行时参数的值恢复为默认值现存
SETSET— 191 次
更改运行时参数现存
SHOWSHOW— —
显示一个运行时参数的值现存
UNLISTENUNLISTEN— —
停止监听通知现存
ALTER SYSTEMALTERSYSTEM 111 次
更改服务器配置参数现存