SET
SET - 更改运行时参数说明
语法格式
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }
说明
SET 命令更改运行时配置参数说明。(但有些需要超级用户权限才能更改,其他服务器或会话启动后无法更改。) SET仅影响当前会话使用的值。
如果在稍后中止的事务中发出 SET (或等效 SET SESSION ),则在回滚事务时SET命令的效果将消失。一旦提交了周围的事务,效果将持续到会话结束,除非被另一个SET 覆盖。
SET LOCAL 的影响仅持续到当前 Transaction结束,无论是否已实施。一个特例是在单个事务中 SET 后跟 SET LOCAL : SET LOCAL 值将一直显示到事务结束,但之后(如果事务已提交) SET 值将生效。
通过回滚到早于该命令的保存点,也会取消 SET 或 SET LOCAL 的效果。
如果在具有相同变量 SET 选项的函数中使用 SET LOCAL (参见 CREATE FUNCTION),则 SET LOCAL命令的效果在函数退出时消失;也就是说,无论如何都会恢复调用函数时生效的值。这允许SET LOCAL 用于动态或重复更改函数内的参数说明,同时仍然可以方便地使用 SET选项来保存和恢复调用者的值。但是,常规 SET 命令会覆盖任何周围函数的 SET选项;除非回滚,否则其效果将持续存在。
注意
在Vastbase E100版本8.0到8.2中, SET LOCAL的效果将通过释放较早的保存点或成功退出PL / pgSQL异常块来取消。此行为已被更改,因为它被认为是不直观的。
参数说明
SESSION
指定该命令对当前会话生效。 (如果没有出现 SESSION 和 LOCAL,则这是默认值。)
LOCAL
指定该命令仅对当前事务生效。在 COMMIT 或 ROLLBACK之后,会话级别设置将再次生效。在事务块之外发出此消息会发出警告,否则无效。
configuration_parameter
可设置的运行时参数说明的名称。
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之间的浮点数,然后乘以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 TIMEZONE -7 之后, SHOW TIME ZONE 将报告 <-07>+07 。
注意事项
函数 set_config 提供等效功能。此外,可以更新 pg_settings系统视图以执行 SET 的等效操作。
示例
设置架构搜索路径:
SET search_path TO my_schema, public;
使用”前一天”输入约定将日期样式设置为传统POSTGRES:
SET datestyle TO postgres, dmy;
设置加利福尼亚州伯克利的时区:
SET TIME ZONE 'PST8PDT';
设置意大利的时区:
SET TIME ZONE 'Europe/Rome';