首页 > 数据库 > PostgreSQL > 正文

PostgreSQL7.0手册-用户手册-19. SQL命令-SET

2019-09-08 23:33:38
字体:
来源:转载
供稿:网友
SET
名称
SET ― 为会话设置运行时参数 

语法
SET variable { TO | = } { value | 'value' | DEFAULT }
SET CONSTRAINTS {ALL | constraintlist} mode
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
  
输入
variable 
可设置的全局变量. 
value 
参数的新值.DEFAULT 可以用于声明把参数恢复为缺省值.允许使用字串数组,但是更复杂的结构需要用单引号或者双引号引起来. 
可能的变量和许可的值是. 
  
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 
  
恢复缺省值 (ISO) 
日期格式初始化可以用下面方法初始化: 
   
 设置 PGDATESTYLE 环境变量.如果一个基于 libpq 的客户端的环境里设置了 PGDATESTYLE,libpq 将在联接启动时自动把 DATESTYLE 设置成为 PGDATESTYLE 的值。 
用 -o -e 参数运行 postmaster 可以把日期设置成 European 习惯.要注意的是这个只是对一些日期风格的组合有影响;例如 ISO 风格不被这个参数影响. 
改变 src/backend/utils/init/globals.c里的变量. 

在 globals.c 里可以更改的变量是: 
   
 bool EuroDates = false | true  
int DateStyle = USE_ISO_DATES | USE_POSTGRES_DATES | USE_SQL_DATES | USE_GERMAN_DATES  


SEED 
为随机数生成器设置内部种子. 
value 
种子的值被随机范围函数使用.典型的值是介于0 和 1之间的浮点数,这个数随后乘以 RAND_MAX.如果使用了超出范围的数值,生成的积隐含地溢出. 
种子还可以通过调用 setseed SQL 函数设置: 

SELECT setseed(value);
这个特性只有在对制作 Postgres 的配置阶段声明了 MULTIBYTE 支持后才生效。 
  
SERVER_ENCODING 
  
设置多字节服务器端编码方式为: 
value 
这个值标识服务器编码. 
这个特性只有在对制作 Postgres 的配置阶段声明了 MULTIBYTE 支持后才生效。 
  
CONSTRAINTS 
  
  
  
  
  
  

SET CONSTRAINTS 影响当前事务约束计算的表现.SET CONSTRAINTS,在 SQL3 里面规范,有如下允许的参数: 

constraintlist 
  
逗号分隔的可推迟的约束名列表. 
mode 
  
  
  
  
  
  

约束模式.允许值是 DEFERRED 和 IMMEDIATE.

在 IMMEDIATE 模式,外键约束在每个查询结束时检查. 
在 DEFERRED 模式,标记为 DEFERRABLE 的外键约束只是在事务提交时或者约束的模式被显式地设为 IMMEDIATE 时才检查.实际上,这些只对外键约束起作用,因此它不应用于 UNIQUE 或者其他约束. 

TIME ZONE, TIMEZONE 
  
时区的可能值与你的操作系统有关.例如 Linux 的/usr/lib/zoneinfo 里面包含时区的数据库. 
  
  
  
  
  
  
  
  

下面是时区的一些有效值. 
PST8PDT 
将时区设为 California (加州) 
Portugal 
将时区设为 Portugal (葡萄牙). 
'Europe/Rome' 
将时区设为 Italy (意大利). 
DEFAULT 
将时区设为你的本地时区(TZ 环境变量的值). 
如果声明了一个无效时区,时区就会变成 GMT(在大多数系统上). 
第二种语法在上面显示,它允许用户用一个类似于 SQL92 SET TIME ZONE 的语法设置时区.LOCAL 关键字只是用于 SQL92 兼容的 DEFAULT 可选的关键字. 

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

TRANSACTION ISOLATION LEVEL 
给当前事务设置隔离级别。 
READ COMMITTED 
当前事务查询将只读取在查询之前提交的数据。READ COMMITTED 是缺省值。 
注意:SQL92 标准要求 SERIALIZABLE 为缺省的隔离级别。
SERIALIZABLE 
当前的事务查询只能读取在该事务里第一个 DML 语句(SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO)执行前的数据。 
还有几个可以 SET 命令声明的用内部的或优化的参数: 
PG_OPTIONS 
设置各种后端参数. 
RANDOM_PAGE_COST 
  
设置优化器对非连续磁盘页面读取的开销的预计值。这是以连续页面读取的开销的倍数计算的。 
  
