SET

更改运行时数据库配置参数的值。

概要

SET [ SESSION | LOCAL ] <configuration_parameter> { TO | = } { <value> | '<value>' | DEFAULT }

SET [SESSION | LOCAL] TIME ZONE { <value> | '<value>' |  LOCAL | DEFAULT }

描述

SET 命令用于修改服务器配置参数。任何被归类为会话参数的配置参数均可通过 SET 命令实时修改。(部分参数需具备超级用户权限才能修改,另一些参数则在服务器或会话启动后无法更改。)SET 命令仅影响当前会话使用的参数值。

若在后续被取消的事务中执行了SETSET SESSION命令,当事务回滚时,SET命令的效果将消失。一旦外围事务提交,其效果将持续至会话结束,除非被另一个SET命令覆盖。

SET LOCAL 的效果仅持续到当前事务结束,无论事务是否提交。特殊情况是单个事务内先执行 SET 再执行 SET LOCALSET LOCAL 的值将持续到事务结束,但之后(若事务提交)SET 的值将生效。

SETSET LOCAL 的效果也会因回滚到早于该命令的保存点而被取消。

若在包含相同配置参数 SET 选项的函数中使用 SET LOCAL(参见 CREATE FUNCTION),则 SET LOCAL 命令的效果在函数退出时消失;无论如何都会恢复函数调用时生效的值。这使得 SET LOCAL 能在函数内部实现参数的动态或重复修改,同时保留使用 SET 选项保存和恢复调用者参数值的便利性。需注意常规 SET 命令会覆盖任何外围函数的 SET 选项;其效果将持续生效,除非被回滚。

有关服务器参数的信息,请参阅服务器配置参数。

参数

  • SESSION

    • 指定该命令仅对当前会话生效。若未出现 SESSION 或 LOCAL 选项,则默认采用此设置。
  • LOCAL

    • 指定该命令仅对当前事务生效。在执行COMMIT或ROLLBACK后,会话级设置将重新生效。若在事务块外部执行此命令,系统将发出警告且不产生任何效果。
  • configuration_parameter

    • 可设置的数据库运行时配置参数名称。仅将参数分类为会话参数时,才可使用SET语句进行修改。详情请参阅服务器配置参数。
  • value

    • 参数的新值。值可根据具体参数要求指定为字符串常量、标识符、数字或这些类型的逗号分隔列表。使用DEFAULT可将参数重置为其默认值(即当前会话中若未执行SET命令时该参数应有的值)。若指定内存大小或时间单位,请用单引号将值括起来。 有几个配置参数只能通过SET命令调整,或者具有特殊的语法:
  • SCHEMA

    • SET SCHEMA '<value>'SET <search_path> TO <value> 的别名。使用此语法时只能指定一个模式。
  • NAMES

    • SET NAMES <value>SET client_encoding TO <value> 的别名。
  • SEED

    • 设置随机数生成器(函数random())的内部种子。允许的值为-1到1之间的浮点数(包含边界值)。

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

    SELECT setseed(value);
  • TIME ZONE

    • SET TIME ZONE <value>SET timezone TO <value> 的别名。SET TIME ZONE 语法允许使用特殊语法指定时区。有效值示例如下:

    • 'PST8PDT'

    • 'Europe/Rome'

    • -7 (time zone 7 hours west from UTC)

    • INTERVAL '-08:00' HOUR TO MINUTE (time zone 8 hours west from UTC).

    • LOCAL

    • DEFAULT 将时区设置为您的本地时区(即服务器的默认时区值)。 有关数据库中时区的更多信息,请参阅 PostgreSQL 文档中的时区部分。

示例

设置模式搜索路径:

SET search_path TO my_schema, public;

将每个查询的分段主机内存增加至200 MB:

SET statement_mem TO '200MB';

将日期样式设置为传统的POSTGRES格式,采用"日在前,月在后"的输入规范:

SET datestyle TO postgres, dmy;

设置加利福尼亚州圣马特奥市(太平洋时间)的时区:

SET TIME ZONE 'PST8PDT';

设置意大利时区:

SET TIME ZONE 'Europe/Rome'; 

兼容性

SET TIME ZONE 扩展了 SQL 标准中定义的语法。标准仅允许使用数字时区偏移量,而数据库允许更灵活的时区指定方式。所有其他 SET 功能均为数据库扩展。

另见

RESET, SHOW