SET
Name
SET -- 修改运行时参数
Synopsis
SET [ SESSION | LOCAL ] _configuration_parameter_ { TO | = } { _value_ | '_value_' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { _timezone_ | LOCAL | DEFAULT }
描述
SET
命令修改运行时配置参数。许多在Chapter 18 里面列出的运行时参数可以用SET
在运行时设置。但是有些要求使用超级用户权限来修改, 而其它有些则在服务器或者会话开始之后不能修改。请注意SET
只影响当前会话使用的数值。
如果SET
(或相等的SET SESSION
)是在一个稍后退出的事务里发出的, 那么SET
命令的效果将在事务回滚之后消失。一旦包围它的事务提交, 那么其效果将持续到会话结束,除非被另外一个SET
覆盖。
不管是否提交,SET LOCAL
的效果只持续到当前事务结束。 一个特例是在一个事务里面的SET
后面跟着一个SET LOCAL
: 在事务结束之前只能看到SET LOCAL
的数值,但是之后(如果事务提交), 则是SET
的值生效。
SET
或SET LOCAL
的影响也可以通过回滚到一个命令之前的保存点取消。
如果SET LOCAL
在一个对相同变量有SET
选项的函数内使用 (请参阅CREATE FUNCTION),SET LOCAL
命令的影响在函数退出时消失;也就是说,函数调用时起作用的值不论如何都会还原。 这允许SET LOCAL
用来对函数内的一个参数进行动态和反复修改, 尽管仍然方便使用SET
选项来保存和存储调用程序的值。然而, 规则的SET
命令重写任何函数内的SET
选项;其影响将会持续,除非回滚。
Note: 在PostgreSQL 8.0到8.2版本中,一个
SET LOCAL
的影响将通过释放一个较早的保存点被取消,或者通过从一个PL/pgSQL 异常块成功退出。该选项已被更改,因为它被认为是非直观的。
参数
SESSION
声明这个命令只对当前会话起作用。如果SESSION
或LOCAL
都没出现, 那么这个是缺省。
LOCAL
声明该命令只在当前事务中有效。在COMMIT
或者ROLLBACK
之后, 会话级别的设置将再次生效。请注意如果在BEGIN
块之外运行, 那么SET LOCAL
将表现出没有作用, 因为事务将立即结束。
_configuration_parameter_
可设置的运行时参数的名字。可用的参数在Chapter 18和下面有文档。
_value_
参数的新值。值可以声明为字符串常量、标识符、数字,或者逗号分隔的上面这些东西的列表, 视特定变量而定。 对于特定参数是恰当的。可以写出DEFAULT
把这些参数设置为它们的缺省值。(也就是说,如果在当前会话中没有SET
执行, 已有的任何数值都会设置。)
除了在Chapter 18里面有文档记载的配置参数之外, 还有几个只能用SET
命令设置,或者是有特殊的语法的参数。
SCHEMA
SET SCHEMA '``_value_
'是SET search_path TO
_value_
的别名。 使用该语法只可指定一个模式。
NAMES
SET NAMES
_value_
是SET client_encoding TO
_value_
的别名。
SEED
为随机数生成器(函数random
)设置内部的种子。 允许的值是介于 -1 和 1 之间的浮点数,然后它会被乘以 2<sup class="calibre28">31</sup>-1。
也可以通过调用setseed
函数来设置种子:
SELECT setseed(_value_);
TIME ZONE
SET TIME ZONE
_value_
是SET timezone TO
_value_
的一个别名。语法SET TIME ZONE
允许为时区设置特殊的语法。下面是有效值的例子:
'PST8PDT'
加州伯克利的时区。
'Europe/Rome'
意大利时区。
-7
UTC 以西 7 小时的时区(等效于 PDT)。正值为UTC以东。
INTERVAL '-08:00' HOUR TO MINUTE
UTC 以西 8 小时的时区(等效于 PST)。
LOCAL``DEFAULT
将时区设置为你的本地时区(也就是,服务器的timezone
缺省值)。
参阅Section 8.5.3获取有关时区的更多细节。
注意
函数set_config
提供了等效的功能。参阅Section 9.26。 同时,可以UPDATE这个pg_settings
系统视图来执行SET
的等价操作。
例子
设置模式搜索路径:
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扩展。