Note

SET

SET —更改运行时参数

Synopsis

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

Description

SET命令更改运行时配置参数。 Chapter 19中列出的许多运行时参数都可以使用SET即时更改。 (但是有些需要更改超级用户权限,而另一些则不能在服务器或会话启动后更改.)SET仅影响当前会话使用的值。

如果在稍后中止的事务中发出了SET(或等效的SET SESSION),则回滚该事务时SET命令的作用会消失。一旦提交了周围的事务,效果将一直持续到会话结束,除非被另一个SET覆盖。

SET LOCAL的效果仅持续到当前事务结束,无论是否提交。特殊情况是在单个事务中SET后跟SET LOCAL:将看到SET LOCAL值直到事务结束,但是此后(如果提交了事务)SET值将生效。

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

如果在具有SET选项的同一变量的函数中使用SET LOCAL(请参见CREATE FUNCTION),则SET LOCAL命令的效果在函数 Export 处消失;也就是说,无论如何都将恢复调用该函数时有效的值。这使SET LOCAL可以用于函数中参数的动态或重复更改,同时仍具有使用SET选项保存和恢复调用者值的便利。但是,常规的SET命令会覆盖所有周围函数的SET选项;除非回滚,否则其影响将持续。

Note

在 PostgreSQL 8.0 到 8.2 版本中,通过释放更早的保存点或成功退出 PL/pgSQL 异常块可以消除SET LOCAL的影响。此行为已更改,因为它被认为是不直观的。

Parameters

  • SESSION

    • 指定该命令对当前会话生效。 (如果SESSIONLOCAL都不出现,则为默认设置.)
  • LOCAL

    • 指定该命令仅对当前事务生效。在COMMITROLLBACK之后,会话级设置将再次生效。在事务块外部发出此命令将发出警告,否则无效。
  • configuration_parameter

    • 可设置的运行时参数的名称。可用的参数记录在Chapter 19及以下。
  • value

    • 参数的新值。可以将值指定为字符串常量,标识符,数字或以逗号分隔的列表(视具体参数而定)。可以写入DEFAULT来指定将参数重置为其默认值(即,如果在当前会话中未执行SET则将具有的值)。

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

  • SCHEMA

    • SET SCHEMA 'value'SET search_path TO value的别名。使用此语法只能指定一个架构。
  • NAMES

    • SET NAMES valueSET client_encoding TO value的别名。
  • SEED

    • 设置随机数生成器(函数random)的内部种子。允许的值是-1 和 1 之间的浮点数,然后将其乘以 231-1.

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

SELECT setseed(value);
  • TIME ZONE

    • SET TIME ZONE valueSET timezone TO value的别名。语法SET TIME ZONE允许用于时区规范的特殊语法。以下是有效值的示例:
  • 'PST8PDT'

    • 加利福尼亚伯克利所在的时区。

    • 'Europe/Rome'

      • 意大利的时区。
    • -7

      • UTC 以西 7 个小时的时区(相当于 PDT)。正值位于 UTC 东部。
    • INTERVAL '-08:00' HOUR TO MINUTE

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

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

以数字或间隔指定的时区设置在内部转换为 POSIX 时区语法。例如,在SET TIME ZONE -7之后,SHOW TIME ZONE将报告<-07>+07

有关时区的更多信息,请参见Section 8.5.3

Notes

函数set_config提供等效的功能;参见Section 9.26。同样,可以更新pg_settings系统视图以执行SET的等效功能。

Examples

设置架构搜索路径:

SET search_path TO my_schema, public;

使用“约定日期前”Importing 约定将日期样式设置为传统的 POSTGRES:

SET datestyle TO postgres, dmy;

设置加利福尼亚 State 伯克利的时区:

SET TIME ZONE 'PST8PDT';

设置意大利的时区:

SET TIME ZONE 'Europe/Rome';

Compatibility

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

See Also

RESET, SHOW