2024 年 9 月 26 日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

SET

SET — 更改运行时参数

语法

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

描述

SET 命令更改运行时配置参数。在 第 19 章 中列出的许多运行时参数可以使用 SET 在运行时进行更改。(某些参数只能由超级用户以及已获得对该参数的 SET 权限的用户更改。还有一些参数在服务器或会话启动后无法更改。)SET 仅影响当前会话使用的值。

如果 SET(或等效的 SET SESSION)在随后中止的事务中发出,则 SET 命令的效果将在事务回滚时消失。一旦周围的事务提交,其效果将持续到会话结束,除非被另一个 SET 覆盖。

SET LOCAL 的效果仅持续到当前事务结束,无论事务是提交还是回滚。一个特殊情况是 SET 后跟 SET LOCAL 在单个事务中:SET LOCAL 值将持续到事务结束,但在之后(如果事务提交),SET 值将生效。

SETSET LOCAL 的效果也会被回滚到早于命令的保存点而取消。

如果 SET LOCAL 用于具有相同变量的 SET 选项的函数中(参见 CREATE FUNCTION),则 SET LOCAL 命令的效果将在函数退出时消失;也就是说,调用函数时生效的值无论如何都会被恢复。这允许 SET LOCAL 用于在函数中动态或重复更改参数,同时仍然可以使用 SET 选项来保存和恢复调用者的值。但是,常规的 SET 命令会覆盖任何周围函数的 SET 选项;其效果将持续存在,除非回滚。

注意

PostgreSQL 版本 8.0 到 8.2 中,SET LOCAL 的效果将被释放早于保存点,或成功退出 PL/pgSQL 异常块所取消。这种行为已经改变,因为它被认为不直观。

参数

SESSION

指定命令对当前会话生效。(如果 SESSIONLOCAL 都没有出现,则这是默认值。)

LOCAL

指定命令仅对当前事务生效。在 COMMITROLLBACK 之后,会话级设置将再次生效。在事务块之外发出此命令会发出警告,否则不会有任何影响。

configuration_parameter

可设置的运行时参数的名称。可用参数在 第 19 章 及以下部分有介绍。

value

参数的新值。值可以指定为字符串常量、标识符、数字,或这些的逗号分隔列表,具体取决于特定参数的需要。可以编写 DEFAULT 来指定将参数重置为其默认值(即,如果在当前会话中没有执行 SET,它将具有的值)。

除了在 第 19 章 中介绍的配置参数之外,还有一些参数只能使用 SET 命令调整,或者具有特殊的语法

SCHEMA

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

NAMES

SET NAMES valueSET 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

-7

与 UTC 相差 7 小时的时区(相当于 PDT)。正值表示东部时区。

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 系统视图以执行等效于 SET 的操作。

示例

SET search_path TO my_schema, public;

设置模式搜索路径

SET datestyle TO postgres, dmy;

将日期样式设置为传统的 POSTGRES,采用 日在前,月在后 输入约定

SET TIME ZONE 'America/Los_Angeles';

设置加利福尼亚州伯克利的时区

SET TIME ZONE 'Europe/Rome';

设置意大利的时区

兼容性

SET TIME ZONE 扩展了 SQL 标准中定义的语法。标准只允许数字时区偏移,而 PostgreSQL 允许更灵活的时区规范。所有其他 SET 功能都是 PostgreSQL 扩展。

另请参阅

 SET CONSTRAINTS

提交更正