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

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

SET

SET — 更改一个运行时参数

大纲

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

描述

SET命令用于更改运行时配置参数。许多在 第 16.4 节中列出的运行时参数都可以通过 SET即时更改。 (有些参数需要超级用户权限才能更改, 还有一些参数在服务器启动或会话开始之后便无法再更改。) SET只影响当前会话所使用的值。

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

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

参数

SESSION

指定该命令对当前会话生效。(如果既没有出现SESSION, 也没有出现LOCAL,这就是默认情况。)

LOCAL

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

name

可设置的运行时参数名称。可用参数见 第 16.4 节以及下文。

value

参数的新值。值可以指定为字符串常量、标识符、数字,或由这些构成的逗号分隔列表。DEFAULT可用于表示把该参数重置为其默认值。

除了 第 16.4 节 中记录的配置参数之外,还有少数几个只能用 SET 命令调整,或者具有 特殊语法:

NAMES

SET NAMES value是 SET client_encoding TO value的别名。

SEED

设置随机数生成器(即函数 random)的内部种子。允许的值是 0 到 1 之间的浮点数,这些值随后会乘以 231-1。

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

SELECT setseed(value);
TIME ZONE

SET TIME ZONE value 是 SET timezone TO value 的别名。 SET TIME ZONE 语法允许为时区指定使用 特殊语法。下面是一些有效值的例子 (但注意其中一些只在某些平台上被接受):

'PST8PDT'

加利福尼亚州伯克利的时区。

'Portugal'

葡萄牙的时区。

'Europe/Rome'

意大利的时区。

-7

UTC 以西 7 小时的时区(相当于 PDT)。正值表示 UTC 以东。

INTERVAL '-08:00' HOUR TO MINUTE

UTC 以西 8 小时的时区(相当于 PST)。

LOCAL
DEFAULT

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

有关时区的更多信息见 第 8.5 节。

注解

函数set_config提供了等效功能;见 第 9.13 节。

示例

设置模式搜索路径:

SET search_path TO my_schema, public;

将日期风格设置为传统POSTGRES风格,并采用 “日在月之前”的输入惯例:

SET datestyle TO postgres, dmy;

把时区设为加利福尼亚州伯克利的时区,使用引号来 保留时区名的大写拼写:

SET TIME ZONE 'PST8PDT';
SELECT current_timestamp AS today;

             today
-------------------------------
 2003-04-29 15:02:01.218622-07

兼容性

SET TIME ZONE扩展了 SQL 标准定义的语法。标准 只允许使用数值形式的时区偏移量,而PostgreSQL 允许更灵活的时区指定方式。其他所有SET特性都是 PostgreSQL扩展。

另见

RESET, SHOW

提交更正

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