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只影响当前会话使用的数值。

如果SETSET 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: PostgreSQL8.0到8.2版本中,一个SET LOCAL的 影响将通过发布一个较早的保存点被取消,或者通过从一个PL/pgSQL当异 常块成功退出。该选项一杯更改,因为它被认为是非直观的。

参数

SESSION

声明这个命令只对当前会话起作用。如果SESSIONLOCAL都没出现, 那么这个是缺省。

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 valueSET client_encoding TO value的别名。

SEED

为随机数生成器(函数random)设置内部的种子。 允许的值是介于-1和1之间的浮点数,然后它会被乘以231-1

也可以通过调用setseed函数来设置种子:

SELECT setseed(value);

TIME ZONE

SET TIME ZONE valueSET 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.24。 同时,可以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扩展。

又见

RESET, SHOW