Postgresql 中文操作指南

SET

SET — 更改运行时参数

Synopsis

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

Description

SET 命令更改运行时配置参数。 Chapter 20 中列出的许多运行时参数都可以使用 SET 即时更改。(有些参数只能由超级用户和在该参数上已授予 SET 权限的用户更改。服务器或会话启动后也不能更改的另有一些参数。) SET 仅影响当前会话所用的值。

如果 SET (或等效的 SET SESSION )是在稍后中止的事务中发出的,那么 SET 命令的效果将在事务回滚时消失。一旦围绕事务提交,除非由另一个 SET 覆盖,否则这些效果将持续到会话结束。

SET LOCAL 的效果仅持续到当前事务结束,无论事务是否已提交。一个特例是单个事务中 SET 后面跟 SET LOCALSET LOCAL 的值将在事务结束前可见,但此后(如果已提交事务), SET 值会生效。

SETSET LOCAL 的效果也通过回滚到早于命令的保存点而取消。

如果 SET LOCAL 用于对同一变量具有 SET 选项的函数中(请参阅 CREATE FUNCTION ),那么 SET LOCAL 命令的效果将在函数退出时消失;也就是说,无论如何都会还原调用函数时有效的值。这允许 SET LOCAL 用于函数中参数的动态或重复更改,同时仍然可以使用 SET 选项保存和还原调用方的值。但是,一个常规 SET 命令会覆盖任何周围函数的 SET 选项;它的效果将持续有效,除非回滚。

Note

在 PostgreSQL 版本 8.0 到 8.2 中,释放较早的保存点,或成功退出 PL/pgSQL 异常块会取消 SET LOCAL 的效果。这种行为已被更改,因为它被认为不直观。

Parameters

  • SESSION

    • 指定该命令对当前会话生效。(如果既不出现 SESSION 也不出现 LOCAL ,则这是默认值。)

  • LOCAL

    • 指定该命令仅对当前事务生效。在 COMMITROLLBACK 后,会话级别设置将再次生效。在事务块外发出此项会发出一个警告,否则不会产生其他效果。

  • configuration_parameter

    • 可设置的运行时参数的名称。可用的参数在 Chapter 20 和以下部分中进行说明。

  • value

    • 参数的新值。值可以指定为字符串常量、标识符、数字或这些值的逗号分隔列表,视具体参数而定。可以写 DEFAULT 以指定将参数重置为其默认值(也就是说,无论在当前会话中是否已执行 SET ,它都会具有的值)。

除了在 Chapter 20 中记录的配置参数之外,还有一些参数只能使用 SET 命令调整或具有特殊语法:

  • SCHEMA

    • SET SCHEMA '_value '是 _SET search_path TO _value_ 的别名。使用此语法只能指定一个模式。

  • NAMES

    • SET NAMES _value _ is an alias for _SET client_encoding TO _value

  • SEED

    • 设置随机数生成器的内部种子(函数 random )。允许的值是介于 -1 和 1 之间的浮点数(包括端点)。

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

SELECT setseed(value);
  • TIME ZONE

    • SET TIME ZONE '_value '是 _SET timezone TO '_value '的别名 . The syntax _SET TIME ZONE 允许时区规范有特殊语法。以下是一些有效值的示例:

    • 作为数字或间隔给出的时区设置会在内部转换为 POSIX 时区语法。例如,在 SET TIME ZONE -7 之后, SHOW TIME ZONE 会报告 ←07>+07

    • SET 不支持时区缩写。如需了解有关时区的详细信息,请参阅 Section 8.5.3

  • 'PST8PDT'

    • 伯克利加州时区。

  • 'Europe/Rome'

    • 意大利时区。

  • -7

    • 从 UTC 以西 7 小时的时区(相当于 PDT)。UTC 以东为正值。

  • INTERVAL '-08:00' HOUR TO MINUTE

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

  • LOCAL__DEFAULT

    • 将时区设置为您的本地时区(即 timezone 的服务器默认值)。

Notes

函数 set_config 提供同等的功能;请参见 Section 9.27.1 。此外,可以 UPDATE pg_settings 系统视图来执行相当于 SET 的操作。

Examples

设置模式搜索路径:

SET search_path TO my_schema, public;

将日期样式设置为 POSTGRES traditional,输入惯例为“日在前,月在后”:

SET datestyle TO postgres, dmy;

设置加州伯克利时区:

SET TIME ZONE 'PST8PDT';

设置意大利时区:

SET TIME ZONE 'Europe/Rome';

Compatibility

SET TIME ZONE 扩展了 SQL 标准中定义的语法。该标准只允许数字时区偏移量,而 PostgreSQL 允许更为灵活的时区规范。所有其他 SET 特性都是 PostgreSQL 扩展。

See Also

RESETSHOW