SET
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的别名。valueSEED设置随机数生成器(即函数
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扩展。