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
值将生效。
SET
或 SET 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
指定命令仅对当前事务生效。 在 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 之间的浮点数(包括 -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 扩展。
如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表格报告文档问题。