pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
SET — 更改运行时参数
SET [ SESSION | LOCAL ]configuration_parameter{ TO | = } {value| 'value' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE {timezone| LOCAL | DEFAULT }
SET命令用于更改运行时配置参数。许多在 第 17 章中列出的运行时参数都可以通过 SET即时更改。 (有些参数需要超级用户权限才能更改, 还有一些参数在服务器启动或会话开始之后便无法再更改。) SET只影响当前会话所使用的值。
如果在一个随后被中止的事务中发出SET (或者等效的SET SESSION),那么在事务回滚时, SET命令的效果就会消失。(这一行为与 PostgreSQL 7.3 之前的版本不同,那时 SET的效果不会在出现错误后回滚。)一旦该事务提交, 这些效果就会持续到会话结束,除非被另一个SET覆盖。
SET LOCAL的效果只持续到当前事务结束, 无论事务是否提交。一种特殊情况是:在同一个事务中先执行 SET,再执行SET LOCAL。 这样SET LOCAL设置的值会一直生效到事务结束, 但在此之后(如果该事务被提交),SET设置的值 将生效。
SESSION指定该命令对当前会话生效。(如果既没有出现SESSION, 也没有出现LOCAL,这就是默认情况。)
LOCAL指定该命令只对当前事务生效。在COMMIT或 ROLLBACK之后,会话级设置会再次生效。注意,如果在 BEGIN 块之外执行, SET LOCAL 看起来不会有任何效果。
configuration_parameter可设置的运行时参数名称。可用参数见 第 17 章以及下文。
value参数的新值。根据具体参数的不同,值可以指定为字符串常量、标识符、 数字,或由这些构成的逗号分隔列表。可以用DEFAULT 来指定把该参数重置为其默认值。
除了第 17 章中记载的配置参数外,还有几个参数只能通过SET命令调整,或者具有特殊语法:
NAMESSET NAMES 是 valueSET client_encoding TO 的别名。value
SEED设置随机数生成器(即函数 random)的内部种子。允许的值是 0 到 1 之间的浮点数,这些值随后会乘以 231-1。
种子也可以通过调用函数setseed来设置:
SELECT setseed(value);
TIME ZONESET TIME ZONE 是以下写法的别名:valueSET timezone TO 。语法valueSET TIME ZONE允许使用特殊语法指定时区。下面是一些有效值的示例:
'PST8PDT'加利福尼亚州伯克利所使用的时区。
'Europe/Rome'意大利所使用的时区。
-7比 UTC 向西 7 小时的时区(等同于 PDT)。正值表示位于 UTC 以东。
INTERVAL '-08:00' HOUR TO MINUTE比 UTC 向西 8 小时的时区(等同于 PST)。
LOCALDEFAULT把时区设置为你的本地时区(即服务器操作系统默认的时区)。
有关时区的更多信息,见第 8.5.3 节。
函数set_config提供了等效功能。参见 第 9.20 节。
设置模式搜索路径:
SET search_path TO my_schema, public;
将日期风格设置为传统POSTGRES风格,并采用 “日在月之前”的输入惯例:
SET datestyle TO postgres, dmy;
设置加利福尼亚州伯克利的时区:
SET TIME ZONE 'PST8PDT';
将时区设置为意大利所使用的时区:
SET TIME ZONE 'Europe/Rome';
SET TIME ZONE扩展了 SQL 标准定义的语法。标准 只允许使用数值形式的时区偏移量,而PostgreSQL 允许更灵活的时区指定方式。其他所有SET特性都是 PostgreSQL扩展。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。