SET

本文介绍了SET的语法、参数以及示例等内容。

简介

SET命令更改运行时配置参数,SET只影响当前会话所使用的值。

如果在一个事务内发出SET (或者等效的SET SESSION)而该事务后来中止,在该事务被回滚时SET命令的效果会消失。一旦所在的事务被提交,这些效果将会持续到会话结束(除非被另一个SET所覆盖)。

SET LOCAL的效果只持续到当前事务结束, 不管事务是否被提交。一种特殊情况是在一个事务内 SET后面跟着 SET LOCALSET LOCAL值将会在该事务结束前一直可见, 但是之后(如果该事务被提交)SET值将会生效。

SETSET 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 }

参数

SESSION指定该命令对当前会话有效(这是默认值)。

LOCAL指定该命令只对当前事务有效。在COMMIT或者 ROLLBACK之后,会话级别的设置会再次生效。 在事务块外部发出这个参数会发出一个警告并且不会有效果。

configuration_parameter一个可设置运行时参数的名称。

value参数的新值。根据特定的参数,值可以被指定为字符串常量、标识符、 数字或者以上构成的逗号分隔列表。写DEFAULT 可以指定把该参数重置成它的默认值(也就是说在当前会话中还没有执行SET命令时它具有的值)。

SCHEMASET SCHEMA ' value 'SET search_path TO value的一个别名。 使用这种语法只能指定一个模式。

NAMESSET NAMES valueSET client_encoding TO value的一个别名。

SEED为随机数生成器(函数random)设置一个内部种子。允许的值是 -1 和 1 之间的浮点数,它会被乘上 231-1。

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

SELECT setseed(value);

TIME ZONESET TIME ZONE valueSET timezone TO value的一个别名。语法SET TIME ZONE允许用于时区指定的特殊语法。这里是合法值的例子:

'PST8PDT'加州伯克利的时区。

'Europe/Rome'意大利的时区。

-7UTC 以西 7 小时的时区(等效于 PDT)。正值则是 UTC 以东。

INTERVAL '-08:00' HOUR TO MINUTEUTC 以西 8 小时的时区(等效于 PST)。

LOCALDEFAULT把时区设置为你的本地时区(也就是说服务器的timezone默认值)。

以数字或区间给出的时区设置在内部被翻译成 POSIX 时区语法。 例如,在SET TIME ZONE -7之后, SHOW TIME ZONE将会报告 <-07>+07

说明

函数set_config提供了等效的功能。此外,可以更新 pg_settings 系统视图来执行与SET等效的工作。

示例

设置模式搜索路径:

    SET search_path TO my_schema, public;

设置时区为加州伯克利:

    SET TIME ZONE 'PST8PDT';

设置时区为意大利:

    SET TIME ZONE 'Europe/Rome';