PostgreSQL7.0手册-用户手册-19. SQL命令-SET
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 将导致规划器在存在其他可用方
名称
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 将导致规划器在存在其他可用方

