SET
SET — 设置会话的运行时参数
大纲
SETvariable{ TO | = } { 'value' | DEFAULT } SET TIME ZONE { 'timezone' | LOCAL };
输入
variable可设置的全局参数。
value参数的新值。
可能的变量和允许的值有:
- 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 环境变量。 使用 -oe 参数运行 postmaster,把日期设为 'European' 约定。注意这只影响日期风格的一些组合;例如 ISO 风格不受这个参数影响。 更改 src/backend/utils/init/globals.c中的变量。globals.c中可以更改的变量有:bool EuroDates = false true int DateStyle = USE_ISO_DATES USE_POSTGRES_DATES USE_ISO_DATES USE_SQL_DATES USE_GERMAN_DATES- TIMEZONE
timezone 的可用值取决于你的操作系统。例如在 Linux 上,/usr/lib/zoneinfo 包含时区数据库。
下面是一些有效的 timezone 值:
- 'PST8PDT'
把时区设为加利福尼亚州
- 'Portugal'
把时区设为葡萄牙。
- 'Europe/Rome'
把时区设为意大利。
- DEFAULT
把时区设为你的本地时区(TZ 环境变量的值)。
如果指定了无效的时区,时区会变成 GMT(至少在大多数系统上如此)。
使用 libpq 的前端可以通过设置 PGTZ 环境变量来初始化。
上面所示的第二种语法允许用与 SQL92
SET TIME ZONE类似的语法设置时区。LOCAL 关键字只是为兼容 SQL92 而提供的 DEFAULT 的另一种形式。
还有一些内部参数或优化参数也可以由
SET 命令指定:
- COST_HEAP
设置优化器使用的堆扫描默认代价。
float4把堆扫描的代价设为指定的浮点值。
- DEFAULT
把堆扫描的代价设为默认值。
前端可以通过设置 PGCOSTHEAP 环境变量来初始化。
- COST_INDEX
设置优化器使用的索引扫描默认代价。
float4把索引扫描的代价设为指定的浮点值。
- DEFAULT
把索引扫描的代价设为默认值。
前端可以通过设置 PGCOSTINDEX 环境变量来初始化。
- GEQO
设置使用遗传优化器算法的阈值。
- On
对涉及 8 个或更多表的语句启用遗传优化器算法。
- On=
# 接受一个整数参数,对查询中涉及
#个或更多表的语句启用遗传优化器算法。- Off
禁用遗传优化器算法。
- DEFAULT
等价于指定
SET GEQO='on'
这个算法默认开启,即对涉及八个或更多表的语句使用 GEQO。(更多信息见程序员指南中的 GEQO 一章。)
前端可以通过设置 PGGEQO 环境变量来初始化。
- R_PLANS
决定是否允许右手计划求值:
- On
启用计划的右手求值。
- Off
禁用计划的右手求值。
- DEFAULT
等价于指定
SET R_PLANS='off'。
在大关系与小关系连接时可能有用。这个算法默认关闭。GEQO 也不会使用它。
前端可以通过设置 PGRPLANS 环境变量来初始化。
- KSQO
键集查询优化器强制查询优化器优化诸如 MicroSoft Access 生成的重复 OR 子句:
- On
启用这种优化。
- Off
禁用这种优化。
- DEFAULT
等价于指定
SET KSQO='off'。
在大关系与小关系连接时可能有用。这个算法默认关闭。GEQO 也不会使用它。
前端可以通过设置 PGRPLANS 环境变量来初始化。
- QUERY_LIMIT
设置查询返回的行数。
- Value
查询返回的最大行数。默认允许不限数量的行。
#把查询返回的最大行数设为
#。- DEFAULT
把查询返回的最大行数设为不限。
默认情况下,查询返回的行数没有限制。
输出
- →
SET VARIABLE 成功时返回的消息。
- →
WARN: Bad value forvariable(value) 如果命令未能设置变量。
描述
SET 会在会话期间修改变量的配置参数。
当前值可以用 SHOW 获得,值可以用 RESET 恢复为默认值。参数和值不区分大小写。注意值字段总是以字符串形式指定,因此用单引号括起。
SET TIME ZONE 更改会话的默认时区偏移。SQL 会话总是以一个初始的默认时区偏移开始。SET TIME ZONE 语句用于更改当前 SQL 会话的默认时区偏移。
注解
SET
语句是一种 Postgres 语言扩展。
variable
请参阅 SHOW 和 RESET 来显示或重置当前值。
用法
--Set the style of date to ISO: -- SET DATESTYLE TO 'ISO';
--Set GEQO to default: -- SET GEQO = DEFAULT;
--Turn on right-hand evaluation of plans: -- SET R_PLANS TO 'on';
--set the timezone for Berkeley, California: SET TIME ZONE 'PST8PDT'; SELECT CURRENT_TIMESTAMP AS today; today ---------------------- 1998-03-31 07:41:21-08
--set the timezone for Italy: SET TIME ZONE 'Europe/Rome'; SELECT CURRENT_TIMESTAMP AS today; today ---------------------- 1998-03-31 17:41:31+02
兼容性
SQL92
SQL92 中没有
SET 。SQL92 的 variableSET TIME ZONE
语法稍有不同,只允许用单个整数值指定时区:
SET TIME ZONE { interval_value_expression | LOCAL }