PG修改参数
Tags: ALTER SYSTEMPGresetset
SHOW
SHOW — 显示一个运行时参数的值
大纲
1 2 | SHOW name SHOW ALL |
描述
SHOW
将显示运行时参数的当前设置。 这些变量可以使用SET
语句、编辑 postgresql.conf
配置参数、通过 PGOPTIONS
环境变量(使用 libpq或者基于libpq的应用时) 或者启动postgres
服务器时通过命令行 标志设置。详见第 19 章。
参数
name
一个运行时参数的名称。可用的参数记录在 第 19 章和SET参考页。此外,有一些可以显示但不能设置的参数:
SERVER_VERSION
显示服务器的版本号。SERVER_ENCODING
显示服务器端的字符集编码。当前,这个参数可以被显示 但不能被设置,因为该设置是在数据库创建时决定的。LC_COLLATE
显示数据库的排序规则(文本序)的区域设置。当前, 这个参数可以被显示但不能被设置,因为该设置是在 数据库创建时决定的。LC_CTYPE
显示数据库的字符分类的区域设置。当前, 这个参数可以被显示但不能被设置,因为该设置 是在数据库创建时决定的。IS_SUPERUSER
如果当前角色具有超级用户特权则为真。ALL
显示所有配置参数的值,并带有描述。
注解
函数current_setting
产生等效的输出,见 第 9.27 节。还有, pg_settings
系统事务产生同样的信息。
示例
显示参数DateStyle
的当前设置:
1 2 3 4 5 | SHOW DateStyle; DateStyle ----------- ISO, MDY (1 row) |
显示参数geqo
的当前设置:
1 2 3 4 5 | SHOW geqo; geqo ------ on (1 row) |
显示所有设置:
1 2 3 4 5 6 7 8 9 10 | SHOW ALL; name | setting | description -------------------------+---------+------------------------------------------------- allow_system_table_mods | off | Allows modifications of the structure of ... . . . xmloption | content | Sets whether XML data in implicit parsing ... zero_damaged_pages | off | Continues processing past damaged page headers. (196 rows) |
兼容性
SHOW
命令是一种 PostgreSQL扩展。
SET
SET — 更改一个运行时参数,set命令只影响当前会话使用的值。
大纲
1 2 | SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT } |
描述
SET
命令更改运行时配置参数。很多 第 19 章中列出的参数可以用 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
选项,除非回滚,它的效果将一直保持。
注意
在PostgreSQL 版本 8.0 到 8.2 中, 一个SET LOCAL
的效果会因为释放较早的 保存点或者成功地从一个PL/pgSQL异常块 中退出而被取消。这种行为已经被更改,因为它被认为不直观。
参数
SESSION
指定该命令对当前会话有效(这是默认值)。
LOCAL
指定该命令只对当前事务有效。在
COMMIT
或者ROLLBACK
之后,会话级别的设置会再次生效。 在事务块外部发出这个参数会发出一个警告并且不会有效果。configuration_parameter
一个可设置运行时参数的名称。可用的参数被记录在 第 19 章和下文中。
value
参数的新值。根据特定的参数,值可以被指定为字符串常量、标识符、 数字或者以上构成的逗号分隔列表。写
DEFAULT
可以指定把该参数重置成它的默认值(也就是说在当前会话中还没有 执行SET
命令时它具有的值)。
除了在第 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
。有关时区的更多信息可见第 8.5.3 节。
注解
函数set_config
提供了等效的功能,见 第 9.27 节。此外,可以更新 pg_settings
系统视图来执行与SET
等效的工作。
示例
设置模式搜索路径:
1 | SET search_path TO my_schema, public; |
把日期风格设置为传统 POSTGRES的 “日在月之前”的输入习惯:
1 | SET datestyle TO postgres, dmy; |
设置时区为加州伯克利:
1 | SET TIME ZONE 'PST8PDT'; |
设置时区为意大利:
1 | SET TIME ZONE 'Europe/Rome'; |
兼容性
SET TIME ZONE
扩展了 SQL 标准定义的语法。标准 只允许数字的时区偏移量而 PostgreSQL允许更灵活的时区说明。 所有其他SET
特性都是 PostgreSQL扩展。
RESET
RESET — 把一个运行时参数的值恢复到默认值
大纲
1 2 | RESET configuration_parameter RESET ALL |
描述
RESET
把运行时参数恢复到它们的默认值。 RESET
是
1 | SET configuration_parameter TO DEFAULT |
的另一种写法。 详见SET。
默认值被定义为如果在当前会话中没有发出过SET
, 参数必须具有的值。这个值的实际来源可能是一个编译在内部的默认值、 配置文件、命令行选项、或者针对每个数据库或者每个用户的默认设置。 这和把它定义成“在会话开始时该参数得到的值”有细微的差 别,因为如果该值来自于配置文件,它将被重置为现在配置文件所指定 的任何东西。详见第 19 章。
RESET
的事务行为和SET
相同: 它的效果会被事务回滚撤销。
参数
示例
把timezone
配置变量设置为默认值:
1 | RESET timezone; |
兼容性
RESET
是一种 PostgreSQL扩展。
ALTER SYSTEM
ALTER SYSTEM — 更改一个服务器配置参数
大纲
1 2 3 4 | ALTER SYSTEM SET configuration_parameter { TO | = } { value | 'value' | DEFAULT } ALTER SYSTEM RESET configuration_parameter ALTER SYSTEM RESET ALL |
描述
ALTER SYSTEM
被用来在整个数据库集簇范围内更改 服务器配置参数。它比传统的手动编辑postgresql.conf
文件的方法更方便。ALTER SYSTEM
会把给出的参数 设置写入到postgresql.auto.conf
文件中,该文件会随着 postgresql.conf
一起被读入。把一个参数设置为 DEFAULT
或者使用RESET
变体可以 把该配置项从postgresql.auto.conf
文件中移除。使用 RESET ALL
可以移除所有这类配置项。
用ALTER SYSTEM
设置的值将在下一次重载服务器 配置后生效,那些只能在服务器启动时更改的参数则会在下一次服务器重启后生效。 重载服务器配置可以通过以下做法实现:调用 SQL 函数pg_reload_conf()
, 运行pg_ctl reload
或者向主服务器进程发送一个SIGHUP信号。
只有超级用户能够使用ALTER SYSTEM
。还有,由于 这个命令直接作用于文件系统并且不能被回滚,不允许在一个事务块或者函数中使用它。
参数
configuration_parameter
一个可设置配置参数的名称。可用的参数可见第 19 章。
value
该参数的新值。值可以被指定为字符串常量、标识符、数字或者以上这些构成的 逗号分隔的列表,值的具体形式取决于特定的参数。写上
DEFAULT
可以用来把该参数及其值从postgresql.auto.conf
中移除。
注解
不能用这个命令来设置data_directory以及 postgresql.conf
中不被允许的参数(例如 preset options)。
其他设置参数的方法见第 19.1 节。
示例
设置wal_level
:
1 | ALTER SYSTEM SET wal_level = replica; |
撤销以上的设置,恢复postgresql.conf
中有效的设置:
1 | ALTER SYSTEM RESET wal_level; |
兼容性
ALTER SYSTEM
语句是一种 PostgreSQL扩展。