float8 
 
设置随机页面访问的开销为声明的浮点值。 
CPU_TUPLE_COST 
设置优化器处理查询里每条记录的开销的预计值。这是以连续页面读取的开销的分数进行计算的。 
  
float8 
 
把每条记录的 CPU 处理的开销设置声明的浮点值。 
CPU_INDEX_TUPLE_COST 
设置优化器进行索引扫描时处理每条索引记录的开销的预计值。这是以连续页面读取的开销的分数进行计算的。 
float8 
把每条索引记录的 CPU 处理的开销设置声明的浮点值。 
CPU_OPERATOR_COST 
设置优化器处理 WHERE 子句里每个操作符的开销的预计值。这是以连续页面读取的开销的分数进行计算的。 
float8 
把每个操作符的 CPU 处理的开销设置声明的浮点值。 
EFFECTIVE_CACHE_SIZE 
设置优化器对磁盘缓冲有效尺寸的假设(也就是说,将被 Postgres 数据文件使用的内核的磁盘缓冲的部分)。这是以磁盘页面计量的,通常每块 8Kb。 
float8 
把每个操作符的 CPU 处理的开销设置声明的浮点值。 
ENABLE_SEQSCAN 
允许或者禁止规划器对顺序扫描规划类型的使用。(完全禁止顺序扫描是不可能的,但是把这个变量置为 OFF 将导致规划器在存在其他可用方法的情况下不采用顺序扫描。) 
ON 
允许使用顺序扫描(缺省设置)。 
OFF 
禁止使用顺序扫描。 
ENABLE_INDEXSCAN 
允许或者禁止规划器对索引扫描规划类型的使用。 
ON 
允许使用索引扫描(缺省设置)。 
OFF 
禁止使用索引扫描。 
ENABLE_TIDSCAN 
允许或者禁止规划器对 TID 扫描规划类型的使用。 
ON 
允许使用 TID 扫描(缺省设置)。 
OFF 
禁止使用 TID 扫描。 
ENABLE_SORT 
允许或者禁止规划器对显式排序步骤的使用。(完全禁止显式排序步骤是不可能的,但是把这个变量置为 OFF 将导致规划器在存在其他可用方法的情况下不采用显式排序步骤。) 
ON 
允许使用排序(缺省设置)。 
OFF 
禁止使用排序。 
ENABLE_NESTLOOP 
允许或者禁止规划器对嵌套循环联合规划的使用。(完全禁止嵌套循环联合是不可能的,但是把这个变量置为 OFF 将导致规划器在存在其他可用方法的情况下不采用嵌套循环规划。) 
ON 
允许使用嵌套循环联合(缺省设置)。 
OFF 
禁止使用嵌套循环联合。 
ENABLE_MERGEJOIN 
打开或者关闭规划器对融合(merge join)联合规划的使用。 
ON 
允许使用融合(merge join)联合(缺省设置)。 
OFF 
禁止使用融合(merge join)联合。 
ENABLE_HASHJOIN 
打开或者关闭规划器对哈希(散列)规划的使用。 
ON 
允许使用哈希(散列)联合(缺省设置)。 
OFF 
禁止使用哈希(散列)联合。 
GEQO 
为使用基因优化器算法设置阈值. 
ON 
允许基因优化器算法优化带有11个或11个以上表的语句.(这也是缺省设置) 
  
ON=# 
带一个整数参数,允许优化器优化带有 # 或更多的表的查询. 
  
OFF 
禁用基因优化器. 
请参考程序员手册中关于 GEQO 的章节获取关于查询优化的更多信息。 
如果一个基于 libpq 的客户端的环境里设置了 PGGEQO 环境变量,libpq 将在联接启动时自动把 GEQO 设置成为 PGGEQO 的值。 

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 和以后的版本里,标准的规划器可以很好的操作这些查询。 
MAX_EXPR_DEPTH 
设置分析器可接受的最大表达式嵌套深度.缺省值对任何常见查询都足够高了,但是你可以根据需要提高它.(不过如果你升得太高,你就会冒因为堆栈溢出而导致后端崩溃的危险.) 
integer 
最大深度.
输出
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;
   
         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
在 SQL92 里没有 SET variable 语句(除了 SET TRANSACTION ISOLATION LEVEL)。SQL92 用于 SET TIME ZONE 的语法有一点点不同,只允许为时区声明一个整数值: 
SET TIME ZONE { interval_value_expression | LOCAL }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选