开发者社区> 李博 bluemind> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.1. 设置参数

简介: 19.1. 设置参数 19.1.1. 参数名称和值 19.1.2. 通过配置文件影响参数 19.1.3. 通过SQL影响参数 19.1.4. 通过 Shell 影响参数 19.1.5. 管理配置文件内容 19.1.1. 参数名称和值 所有参数名都是大小写不敏感的。
+关注继续查看

19.1. 设置参数

19.1.1. 参数名称和值

所有参数名都是大小写不敏感的。每个参数都可以接受五种类型之一的值: 布尔、字符串、整数、 浮点数或枚举。该类型决定了设置该参数的语法:

  • 布尔: 值可以被写成 onofftruefalseyesno10 (都是大小写不敏感的)或者这些值的任何无歧义前缀。

  • 字符串: 通常值被包括在单引号内,值内部的任何单引号都需要被双写。不过,如果值是一个简单数字或者 标识符,引号通常可以被省略。

  • 数字(整数和浮点): 只对浮点参数允许一个小数点。不要使用千位分隔符。不要求引号。

  • 带单位的数字: 一些数字参数具有隐含单位,因为它们描述内存或时间量。单位可能是千字节、块(通常是 8KB)、 毫秒、秒或分钟。这些设置之一的一个未修饰的数字值将使用该设置的默认单位,默认单位可以通 过引用pg_settings.unit来找到。为了方便,也可以 显式地指定一个不同的单位,例如时间值可以是'120 ms',并且它们将被转换到参数的实际单位。要使用这个特性,注意值必须被写成一个字符 串(带有引号)。单位名称是大小写敏感的,并且在数字值和单位之间可以有空白。

    • 可用的内存单位是kB(千字节)、MB(兆字节)、GB(吉字节)和 TB (terabytes)。内存单位的乘数是 1024 而不是 1000。

    • 可用的时间单位是ms(毫秒)、s(秒)、min(分钟)、 h(小时)和d(天)。

  • 枚举: 枚举类型的参数以与字符串参数相同的方式指定,但被限制到一组有限的值。 这样一个参数可用的值可以在pg_settings.enumvals 中找到。枚举参数值是大小写无关的。

19.1.2. 通过配置文件影响参数

设置这些参数最基本的方法是编辑postgresql.conf文件, 它通常被保存在数据目录中(当数据库集簇目录被初始化时,一个默认的拷贝将会被安装在那里)。一个该文件的例子看起来是:

# This is a comment
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB

