On this page
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值将生效。
通过回滚到早于该命令的保存点,也可以取消SET或SET 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- 指定该命令对当前会话生效。 (如果
SESSION和LOCAL都不出现,则为默认设置.) 
- 指定该命令对当前会话生效。 (如果
 LOCAL- 指定该命令仅对当前事务生效。在
COMMIT或ROLLBACK之后,会话级设置将再次生效。在事务块外部发出此命令将发出警告,否则无效。 
- 指定该命令仅对当前事务生效。在
 configuration_parameter- 可设置的运行时参数的名称。可用的参数记录在Chapter 19及以下。
 
value- 参数的新值。可以将值指定为字符串常量,标识符,数字或以逗号分隔的列表(视具体参数而定)。可以写入
DEFAULT来指定将参数重置为其默认值(即,如果在当前会话中未执行SET则将具有的值)。 
- 参数的新值。可以将值指定为字符串常量,标识符,数字或以逗号分隔的列表(视具体参数而定)。可以写入
 
除了Chapter 19中记录的配置参数外,还有一些只能使用SET命令进行调整或具有特殊语法的参数:
SCHEMASET SCHEMA 'value'是SET search_path TO value的别名。使用此语法只能指定一个架构。
NAMESSET NAMES value是SET client_encoding TO value的别名。
SEED- 设置随机数生成器(函数
random)的内部种子。允许的值是-1 和 1 之间的浮点数,然后将其乘以 231-1. 
- 设置随机数生成器(函数
 
种子也可以通过调用setseed来设置:
SELECT setseed(value);
  TIME ZONESET TIME ZONE value是SET timezone TO value的别名。语法SET TIME ZONE允许用于时区规范的特殊语法。以下是有效值的示例:
'PST8PDT'加利福尼亚伯克利所在的时区。
'Europe/Rome'- 意大利的时区。
 
-7- UTC 以西 7 个小时的时区(相当于 PDT)。正值位于 UTC 东部。
 
INTERVAL '-08:00' HOUR TO MINUTE- UTC 以西 8 个小时的时区(相当于 PST)。
 
LOCALDEFAULT- 将时区设置为您的本地时区(即服务器的默认值
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 扩展。