↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.4 已于 2003 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

SET

SET — 设置会话的运行时参数

大纲


SET variable { 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 for variable (value)

如果命令未能设置变量。

描述

SET 会在会话期间修改变量的配置参数。

当前值可以用 SHOW 获得,值 可以用 RESET 恢复为默认值。 参数和值不区分大小写。注意值 字段总是以字符串形式指定,因此用 单引号括起。

SET TIME ZONE 更改会话的 默认时区偏移。 SQL 会话总是以一个初始的默认时区 偏移开始。 SET TIME ZONE 语句用于更改当前 SQL 会话的默认 时区偏移。

注解

SET variable 语句是一种 Postgres 语言扩展。

请参阅 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 variable。 SQL92 的 SET TIME ZONE 语法稍有不同, 只允许用单个整数值指定时区:

SET TIME ZONE { interval_value_expression | LOCAL }

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。