每一行指定一个参数。名称和值之间的等号是可选的。空白是无意义的(除了在一个引号引用的参数值内)并且空行被忽略。井号(#)指示该行的剩余部分是一个注释。非简单标识符或者数字的参数值必须用单引号包围。要在参数值里嵌入单引号, 要么写两个单引号(首选)或者在引号前放反斜线。

以这种方式设定的参数为集簇提供了默认值。除非这些设置被覆盖,活动会话看到的就是这些设置。 下面的小节描述了管理员或用户覆盖这些默认值的方法。

主服务器进程每次收到SIGHUP信号(最简单的方法是从命令行运行pg_ctl reload或调用 SQL 函数pg_reload_conf()来发送这个信号)后都会重新读取这个配置 文件。主服务器进程还会把这个信号传播给所有正在运行的服务器进程,这样现有的会话也能采用新 值(要等待它们完成当前正在执行的客户端命令之后才会发生)。另外,你可以直接向一个单一服务 器进程发送该信号。有些参数只能在服务器启动时设置,在配置文件中对这些条目的修改将被忽略, 直到下次服务器重启。配置文件中的非法参数设置也会在SIGHUP处理过程中被 忽略(但是会记录日志)。

postgresql.conf之外,PostgreSQL 数据目录还包含一个文件 postgresql.auto.conf,它具有和postgresql.conf相同的格式但是不应该被手工编辑。这个 文件保存了通过ALTER SYSTEM命令提供的设置。每当postgresql.conf被读 取时这个文件会被自动读取,并且它的设置会以同样的方式生效。 postgresql.auto.conf中的设置会覆盖postgresql.conf 中的设置。

如果SIGHUP信号没有产生预期效果, 那么系统表pg_file_settings 有助于对配置文件的预测试更改,或者诊断问题。

19.1.3. 通过SQL影响参数

PostgreSQL提供了三个SQL命令来建立配置默认值。 已经提到过的ALTER SYSTEM命令提供了一种改变全局默认值的从SQL可 访问的方法;它在功效上等效于编辑postgresql.conf。此外,还有两个命令 可以针对每个数据库或者每个角色设置默认值:

  • ALTER DATABASE命令允许针对一个数据库覆盖其全局设置。

  • ALTER ROLE命令允许用用户指定的值来覆盖全局设置和数据库设置。

只有当开始一个新的数据库会话时,用ALTER DATABASE和 ALTER ROLE设置的值才会被应用。它们会覆盖从配置文件或服务器命令行 获得的值,并且作为该会话后续的默认值。注意某些设置在服务器启动后不能被更改,并且因此 不能被这些命令(或者下文列举的命令)设置。

一旦一个客户端连接到数据库,PostgreSQL会提供两个额外的SQL命令( 以及等效的函数)用以影响会话本地的配置设置:

  • SHOW命令允许察看所有参数的当前值。对应的函数是 current_setting(setting_name text)

  • SET命令允许修改对于一个会话可以本地设置的参数的当前值, 它对其他会话没有影响。对应的函数是 set_config(setting_name, new_value, is_local)

此外,系统视图pg_settings可以被用来查看和改变 会话本地的值:

  • 查询这个视图与使用SHOW ALL相似,但是可以提供更多细节。它也更加灵活, 因为可以为它指定过滤条件或者把它与其他关系进行连接。

  • 在这个视图上使用UPDATE并且指定更新setting 列,其效果等同于发出SET命令。例如,下面的命令

    SET configuration_parameter TO DEFAULT;

    等效于:

    UPDATE pg_settings SET setting = reset_val WHERE name = 'configuration_parameter';

19.1.4. 通过 Shell 影响参数

除了在数据库或者角色层面上设置全局默认值或者进行覆盖,你还可以通过 shell 工具把设置 传递给PostgreSQL。服务器和libpq 客户端库都能通过 shell 接受参数值。

  • 在服务器启动期间,可以通过-c命令行参数把参数设置传递给 postgres命令。例如:

    postgres -c log_connections=yes -c log_destination='syslog'

    这种方式提供的设置会覆盖通过postgresql.conf或者 ALTER SYSTEM提供的设置,因此除了重启服务器之外无法从全局上改变它们。

  • 当通过libpq启动一个客户端会话时,可以使用PGOPTIONS 环境变量指定参数设置。这种方式建立的设置构成了会话生存期间的默认值,但是不会影响 其他的会话。由于历史原因,PGOPTIONS的格式和启动 postgres命令时用到的相似,特别是-c标志必须被指定。 例如:

    env PGOPTIONS="-c geqo=off -c statement_timeout=5min" psql

    通过 shell 或者其他方式,其他客户端和库可能提供它们自己的机制,以便允许用户在不直接 使用SQL命令的前提下修改会话设置。

19.1.5. 管理配置文件内容

PostgreSQL提供了一些特性用于把复杂的 postgresql.conf文件分解成子文件。在管理多个具有相关但不完全相同 配置的服务器时,这些特性特别有用。

除了单个参数设置,postgresql.conf文件可以包含包括指令,它指定要读入和处理的另一个文件,就好像该文件被插入到配置文件的这个点。这个特性允许一个配置文件被划分成物理上独立的部分。包括指令看起来像:

include 'filename'

如果文件名不是一个绝对路径,它将作为包含引用配置文件的目录的相对位置。包括可以被嵌套。

也有一个include_if_exists指令,它的作用和include指令一样,不过当被引用的文件不存在或者无法被读取时其行为不同。一个通常的include将认为这是一个错误情况,而include_if_exists仅仅记录一个消息并且继续处理引用配置文件。

postgresql.conf文件也可以包含include_dir指令,它指定要被包含的配置文件的一整个目录。它的用法类似:

include_dir 'directory'

非绝对目录名被当做包含引用配置文件的目录的相对路径。在该指定目录中,只有以后缀名 .conf结尾的非目录文件才会被包括。以. 字符开头的文件名也会被忽略,因为在某些平台上它们是隐藏文件。一个包括目录中的多个文件 被以文件名顺序处理(根据 C 区域规则排序,即数字在字母之前并且大写字母在小写字母 之前)。

包括文件或目录可以被用来在逻辑上分隔数据库配置的各个部分,而不是用一个很大的postgresql.conf文件。考虑一个有两台数据库服务器的公司,每一个都有不同的内存量。很可能配置的元素都会被共享,例如用于日志的参数。但是两者关于内存的参数将会不同。并且还可能会有服务器相关的自定义。一种管理这类情况的方法是将你的站点的自定义配置修改分成三个文件。你可以把下面的内容加入到你的postgresql.conf文件末尾来包括它们:

include 'shared.conf'
include 'memory.conf'
include 'server.conf'

所有的系统将会有相同的shared.conf。每个有特定内存量的服务器可以共享相同的memory.conf。你可能对所有 8GB 内存的服务器有一个,而对那些 16GB 内存的服务器有另一个。并且最后server.conf可以装有真正服务器相关的配置信息。

另一中可能性是创建一个配置文件目录并把这个信息放到其中的文件里。例如,一个conf.d目录可以在postgresql.conf的末尾被引用:

include_dir 'conf.d'

然后你可以这样命名conf.d目录中的文件:

00shared.conf
01memory.conf
02server.conf

这种命名习惯建立了这些文件将被载入的清晰顺序。这是很重要的,因为在服务器读取配置 文件时,对于一个特定的参数只有最后碰到的一个设置才会被使用。在这个例子中,conf.d/02server.conf设置的东西将会覆盖在 conf.d/01memory.conf中相同参数的值。

你还可以使用这种配置目录方法,在命名文件时更有描述性:

00shared.conf
01memory-8GB.conf
02server-foo.conf

这种形式的安排为每个配置文件变体给定了一个唯一的名称。当多个服务器把它们的配置全部存储在一个位置(例如在一个版本控制仓库中)时,这可以帮助消除歧义(在版本控制下存储数据库配置文件是另一个值得考虑的好方法)。

本文转自PostgreSQL中文社区,原文链接:19.1. 设置参数

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 23 章 本地化
第 23 章 本地化 目录 23.1. 区域支持 23.1.1. 概述 23.1.2. 行为 23.1.3. 问题 23.2. 排序规则支持 23.2.1. 概念 23.2.2. 管理排序规则 23.3. 字符集支持 23.3.1. 被支持的字符集 23.3.2. 设置字符集 23.3.3. 服务器和客户端之间的自动字符集转换 23.3.4. 进一步阅读 本章从管理员的角度描述可用的本地化特性。
1056 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 31 章 逻辑复制_31.8. 配置设置
31.8. 配置设置 逻辑复制需要设置几个配置选项。 在发布者端,必须将wal_level设置为logical, 并且max_replication_slots必须至少设置为预期连接的订阅数量, 加上一些预留用于表同步。
1127 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 20 章 客户端认证_20.1. pg_hba.conf文件
20.1. pg_hba.conf文件 客户端认证是由一个配置文件(通常名为pg_hba.conf并被存放在数据库集簇目录中)控制(HBA表示基于主机的认证)。在initdb初始化数据目录时,它会安装一个默认的pg_hba.conf文件。
1378 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.9. 运行时统计数据
19.9. 运行时统计数据 19.9.1. 查询和索引统计收集器 19.9.2. 统计监控 19.9.1. 查询和索引统计收集器 这些参数控制服务器范围的统计数据收集特性。当统计收集被启用时,被产生的数据可以通过pg_stat和pg_statio系统视图族访问。
1092 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 23 章 本地化_23.3. 字符集支持
23.3. 字符集支持 23.3.1. 被支持的字符集 23.3.2. 设置字符集 23.3.3. 服务器和客户端之间的自动字符集转换 23.3.4. 进一步阅读 PostgreSQL里面的字符集支持你能够以各种字符集存储文本,包括单字节字符集,比如 ISO 8859 系列,以及多字节字符集 ,比如EUC(扩展 Unix 编码 Extended Unix Code)、UTF-8 和 Mule 内部编码。
1077 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.11. 客户端连接默认值
19.11. 客户端连接默认值 19.11.1. 语句行为 19.11.2. 区域和格式化 19.11.3. 共享库预载入 19.11.4. 其他默认值 19.11.1. 语句行为 search_path (string) 这个变量指定当一个对象(表、数据类型、函数等)被用一个无模式限定的简单名称引用时,用于进行搜索该对象的模式顺序。
1411 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 23 章 本地化_23.1. 区域支持
23.1. 区域支持 23.1.1. 概述 23.1.2. 行为 23.1.3. 问题 区域支持指的是应用遵守文化偏好的问题,包括字母表、排序、数字格式等。PostgreSQL使用服务器操作系统提供的标准 ISO C 和POSIX的区域机制。
1388 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.2. 文件位置
19.2. 文件位置 除了已经提到过的postgresql.conf文件之外,PostgreSQL还使用另外两个手工编辑的配置文件,它们控制客户端认证(其使用在第 20 章中讨论)。默认情况下,所有三个配置文件都存放在数据库集簇的数据目录中。
902 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制_26.2. 日志传送后备服务器
26.2. 日志传送后备服务器 26.2.1. 规划 26.2.2. 后备服务器操作 26.2.3. 为后备服务器准备主控机 26.2.4. 建立一个后备服务器 26.2.5. 流复制 26.2.6. 复制槽 26.2.7. 级联复制 26.2.8. 同步复制 26.2.9. 后备服务器中的持续归档 连续归档可以被用来创建一个高可用性(HA)集群配置, 其中有一个或多个后备服务器随时准备在主服务器失效时接管操作。
1330 0
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 20 章 客户端认证_20.3. 认证方法
20.3. 认证方法 20.3.1. 信任认证 20.3.2. 口令认证 20.3.3. GSSAPI 认证 20.3.4. SSPI 认证 20.3.5. Ident 认证 20.3.6. Peer 认证 20.3.7. LDAP 认证 20.3.8. RADIUS 认证 20.3.9. 证书认证 20.3.10. PAM 认证 20.3.11. BSD 认证 下列小节更详细地描述认证方法。
1626 0
+关注
李博 bluemind
云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147
2107
文章
1103
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载