SET
名称
SET — 为会话设置运行时参数
SET variable { TO | = } { 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
输入
variable
可设置的全局变量.
value
参数的新值.
可能的变量和许可的值是.
CLIENT_ENCODING | NAMES
设置多字节客户端编码。参数是:
value
把客户端多字节编码设为 value。声明的编码方式必须为后端支持。
这个特性只有在对制作 Postgres 的配置阶段声明了 MULTIBYTE 支持后才生效。
DateStyle
设置日期/时间表示风格。影响输出格式,并且在某些时候会影响输入的解释。
ISO
使用 ISO 8601-风格的日期和时间
SQL
使用 Oracle/Ingres-风格的日期和时间
Postgres
使用传统 Postgres 格式
European
使用 dd/mm/yyyy 作为数字日期表达式.
NonEuropean
使用 mm/dd/yyyy 作为数字日期表达式.
German
使用 dd.mm.yyyy 作为数字日期表达式.
US
与 'NonEuropean'一样
DEFAULT
恢复缺省值 ('US,Postgres')
日期格式初始化可以用下面方法初始化:
设置 PGDATESTYLE 环境变量.如果一个基于 libpq 的客户端的环境里设置了 PGDATESTYLE,libpq 将在联接启动时自动把 DATESTYLE 设置成为 PGDATESTYLE 的值。
用 -o -e 参数运行 postmaster 可以把日期设置成 European 习惯.要注意的是这个只是对一些日期风格的组合有影响;例如 ISO 风格不被这个参数影响.
改变 src/backend/utils/init/globals.c里的变量
KSQO
Key Set Query Optimizer (键集查询优化)导致查询规划器把 WHERE 子句带有许多 OR 了的 AND 子句的查询(象 "WHERE (a=1 AND b=2) OR (a=2 AND b=3) ...")转换成一个UNION 查询。这个方法可以比缺省的实现更快,但是它不一定得出相同的结果,因为 UNION 隐含的加了一条 SELECT DISTINCT 子句以消除相同的行。KSQO 常用于和 MicroSoft Access 这样的东西并用,它容易生成这种类型的查询。
ON
打开优化。
OFF
关闭优化(缺省设置)。
DEFAULT
等效于声明 SET KSQO='OFF'。
KSQO 算法对带有许多 OR 了的 AND 子句的查询是非常必要的,不过在 Postgres 7.0 和以后的版本里,标准的规划器可以很好的操作这些查询。
输出
SET VARIABLE
成功的返回信息.
WARN: Bad value for variable (value)
如果命令设置变量失败.返回此信息.
描述
SET 将在一个会话过程中为变量修改配置参数.
当前值可以使用 SHOW 获得,而且可以使用 RESET 命令将各个值设回缺省.参数和值都是大小写无关的.注意参数值总是用字符串来表达,所以用单引号括起来.
SET TIME ZONE 改变会话的缺省时区偏移量.一个 SQL-会话总是以缺省的时区偏移作为初始值. SET TIME ZONE 语句用于改变当前的 SQL 会话的缺省时区偏移量.
注意
SET variable 语句是 Postgres 语言的扩展.
请参考 SHOW 和 RESET 命令显示或重置当前值.
用法
设置时区风格为 ISO:
SET DATESTYLE TO 'ISO';
对4个或更多表的查询,使 GEQO 生效:
SET GEQO = 'ON=4';
设置 GEQO 为缺省值:
SET GEQO = DEFAULT;
把时区设置为 Berkeley, California:
SET TIME ZONE 'PST8PDT';
SELECT CURRENT_TIMESTAMP AS today;
兼容性
SQL92
在 SQL92 里没有 SET variable 语句(除了 SET TRANSACTION ISOLATION LEVEL)。SQL92 用于 SET TIME ZONE 的语法有一点点不同,只允许为时区声明一个整数值:
SET TIME ZONE { interval_value_expression | LOCAL }