SET

Name

SET — 设置运行时参数
SET variable { TO | = } { value | 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
  

输入

variable

可设置的全局变量.

value

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

描述

SET 命令改变运行时配置参数. 可以改变的参数是:

CLIENT_ENCODING, NAMES

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

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

DATESTYLE

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

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

ISO

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

SQL

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

Postgres

使用传统 Postgres格式

German

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

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

European

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

NonEuropean, US

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

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

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

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

DateStyle 选项只是为了移植应用用的. 要格式化你的日期/时间值来做选择,请用 to_char 家族的函数.

SEED

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

value

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

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

SELECT setseed(value);
	    

SERVER_ENCODING

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

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

TIME ZONE, TIMEZONE

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

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

PST8PDT

把时区值设为 California.

Portugal

把时区值设为 Portugal.

'Europe/Rome'

把时区值设为 Italy

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

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

例子

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

SET DATESTYLE TO Postgres,European;
把时区设置为 Berkeley, California, 使用双引号保存时区声明里大写字符的属性 (注意这里的日期/时间格式是 ISO):
 
SET TIME ZONE "PST8PDT";
SELECT CURRENT_TIMESTAMP AS today;
   
         today
------------------------
 1998-03-31 07:41:21-08
设置时区为 Italy(注意这里要求的单或者双引号来操作特殊的字符):
 
SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS today;
   
         today
------------------------
 1998-03-31 17:41:31+02

兼容性

SQL92

上面显示的第二种语法(SET TIME ZONE) 试图仿真 SQL92.不过,SQL只允许数字时区偏移. 所有其他参数设置(包括上面第一种语法)都是 Postgres 扩展.