本文介绍了SET的语法、参数以及示例等内容。
简介
SET
命令更改运行时配置参数,SET
只影响当前会话所使用的值。
如果在一个事务内发出SET
(或者等效的SET SESSION
)而该事务后来中止,在该事务被回滚时SET
命令的效果会消失。一旦所在的事务被提交,这些效果将会持续到会话结束(除非被另一个SET
所覆盖)。
SET LOCAL
的效果只持续到当前事务结束, 不管事务是否被提交。一种特殊情况是在一个事务内 SET
后面跟着 SET LOCAL
: SET LOCAL
值将会在该事务结束前一直可见, 但是之后(如果该事务被提交)SET
值将会生效。
SET
或SET LOCAL
的效果也会因为回滚到早于它们的保存点而消失。
如果在一个函数内使用SET LOCAL
并且该函数还有对同一变量的SET
选项(见 CREATE FUNCTION ),在函数退出时 SET LOCAL
命令的效果会消失。也就是说,该函数被调用时的值会被恢复。这允许使用 SET LOCAL
在函数内动态地或者重复地更改一个参数,同时仍然能便利地使用SET
选项来保存以及恢复调用者的值。不过,一个常规的SET
命令会覆盖它所在的任何函数的SET
选项,除非回滚,它的效果将一直保持。
语法
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }
参数
参数名称 | 描述 |
| 可选,用于指定命令生效范围,具体描述如下:
|
| 一个可设置运行时参数的名称。 |
| 参数的新值。根据特定的参数,值可以被指定为字符串常量、标识符、 数字或者以上构成的逗号分隔列表。设置为 |
注意事项
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
。
说明
函数set_config
提供了等效的功能。此外,还可以更新pg_settings
系统视图来执行与SET
等效的工作。
示例
设置模式搜索路径:
说明使用数据管理 DMS(Data Management)调整客户端设置模式搜索路径时,可能会存在兼容性问题,您可使用其他客户端执行相关语句。
SET search_path TO my_schema, public;
设置时区:
设置时区为加州伯克利:
SET TIME ZONE 'PST8PDT';
设置时区为意大利:
SET TIME ZONE 'Europe/Rome';