PGSQL定制

如何定制 PostgreSQL 集群的内容:默认角色,数据库,权限,参数,模式,插件等

Pigsty默认提供了近100关于PGSQL的参数,描述用户所需的PostgreSQL集群,通常可以满足绝大多数用户需求。

但如果您对Pigsty创建的数据库集群进行更深一步的定制,则可以参考本文内容,对Patroni模板Postgres模板进行定制

Patroni模板

Pigsty使用 Patroni 管理与初始化Postgres数据库集群。 如果用户希望修改PostgreSQL数据库集群的默认配置参数,规格与调优方案,高可用策略,DCS访问,管控API,可以通过修改Patroni模板的方式实现。

Pigsty使用Patroni完成供给的主体工作,即使用户选择了 无Patroni模式,拉起数据库集群也会由Patroni负责,并在创建完成后移除Patroni组件。 用户可以通过Patroni配置文件,完成大部分的PostgreSQL集群定制工作,Patroni配置文件格式详情请参考 Patroni官方文档

预制Patroni模板

Pigsty提供了几种预定义的初始化模板,初始化模板是用于初始化数据库集群的定义文件,默认位于roles/postgres/templates/。包括:

ConfCPUMemDisk说明
oltp64400GB4TB生产OLTP模板,默认配置,针对生产机型优化延迟与性能
olap64400GB4TB生产OLAP模板,提高并行度,针对吞吐量,长查询进行优化。
crit64400GB4TB生产核心业务模板,基于OLTP模板针对RPO、安全性、数据完整性进行优化,启用同步复制与数据校验和。
tiny11GB40GB微型数据库模板,针对低资源场景进行优化,例如运行于虚拟机中的演示数据库集群。
mini24GB100GB2C4G 机型OLTP模板
small48GB200GB4C8G 机型OLTP模板
medium816GB500GB8C16G 机型OLTP模板
large1632GB1TB16C32G 机型OLTP模板
xlarge3264GB2TB32C64G 机型OLTP模板

通过 pg_conf 参数指定所需使用的模板路径,如果使用预制模板,则只需填入模板文件名称即可。如果使用定制的 Patroni配置模板,通常也应当针对机器节点使用配套的 节点优化模板

  1. pg_conf: tiny.yml # 使用 tiny.yml 调优模板
  2. node_tune: tiny # 节点调优模式:oltp|olap|crit|tiny

在安装Pigsty进行Configure的过程中,Pigsty会检测根据当前机器(管理机)的规格,自动选择对应的默认规格。

定制Patroni模板

定制您自己的Patroni模板时,您可以用已有的几种基础模板作为基线,在此基础上进行修改。

并放置于templates/目录中,以<mode>.yml格式命名即可。

Patroni中的模板变量请保留,否则相关参数可能无法正常工作。例如 pg_libs

最后,在配置文件的 pg_conf 配置项,指定您新创建的模板名称即可,例如 olap-32C128G-nvme.yml

Postgres模板

可以使用 PG模板 配置项,对集群中的模板数据库 template1 进行定制,进而。

通过这种方式确保任何在该数据库集群中新创建的数据库都带有相同的默认配置:模式,扩展,默认权限。

相关文件

定制数据库模板时,相关参数会首先被渲染为SQL脚本后,在部署好的数据库集群上执行。

  1. ^---/pg/bin/pg-init
  2. |
  3. ^---(1)--- /pg/tmp/pg-init-roles.sql
  4. ^---(2)--- /pg/tmp/pg-init-template.sql
  5. ^---(3)--- <other customize logic in pg-init>
  6. # 业务用户与数据库并不是在模版定制中创建的,但在此列出。
  7. ^-------------(4)--- /pg/tmp/pg-user-{{ user.name }}.sql
  8. ^-------------(5)--- /pg/tmp/pg-db-{{ db.name }}.sql

pg-init

pg-init是用于自定义初始化模板的Shell脚本路径,该脚本将以postgres用户身份,仅在主库上执行,执行时数据库集群主库已经被拉起,可以执行任意Shell命令,或通过psql执行任意SQL命令。

如果不指定该配置项,Pigsty会使用默认的pg-init Shell脚本,如下所示。

  1. #!/usr/bin/env bash
  2. set -uo pipefail
  3. #==================================================================#
  4. # Default Roles #
  5. #==================================================================#
  6. psql postgres -qAXwtf /pg/tmp/pg-init-roles.sql
  7. #==================================================================#
  8. # System Template #
  9. #==================================================================#
  10. # system default template
  11. psql template1 -qAXwtf /pg/tmp/pg-init-template.sql
  12. # make postgres same as templated database (optional)
  13. psql postgres -qAXwtf /pg/tmp/pg-init-template.sql
  14. #==================================================================#
  15. # Customize Logic #
  16. #==================================================================#
  17. # add your template logic here

如果用户需要执行复杂的定制逻辑,可在该脚本的基础上进行追加。注意 pg-init 用于定制数据库集群,通常这是通过修改 模板数据库 实现的。在该脚本执行时,数据库集群已经启动,但业务用户与业务数据库尚未创建。因此模板数据库的修改会反映在默认定义的业务数据库中。

最后修改 2022-05-27: init commit (1e3e284)