SET

Name

SET -- 改变运行时参数

Synopsis

SET variable { TO | = } { value | 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
  

输入

variable

可设置的全局变量.

value

参数的新值.DEFAULT 可以用于声明把参数恢复为缺省值.允许使用字串数组, 但是更复杂的结构需要用单引号或者双引号引起来.

描述

SET 命令修改运行时配置参数。许多在 Section 3.4 in PostgreSQL 7.3 管理员手册 里面列出的运行时参数可以用 SET 在运行时设置。 (但是有些要求使用超级用户权限来修改,而其它有些则在服务器或者会话 开始之后不能修改。)请注意 SET 只影响当前会话使用的数值。

如果 SET 或者 SET SESSION 是 在一个稍后退出的事务里发出的,那么 SET 命令的效果 将在事务回滚的之后小时。(这个行为和PostgreSQL版本 7.3 之前的不同,那个时候 SET 的效果在后面的错误之后不会回滚。) 一旦包围它的事务提交,那么其效果将持续到事务的结束,除非被另外一个 SET 覆盖。

SET LOCAL 的效果只持续到当前事务结束,不管是否提交。 一个特例是在一个事务里面的 SET 后面跟着一个 SET LOCAL:在事务结束之前只能看到 SET LOCAL 的数值,但是之后(如果事务提交),则是 SET 的值生效。

即使 autocommit 设置为 offSET 也不开始一个新的事务块。参阅 Section 3.4 in PostgreSQL 7.3 管理员手册 里面的 autocommit 小节获取细节。

下面是一些几个可以设置的参数的附加细节:

CLIENT_ENCODING
NAMES

设置多字节客户端编码。声明的编码方式必须为后端支持。

这个特性只有在制作 PostgreSQL 的配置阶段声明了多字节(--enable-multibyte)支持后才生效。

DATESTYLE

设置日期/时间表示风格。有两个独立的配置需要设置: 缺省的日期/时间输出和语意含糊的输入的解释.

下面是日期/时间输出风格:

ISO

使用 ISO 8601-风格的日期和时间(YYYY-MM-DD HH:MM:SS)这是缺省设置.

SQL

使用 Oracle/Ingres-风格的日期和时间.请注意这个风格 和 SQL 没有任何关系(SQL要求使用ISO 8601风格),这个 命名选项是历史原因.

PostgreSQL

使用传统 PostgreSQL格式

German

使用 dd.mm.yyyy 作为数字日期表达式.

下面的两个选项决定 "SQL""PostgreSQL" 两个选项的输出格式的子风格,以及优先的含糊日期输入的解释.

European

使用 dd/mm/yyyy 作为数字化的日期表现形式.

NonEuropean
US

使用 mm/dd/yyyy 作为数字日期表现形式.

SET DATESTYLE 的值可以是来自第一列中的一个(输出风格), 或者是来自第二列中的一个(子风格), 或者来自上面两个列表,并且用逗号分隔两个参数.

日期格式初始化可以用下面方法初始化:

设置 PGDATESTYLE 环境变量. 如果一个基于 libpq 的客户端的环境里设置了 PGDATESTYLE, libpq 将在联接启动时自动把DATESTYLE 设置成为 PGDATESTYLE 的值。
-o -e参数运行 postmaster可以把日期设置成 European

SET DATESTYLE 影响输入的解释并且 提供多种标准输出格式.对于那些需要不同变化或者对输入或 输出有更紧的要求的应用,考虑使用 to_char 族函数.

SEED

为随机数生成器设置内部种子.

value

random范围函数使用的种子的值. 典型的值是介于0 和 1之间的浮点数, 这个数随后乘以 231-1.如果使用了超出范围的数值, 生成的积自动溢出.

种子还可以通过调用 setseed SQL 函数设置:

SELECT setseed(value);
	    

SERVER_ENCODING

设置多字节服务器端编码方式.

这个特性只有在制作 PostgreSQL 的配置阶段声明了多字节支持后才生效。

TIME ZONE
TIMEZONE

为你的会话设置缺省时区.参数可以是一个 SQL 时间间隔常量, 一个整数或者双精度常量,或者一个代表宿主操作系统支持地 时区字串.

用于时区的可能值取决于你的操作系统.例如,在Linux上 /usr/share/zoneinfo 包含时区的数据库.

下面是一些时区的有效值:

'PST8PDT'

把时区值设为 California.

'Portugal'

把时区值设为 Portugal.

'Europe/Rome'

把时区值设为 Italy

7

把时区设置为 GMP 以西 7 小时(等效于 PDT).

INTERVAL '08:00' HOUR TO MINUTE

把时区设置为 GMP 以西 8 小时(等效于 PST).

LOCAL
DEFAULT

把时区值设为你的本地时区(你的操作系统确省的那个).

如果声明了一个非法的时区,时区就设为GMT(在大多数系统上如此).

如果一个基于 libpq 的客户端的环境里设置了PGTZ, libpq 将在联接启动时自动把 TIMEZONE 设置成为PGTZ的值。

一个扩展的其它运行时参数列表可以在 管理员手册里找到

使用 SHOW 来显示当前 的参数设置.

诊断

SET VARIABLE

成功的返回信息.

ERROR: not a valid option name: name

你试图设置的参数不存在.

ERROR: permission denied

为了访问一些设置,你必须是超级用户.

ERROR: name can only be set at start-up

有些参数在服务器启动后就无法更改了.

例子

把日期时间风格设置为传统的 PostgreSQL风格,同时还有Europen(欧洲)风格:

SET DATESTYLE TO PostgreSQL,European;

把时区设置为 Berkeley, California, 使用双引号保存时区声明里大写字符的属性 (注意这里的日期/时间格式是 PostgreSQL):

 
SET TIME ZONE 'PST8PDT';
SELECT CURRENT_TIMESTAMP AS today;
               today
------------------------------------
 Tue Feb 26 07:32:21.42834 2002 PST

设置时区为 Italy(注意这里要求的单或者双引号来操作特殊的字符):

 
SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS today;
   
             today
-------------------------------
 2002-10-08 05:39:35.008271+02

兼容性

SQL92

SET TIME ZONE 扩展了在 SQL9x 里定义的语法. SQL9x 允许只有一个数字时区偏移, 而 PostgreSQL 还允许完整的时区描述符字串. 所有其它的 SET 特性都是 PostgreSQL 扩展.