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

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.5 已于 2004 年 6 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

SET

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

大纲

SET variable { TO | = } { 'value' | DEFAULT }
SET TIME ZONE { 'timezone' | LOCAL | DEFAULT }
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZED }
  

输入

variable

可设置的全局参数。

value

参数的新值。

可能的变量和允许的值有:

CLIENT_ENCODING | NAMES

设置多字节客户端编码。参数有:

value

把多字节客户端编码设为 value。 指定的编码必须为后端所支持。

DEFAULT

把多字节客户端编码设为默认值。

只有在向 configure 指定了 multi-byte 时才会启用。

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 环境变量。
使用 -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
SERVER_ENCODING

设置多字节服务器编码

value

设置多字节服务器编码。

DEFAULT

设置多字节服务器编码。

只有在向 configure 指定了 multi-byte 时才会启用。

TIME ZONE

timezone 的可用值取决于你的操作系统。例如在 Linux 上, /usr/lib/zoneinfo 包含时区数据库。

下面是一些有效的 timezone 值:

'PST8PDT'

把时区设为加利福尼亚州

'Portugal'

把时区设为葡萄牙。

'Europe/Rome'

把时区设为意大利。

DEFAULT

把时区设为你的本地时区 (TZ 环境变量的值)。

如果指定了无效的时区,时区 会变成 GMT(至少在大多数系统上如此)。

使用 libpq 的前端可以通过设置 PGTZ 环境变量来初始化。

上面所示的第二种语法允许用与 SQL92 SET TIME ZONE 类似的语法 设置时区。LOCAL 关键字只是为兼容 SQL92 而提供的 DEFAULT 的另一种形式。

TRANSACTION ISOLATION LEVEL

设置当前事务的隔离级别。

READ COMMITTED

当前事务的查询只读取 在查询开始之前已提交的行。READ COMMITTED 是默认值。

注意

SQL92 标准要求 SERIALIZABLE 为默认的隔离级别。

SERIALIZABLE

当前事务的查询只读取在本事务中 第一条 DML 语句 (SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) 执行之前已提交的行。

还有一些内部参数或优化参数也可以由 SET 命令指定:

COST_HEAP

设置优化器使用的堆扫描默认代价。

float4

把堆扫描的代价设为指定的浮点值。

DEFAULT

把堆扫描的代价设为默认值。

前端可以通过设置 PGCOSTHEAP 环境变量来初始化。

COST_INDEX

设置优化器使用的索引扫描默认代价。

float4

把索引扫描的代价设为指定的浮点值。

DEFAULT

把索引扫描的代价设为默认值。

前端可以通过设置 PGCOSTINDEX 环境变量来初始化。

GEQO

设置使用遗传优化器算法的阈值。

ON

对涉及 6 个或更多表的语句 启用遗传优化器算法。

ON=#

接受一个整数参数,对查询中涉及 # 个或更多表的语句启用遗传优化器算法。

OFF

禁用遗传优化器算法。

DEFAULT

等价于指定 SET GEQO='ON'

这个算法默认开启,即对涉及 十一个或更多表的语句使用 GEQO。 (更多信息见程序员指南中的 GEQO 一章。)

前端可以通过设置 PGGEQO 环境变量来初始化。

在大关系与小关系连接时可能有用。 这个算法默认关闭。 GEQO 也不会使用它。

KSQO

键集查询优化器强制查询优化器 优化诸如 MicroSoft Access 生成的重复 OR 子句:

ON

启用这种优化。

OFF

禁用这种优化。

DEFAULT

等价于指定 SET KSQO='OFF'。

在大关系与小关系连接时可能有用。 这个算法默认关闭。 GEQO 也不会使用它。

前端可以通过设置 PGKSQO 环境变量来初始化。

输出

→ 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;
   

把时区设为加州伯克利:

 
   SET TIME ZONE 'PST8PDT';
   SELECT CURRENT_TIMESTAMP AS today;
   
   today
   ----------------------
   1998-03-31 07:41:21-08
   

把时区设为意大利:

 
   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 }
    

提交更正

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