SET — 更改运行时参数
SET [ SESSION | LOCAL ]configuration_parameter
{ TO | = } {value
| 'value
' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE {value
| 'value
' | LOCAL | DEFAULT }
SET
命令用于更改运行时配置参数。在 第 19 章 中列出的许多运行时参数都可以通过 `SET` 动态更改。(某些参数只能由超级用户和被授予了该参数 `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` 命令的效果会在函数退出时消失;也就是说,无论如何都会恢复到调用函数时生效的值。这允许 `SET LOCAL` 用于在函数中动态或重复地更改参数,同时仍然可以方便地使用 `SET` 选项来保存和恢复调用者的值。但是,常规的 `SET` 命令会覆盖任何周围函数的 `SET` 选项;其效果会持续存在,除非回滚。
在 PostgreSQL 8.0 到 8.2 版本中,`SET LOCAL` 的效果会被提前释放的保存点或成功退出 `PL/pgSQL` 异常块而取消。此行为已被更改,因为它被认为是不直观的。
SESSION
指定命令对当前会话生效。(如果既没有出现 `SESSION` 也没有出现 `LOCAL`,则这是默认值。)
LOCAL
指定命令仅对当前事务生效。在 `COMMIT` 或 `ROLLBACK` 之后,会话级别的设置将再次生效。在事务块外发出此命令会发出警告,否则无效。
configuration_parameter
可设置的运行时参数的名称。可用参数记录在 第 19 章 及以下内容中。
value
参数的新值。值可以指定为字符串常量、标识符、数字或它们的逗号分隔列表,具体取决于特定参数的要求。可以写 `DEFAULT` 来指定将参数重置为其默认值(即,如果当前会话中没有执行任何 `SET` 命令,它将具有的任何值)。
除了 第 19 章 中记录的配置参数外,还有一些只能使用 `SET` 命令调整,或者具有特殊语法的参数。
SCHEMA
SET SCHEMA '
是 `SET search_path TO value
'value
` 的别名。使用此语法只能指定一个模式。
NAMES
SET NAMES '
是 `SET client_encoding TO value
'value
` 的别名。
SEED
设置随机数生成器(函数 `random`)的内部种子。允许的值是介于 -1 和 1 之间的浮点数。
通过调用函数 `setseed` 也可以设置种子。
SELECT setseed(value
);
TIME ZONE
SET TIME ZONE '
是 `SET timezone TO 'value
'value
'` 的别名。 `SET TIME ZONE` 语法允许时区规范的特殊语法。以下是一些有效值的示例:
'America/Los_Angeles'
伯克利,加利福尼亚州的时区。
'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` 不支持时区缩写;有关时区的更多信息,请参阅 8.5.3 节。
函数 `set_config` 提供等效的功能;请参阅 9.28.1 节。此外,还可以通过更新 pg_settings
系统视图来执行 `SET` 的等效操作。
设置模式搜索路径
SET search_path TO my_schema, public;
设置日期风格为传统的 POSTGRES,采用“日在前月在后”的输入约定
SET datestyle TO postgres, dmy;
设置伯克利,加利福尼亚州的时区
SET TIME ZONE 'America/Los_Angeles';
设置意大利的时区
SET TIME ZONE 'Europe/Rome';
SET TIME ZONE
扩展了 SQL 标准中定义的语法。标准只允许数值时区偏移,而 PostgreSQL 允许更灵活的时区规范。所有其他 `SET` 功能都是 PostgreSQL 的扩展。
如果您在文档中发现任何不正确、与您对特定功能的使用体验不符或需要进一步澄清的内容,请使用 此表格 来报告文档问题。