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

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

SET

SET — 更改一个运行时参数

大纲

SET [ SESSION | LOCAL ] variable { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }
  

输入

SESSION

指定命令对当前会话生效。 (如果 SESSION 和 LOCAL 都未出现, 这是默认行为。)

LOCAL

指定命令只对当前事务生效。在 COMMIT 或 ROLLBACK 之后,会话级的设置重新生效。注意, 如果在 BEGIN 块之外执行 SET LOCAL,它看起来 不会有任何效果,因为事务 会立即结束。

variable

一个可设置的运行时参数。

value

参数的新值。DEFAULT 可用于 指定把参数重置为默认 值。允许使用字符串列表,但更复杂的 构造可能需要加单引号或双引号。

描述

SET 命令更改运行时配置 参数。管理员指南 中列出的许多运行时参数都可以用 SET 即时更改。 (但有些需要超级用户权限 才能更改,另一些在服务器或会话启动后不能更改。) 注意 SET 只影响当前 会话使用的值。

如果在一个随后被中止的事务中发出SET或SET SESSION, 那么在事务回滚时,SET命令的效果就会消失。 (这一行为与PostgreSQL 7.3 之前的版本不同, 在那些版本中,SET的效果不会在后续出错后回滚。) 一旦该事务提交,这些效果 就会持续到会话结束,除非被另一个SET覆盖。

SET LOCAL的效果只持续到当前事务结束, 无论事务是否提交。一种特殊情况是:在同一个事务中先执行 SET,再执行SET LOCAL。 这样SET LOCAL设置的值会一直生效到事务结束, 但在此之后(如果该事务被提交),SET设置的值 将生效。

即使把 autocommit 设为 off,SET 也不会开始一个新的事务块。详情见 管理员指南 的 autocommit 一节。

下面是可以设置的一些参数的补充细节:

DATESTYLE

选择日期/时间的表示风格。这里涉及两个独立的 设置:默认的日期/时间输出和对有歧义输入的 解释。

以下是日期/时间的输出风格:

ISO

使用 ISO 8601 风格的日期和时间(YYYY-MM-DD HH:MM:SS)。这是默认值。

SQL

使用 Oracle/Ingres 风格的日期和时间。注意这种 风格与 SQL(它强制使用 ISO 8601 风格)毫无关系,这个选项的命名是一个历史意外。

PostgreSQL

使用传统的 PostgreSQL 格式。

German

数值日期表示使用 dd.mm.yyyy。

下面两个选项既决定 “SQL” 和 “PostgreSQL” 输出格式的 子风格,也决定有歧义日期输入的首选 解释。

European

数值日期表示使用 dd/mm/yyyy。

NonEuropean
US

数值日期表示使用 mm/dd/yyyy。

SET DATESTYLE 的值可以取自 第一个列表(输出风格),或第二个列表 (子风格),或从两个列表中各取一个并用逗号分隔。

SET DATESTYLE 影响输入的解释 并提供几种标准输出格式。如果 应用需要不同的变化形式或对输入输出的更严格 控制,可以考虑使用 to_char 函数 族。

除了通过 SET 或 配置文件条目设置日期风格的正常方法之外,还有几种 现已不推荐的方法:

设置 postmaster 的 PGDATESTYLE 环境 变量。(它会被任何其他方法 覆盖。)
使用选项 -o -e 运行 postmaster,把日期设为 European 约定。 (这会覆盖环境变量和配置文件 条目。)
设置客户端的 PGDATESTYLE 环境变量。 如果在基于 libpq 的客户端前端环境中设置了 PGDATESTYLE,libpq 会在连接启动时自动把 DATESTYLE 设为 PGDATESTYLE 的值。这等价于 手动发出 SET DATESTYLE。
NAMES

SET NAMES 是 SET CLIENT_ENCODING 的别名。

SEED

设置随机数生成器的内部种子。

value

random 函数使用的 种子的值。允许的 值是 0 到 1 之间的浮点数,之后会 乘以 231-1。

种子也可以通过调用 setseed SQL 函数来设置:

SELECT setseed(value);
       
SERVER_ENCODING

显示服务器端的多字节编码。(目前这个 参数只能显示不能设置,因为编码是在 initdb 时确定的。)

TIME ZONE
TIME ZONE

设置会话的默认时区。参数可以是 SQL 时间间隔常量、整数或双精度 常量,或者一个表示宿主操作系统 可识别的时区名的字符串。

下面是一些典型的时区设置值:

'PST8PDT'

把时区设为加利福尼亚州伯克利。

'Portugal'

把时区设为葡萄牙。

'Europe/Rome'

把时区设为意大利。

7

把时区设为 GMT 以西 7 小时偏移(相当于 PDT)。

INTERVAL '08:00' HOUR TO MINUTE

把时区设为 GMT 以西 8 小时偏移(相当于 PST)。

LOCAL
DEFAULT

把时区设为你的本地时区(你的 操作系统默认的时区)。

可用的时区名取决于你的操作系统。例如在 Linux 上, /usr/share/zoneinfo 包含时区 数据库;该目录中文件的名称可以 用作这个命令的参数。

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

如果在基于 libpq 的客户端前端环境中设置了 PGTZ 环境变量,libpq 会在 连接启动时自动把 SET TIMEZONE 设为 PGTZ 的值。

使用 SHOW 显示 参数的当前设置。

诊断

SET

成功时返回的消息。

ERROR: 'name is not a valid option name

你试图设置的参数不存在。

ERROR: 'name': permission denied

你必须是超级用户才能更改某些设置。

ERROR: 'name' cannot be changed after server start

有些参数在服务器启动后就是固定的。

示例

把日期风格设为带欧洲约定的传统 PostgreSQL 风格:

SET DATESTYLE TO PostgreSQL,European;
   

把时区设为加利福尼亚州伯克利,使用引号来 保留时区名的大写拼写(注意这个 例子中的日期风格是 PostgreSQL):

SET TIME ZONE 'PST8PDT';
SELECT CURRENT_TIMESTAMP AS today;
               today                
------------------------------------
 Tue Feb 26 07:32:21.42834 2002 PST
   

把时区设为意大利(注意需要单引号来处理 特殊字符):

SET TIME ZONE 'Europe/Rome';
SELECT CURRENT_TIMESTAMP AS today;

             today             
-------------------------------
 2002-10-08 05:39:35.008271+02
   

兼容性

SQL92

SET TIME ZONE 扩展了 SQL9x 中定义的语法。SQL9x 只允许 数值形式的时区偏移,而 PostgreSQL 还允许完整的时区 说明字符串。所有其他 SET 特性都是 PostgreSQL 扩展。

另见

set_config 函数提供了等价的 功能。见 PostgreSQL 用户指南 中的 杂项函数。

提交更正

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