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
命令进行调整或具有特殊语法的参数:
SCHEMA
SET SCHEMA 'value'
是SET search_path TO value
的别名。使用此语法只能指定一个架构。
NAMES
SET NAMES value
是SET client_encoding TO value
的别名。
SEED
- 设置随机数生成器(函数
random
)的内部种子。允许的值是-1 和 1 之间的浮点数,然后将其乘以 231-1.
- 设置随机数生成器(函数
种子也可以通过调用setseed
来设置:
SELECT setseed(value);
TIME ZONE
SET 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)。
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 扩展。