支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:devel
不支持的版本:12 / 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 LOCALSET LOCAL 值将在事务结束前被看到,但在之后(如果事务已提交),SET 值将生效。

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

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

注意

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

参数

SESSION

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

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 之间的浮点数(包括 -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 系统视图来执行与 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 扩展。

另请参阅

RESETSHOW

提交更正

如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表格报告文档问题。