# 发布注记

| 版本              |    发布时间    | 摘要                                                         | 地址                                                                                        |
|:----------------|:----------:|------------------------------------------------------------|-------------------------------------------------------------------------------------------|
| [v2.5.0](#v250) | 2023-09-24 | Ubuntu/Debian支持：bullseye, bookworm, jammy, focal           | [v2.5.0](https://github.com/Vonng/pigsty/releases/tag/v2.5.0)                             |
| [v2.4.1](#v241) | 2023-09-24 | Supabase/PostgresML支持与各种新扩展：graphql, jwt, pg_net, vault    | [v2.4.1](https://github.com/Vonng/pigsty/releases/tag/v2.4.1)                             |
| [v2.4.0](#v240) | 2023-09-14 | PG16，监控RDS，服务咨询支持，新扩展：中文分词全文检索/图/HTTP/嵌入等                  | [v2.4.0](https://github.com/Vonng/pigsty/releases/tag/v2.4.0)                             |
| [v2.3.1](#v231) | 2023-09-01 | 带HNSW的PGVector，PG 16 RC1, 文档翻新，中文文档，例行问题修复                 | [v2.3.1](https://github.com/Vonng/pigsty/releases/tag/v2.3.1)                             |
| [v2.3.0](#v230) | 2023-08-20 | 主机VIP, ferretdb, nocodb, MySQL存根, CVE修复                    | [v2.3.0](https://github.com/Vonng/pigsty/releases/tag/v2.3.0)                             |
| [v2.2.0](#v220) | 2023-08-04 | 仪表盘 & 置备重做，UOS 兼容性                                         | [v2.2.0](https://github.com/Vonng/pigsty/releases/tag/v2.2.0)                             |
| [v2.1.0](#v210) | 2023-06-10 | 支持 PostgreSQL 12 ~ 16beta                                  | [v2.1.0](https://github.com/Vonng/pigsty/releases/tag/v2.1.0)                             |
| [v2.0.2](#v202) | 2023-03-31 | 新增 pgvector 支持，修复 MinIO CVE                                | [v2.0.2](https://github.com/Vonng/pigsty/releases/tag/v2.0.2)                             |
| [v2.0.1](#v201) | 2023-03-21 | v2 错误修复，安全增强，升级 Grafana 版本                                 | [v2.0.1](https://github.com/Vonng/pigsty/releases/tag/v2.0.1)                             |
| [v2.0.0](#v200) | 2023-02-28 | 架构大升级，兼容性、安全性、可维护性显著增强                                     | [v2.0.0](https://github.com/Vonng/pigsty/releases/tag/v2.0.0)                             |
| [v1.5.1](#v151) | 2022-06-18 | Grafana 安全性修复                                              | [v1.5.1](https://github.com/Vonng/pigsty/releases/tag/v1.5.1)                             |
| [v1.5.0](#v150) | 2022-05-31 | Docker 应用程序支持                                              | [v1.5.0](https://github.com/Vonng/pigsty/releases/tag/v1.5.0)                             |
| [v1.4.1](#v141) | 2022-04-20 | 错误修复 & 英文文档完整翻译                                            | [v1.4.1](https://github.com/Vonng/pigsty/releases/tag/v1.4.1)                             |
| [v1.4.0](#v140) | 2022-03-31 | MatrixDB 支持，分离 INFRA/NODES/PGSQL/REDIS模块                   | [v1.4.0](https://github.com/Vonng/pigsty/releases/tag/v1.4.0)                             |
| [v1.3.0](#v130) | 2021-11-30 | PGCAT 重整 & PGSQL 增强 & Redis Beta支持                         | [v1.3.0](https://github.com/Vonng/pigsty/releases/tag/v1.3.0)                             |
| [v1.2.0](#v120) | 2021-11-03 | 默认 PGSQL 版本升级至 14                                          | [v1.2.0](https://github.com/Vonng/pigsty/releases/tag/v1.2.0)                             |
| [v1.1.0](#v110) | 2021-10-12 | 主页, JupyterLab, PGWEB, Pev2 & pgbadger                     | [v1.1.0](https://github.com/Vonng/pigsty/releases/tag/v1.1.0)                             |
| [v1.0.0](#v100) | 2021-07-26 | v1 正式版, 监控系统重整                                             | [v1.0.0](https://github.com/Vonng/pigsty/releases/tag/v1.0.0)                             |
| [v0.9.0](#v090) | 2021-04-04 | Pigsty 图形界面, 命令行界面, 日志集成                                   | [v0.9.0](https://github.com/Vonng/pigsty/releases/tag/v0.9.0)                             |
| [v0.8.0](#v080) | 2021-03-28 | 服务置备，定制对外暴露的数据库服务                                          | [v0.8.0](https://github.com/Vonng/pigsty/releases/tag/v0.8.0)                             |
| [v0.7.0](#v070) | 2021-03-01 | 仅监控部署，监控现有 PostgreSQL 实例                                   | [v0.7.0](https://github.com/Vonng/pigsty/releases/tag/v0.7.0)                             |
| [v0.6.0](#v060) | 2021-02-19 | 架构增强，将PG与Consul解耦                                          | [v0.6.0](https://github.com/Vonng/pigsty/releases/tag/v0.6.0)                             |
| [v0.5.0](#v050) | 2021-01-07 | 支持在配置中定义业务数据库/用户                                           | [v0.5.0](https://github.com/Vonng/pigsty/releases/tag/v0.5.0)                             |
| [v0.4.0](#v040) | 2020-12-14 | 支持 PostgreSQL 13，添加官方文档                                    | [v0.4.0](https://github.com/Vonng/pigsty/releases/tag/v0.4.0)                             |
| [v0.3.0](#v030) | 2020-10-22 | 虚拟机置备方案正式定稿                                                | [v0.3.0](https://github.com/Vonng/pigsty/releases/tag/v0.3.0)                             |
| v0.2.0          | 2020-07-10 | PG监控系统第六版正式发布                                              | [v0.2.0](https://github.com/Vonng/pigsty/commit/385e33a62a19817e8ba19997260e6b77d99fe2ba) |
| v0.1.0          | 2020-06-20 | 在生产仿真测试环境中验证通过                                             | [v0.1.0](https://github.com/Vonng/pigsty/commit/1cf2ea5ee91db071de00ec805032928ff582453b) |
| v0.0.5          | 2020-08-19 | 离线安装模式：无需互联网访问即可交付                                         | [v0.0.5](https://github.com/Vonng/pigsty/commit/0fe9e829b298fe5e56307de3f78c95071de28245) |
| v0.0.4          | 2020-07-27 | 将 Ansible 剧本重构为 Role Refactor playbooks into ansible roles | [v0.0.4](https://github.com/Vonng/pigsty/commit/90b44259818d2c71e37df5250fe8ed1078a883d0) |
| v0.0.3          | 2020-06-22 | 接口设计改进                                                     | [v0.0.3](https://github.com/Vonng/pigsty/commit/4c5c68ccd57bc32a9e9c98aa3f264aa19f45c7ee) |
| v0.0.2          | 2020-04-30 | 首次提交                                                       | [v0.0.2](https://github.com/Vonng/pigsty/commit/dd646775624ddb33aef7884f4f030682bdc371f8) |
| v0.0.1          | 2019-05-15 | 概念原型                                                       | [v0.0.1](https://github.com/Vonng/pg/commit/fa2ade31f8e81093eeba9d966c20120054f0646b)     |


----------------

## v2.5.0

```bash
curl https://get.pigsty.cc/latest | bash
```

**亮点特性**

- [Ubuntu](https://github.com/Vonng/pigsty/blob/master/files/pigsty/ubuntu.yml) / [Debian](https://github.com/Vonng/pigsty/blob/master/files/pigsty/debian.yml)  支持： bullseye, bookworm, jammy, focal
- 使用CDN `repo.pigsty.cc` 软件源，提供 rpm/deb 软件包下载。
- Anolis 操作系统支持（ 兼容 EL 8.8 ）。
- 使用 PostgreSQL 16 替代 PostgreSQL 14 作为备选主要支持版本  
- 新增了 PGSQL Exporter / PGSQL Patroni 监控面板，重做 PGSQL Query 面板 
- 扩展更新：
  - PostGIS 版本至 3.4（ EL8/EL9 ），EL7 仍使用 PostGIS 3.3
  - 移除 `pg_embedding`，因为开发者不再对其进行维护，建议使用 `pgvector` 替换。
  - 新扩展（EL）：点云插件 `pointcloud` 支持，Ubuntu原生带有此扩展。
  - 新扩展（EL）： `imgsmlr`， `pg_similarity`，`pg_bigm` 用于搜索。
  - 重新编译 `pg_filedump` 为 PG 大版本无关的软件包。。
  - 新收纳 `hydra` 列存储扩展，不再默认安装 `citus` 扩展。

- 软件更新：
  - Grafana 更新至 v10.1.5
  - Prometheus 更新至 v2.47
  - Promtail/Loki 更新至 v2.9.1
  - Node Exporter 更新至 v1.6.1
  - Bytebase 更新至 v2.10.0
  - patroni 更新至 v3.1.2
  - pgbouncer 更新至 v1.21.0
  - pg_exporter 更新至 v0.6.0
  - pgbackrest 更新至 v2.48.0
  - pgbadger 更新至 v12.2
  - pg_graphql 更新至 v1.4.0
  - pg_net 更新至 v0.7.3
  - ferretdb 更新至 v0.12.1
  - sealos 更新至 4.3.5
  - Supabase 支持更新至 `20231013070755`


**Ubuntu 支持说明**

Pigsty 支持了 Ubuntu 22.04 (jammy) 与 20.04 (focal) 两个 LTS 版本，并提供相应的离线软件安装包。

相比 EL 系操作系统，一些参数的默认值需要显式指定调整，详情请参考 [`ubuntu.yml`](https://github.com/Vonng/pigsty/blob/master/files/pigsty/ubuntu.yml)

- `repo_upstream`：按照 Ubuntu/Debian 的包名进行了调整
- `repo_packages`：按照 Ubuntu/Debian 的包名进行了调整
- `node_repo_local_urls`：默认值为 `['deb [trusted=yes] http://${admin_ip}/pigsty ./']`
- `node_default_packages` ：
  - `zlib` -> `zlib1g`, `readline` -> `libreadline-dev`
  - `vim-minimal` -> `vim-tiny`, `bind-utils` -> `dnsutils`, `perf` -> `linux-tools-generic`,
  - 新增软件包 `acl`，确保 Ansible 权限设置正常工作
- `infra_packages`：所有含 `_` 的包要替换为 `-` 版本，此外 `postgresql-client-16` 用于替换 `postgresql16`
- `pg_packages`：Ubuntu 下惯用 `-` 替代 `_`，不需要手工安装 `patroni-etcd` 包。
- `pg_extensions`：扩展名称与EL系不太一样，Ubuntu下缺少 `passwordcheck_cracklib` 扩展。
- `pg_dbsu_uid`： Ubuntu 下 Deb 包不显式指定uid，需要手动指定，Pigsty 默认分配为 `543`

**API变更**

默认值变化：

- `repo_modules` 现在的默认值为 `infra,node,pgsql,redis,minio`，启用所有上游源
- `repo_upstream` 发生变化，现在添加了 Pigsty Infra/MinIO/Redis/PGSQL 模块化软件源 
- `repo_packages` 发生变化，移除未使用的 `karma,mtail,dellhw_exporter`，移除了 PG14 主要扩展，新增了 PG16 主要扩展，添加了 virtualenv 包。
- `node_default_packages` 发生变化，默认安装 `python3-pip` 组件。 
- `pg_libs`: `timescaledb` 从 shared_preload_libraries 中移除，现在默认不自动启用。 
- `pg_extensions` 发生变化，不再默认安装 Citus 扩展，默认安装 `passwordcheck_cracklib` 扩展，EL8,9 PostGIS 默认版本升级至 3.4 

  ```yaml
  - pg_repack_${pg_version}* wal2json_${pg_version}* passwordcheck_cracklib_${pg_version}*
  - postgis34_${pg_version}* timescaledb-2-postgresql-${pg_version}* pgvector_${pg_version}*
  ```

- Patroni 所有模板默认移除 `wal_keep_size` 参数，避免触发 Patroni 3.1.1 的错误，其功能由 `min_wal_size` 覆盖。

```
87e0be2edc35b18709d7722976e305b0  pigsty-pkg-v2.5.0.el7.x86_64.tgz
e71304d6f53ea6c0f8e2231f238e8204  pigsty-pkg-v2.5.0.el8.x86_64.tgz
39728496c134e4352436d69b02226ee8  pigsty-pkg-v2.5.0.el9.x86_64.tgz
e3f548a6c7961af6107ffeee3eabc9a7  pigsty-pkg-v2.5.0.debian11.x86_64.tgz
1e469cc86a19702e48d7c1a37e2f14f9  pigsty-pkg-v2.5.0.debian12.x86_64.tgz
cc3af3b7c12f98969d3c6962f7c4bd8f  pigsty-pkg-v2.5.0.ubuntu20.x86_64.tgz
c5b2b1a4867eee624e57aed58ac65a80  pigsty-pkg-v2.5.0.ubuntu22.x86_64.tgz
```


----------------

## v2.4.1

- [Supabase](https://supabase.com/) 支持：开源的 Firebase 替代，现可使用 Pigsty 本地托管的 PostgreSQL 实例作为数据存储。
- [PostgresML](https://postgresml.org/)支持：使用SQL完成经典机器学习算法，训练、微调、调用大语言模型（hugging face）。
- [FerretDB](https://github.com/FerretDB/FerretDB) v1.10 支持，在 PostgreSQL 上提供 MongoDB API与协议兼容能力。
- GraphQL扩展: [`pg_graphql`](https://github.com/supabase/pg_graphql)：从现有模式中反射出 GraphQL 模式，提供库内 GraphQL 查询能力。
- JWT支持扩展：[`pgjwt`](https://github.com/michelp/pgjwt) 允许您使用 SQL 验证签发 JWT (JSON Web Tokens)。
- 密钥存储扩展: [`vault`](https://github.com/supabase/vault) 可以在提供一个安全存储加密密钥的保险柜。
- 数据恢复扩展：[`pg_filedump`](https://github.com/df7cb/pg_filedump)：可用于快速从PostgreSQL二进制文件中恢复数据
- 图数据库扩展：Apache [`age`](https://age.apache.org/)，为 PostgreSQL 添加 OpenCypher 查询支持，类似 Neo4J
- 中文分词扩展：[`zhparser`](https://github.com/amutu/zhparser)，为中文全文检索提供分词能力，类似 ElasticSearch。
- 高效位图扩展：[`pg_roaringbitmap`](https://github.com/ChenHuajun/pg_roaringbitmap)，在 PostgreSQL 中提供 roaring bitmap 的支持，高效计数聚合统计。
- 向量嵌入替代：[`pg_embedding`](https://github.com/neondatabase/pg_embedding)，提供了不同于 pgvector 的另一种 HNSW 替代实现。
- 可信语言扩展：[`pg_tle`](https://github.com/aws/pg_tle)，由 AWS 出品的，允许您打包分发管理由可信存储过程语言编写的函数。
- HTTP客户端扩展：[`pgsql-http`](https://github.com/pramsey/pgsql-http)：使用 SQL 接口，curl API，发起 HTTP 请求，与各类系统交互。
- 异步HTTP扩展： [`pg_net`](https://github.com/supabase/pg_net) 允许您使用 SQL 发起非阻塞的 HTTP/HTTPS 请求。
- 列式存储引擎：[`hydra`](https://www.hydra.so/) 针对分析场景打造的向量化列存储引擎，原地替代 Citus 列存插件。
- 其他PGDG扩展：新收录8个由PGDG维护的扩展插件，Pigsty支持的插件总数达到 150+ 。
- PostgreSQL 16 内核支持，监控云端 RDS / PolarDB for PostgreSQL。

**亮点特性**

- [Supabase](https://supabase.com/) 支持：开源的 Firebase 替代，现可使用 Pigsty 托管的 PostgreSQL 实例存储数据。
- [PostgresML](https://postgresml.org/)支持：在 PostgreSQL 运行各类模型（hugging face），向量操作，经典机器学习算法。
- GraphQL支持扩展: [`pg_graphql`](https://github.com/supabase/pg_graphql)：从现有模式中反射出 GraphQL 模式，提供库内 GraphQL 查询能力。
- 异步HTTP客户端扩展： [`pg_net`](https://github.com/supabase/pg_net) 允许您使用 SQL 发起非阻塞的 HTTP/HTTPS 请求
- JWT支持扩展：[`pgjwt`](https://github.com/michelp/pgjwt) 允许您使用 SQL 验证签发 JWT (JSON Web Tokens)
- 密钥存储扩展: [`vault`](https://github.com/supabase/vault) 可以在保险柜里存储加密密钥
- 将[FerretDB](https://github.com/FerretDB/FerretDB) 版本升级至 v1.10
- 新增组件：[`pg_filedump`](https://github.com/df7cb/pg_filedump)：可用于快速从PostgreSQL二进制文件中恢复数据
- 减少 EL9 离线软件包的大小，移除非必须依赖项 `proj-data*`
- 修复了 Patroni 3.1.1 的错误

```
efabe7632d8994f3fb58f9838b8f9d7d  pigsty-pkg-v2.5.0.el7.x86_64.tgz # 1.1G
ea78957e8c8434b120d1c8c43d769b56  pigsty-pkg-v2.5.0.el8.x86_64.tgz # 1.4G
4ef280a7d28872814e34521978b851bb  pigsty-pkg-v2.5.0.el9.x86_64.tgz # 1.3G
```


----------------

## v2.4.0

使用 `bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"` 快速上手。

**最新特性**

- PostgreSQL 16 正式发布，Pigsty提供支持。
- 可以监控云数据库，RDS for PostgreSQL，以及 PolarDB，提供全新的 PGRDS 监控面板
- 正式提供商业支持与咨询服务。并发布首个 LTS 版本，为订阅客户提供最长5年的支持。
- 新扩展插件: Apache AGE, openCypher graph query engine on PostgreSQL
- 新扩展插件: zhparser, full text search for Chinese language
- 新扩展插件: pg_roaringbitmap, roaring bitmap for PostgreSQL
- 新扩展插件: pg_embedding, hnsw alternative to pgvector
- 新扩展插件: pg_tle, admin / manage stored procedure extensions
- 新扩展插件: pgsql-http, issue http request with SQL interface
- 新增插件： pg_auth_mon pg_checksums pg_failover_slots pg_readonly postgresql-unit pg_store_plans pg_uuidv7 set_user
- Redis改进：支持 Redis 哨兵监控，配置主从集群的自动高可用。

**API变化**

- 新增参数，`REDIS`.`redis_sentinel_monitor`，用于指定 Sentinel 集群监控的主库列表

**问题修复**

- 修复 Grafana 10.1 注册数据源时缺少 `uid` 的问题

```
MD5 (pigsty-pkg-v2.4.0.el7.x86_64.tgz) = 257443e3c171439914cbfad8e9f72b17
MD5 (pigsty-pkg-v2.4.0.el8.x86_64.tgz) = 41ad8007ffbfe7d5e8ba5c4b51ff2adc
MD5 (pigsty-pkg-v2.4.0.el9.x86_64.tgz) = 9a950aed77a6df90b0265a6fa6029250
```


----------------

## v2.3.1

使用 `bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"` 快速开始。

**最新特性**

- `pgvector` 更新至 0.5，添加 hnsw 算法支持。
- 支持 PostgreSQL 16 RC1 (el8/el9)
- 默认包中添加了 SealOS 用于快速部署Kubernetes集群。

**问题修复**

- 修复了 `infra`.`repo`.`repo_pkg` 任务：当 `repo_packages` 中包名包含 `*` 时，下载可能会受到 `/www/pigsty` 现有内容的影响。
- 将 `vip_dns_suffix` 的默认值由 `.vip` 调整为空字符串，即集群本身的名称将默认作为节点集群的 L2 VIP
- `modprobe watchdog` and `chown watchdog` if `patroni_watchdog_mode` is `required`
- 当 `pg_dbsu_sudo` = `limit` and `patroni_watchdog_mode` = `required` 时，授予数据库 dbsu 以下命令的 sudo 执行权限
  - `/usr/bin/sudo /sbin/modprobe softdog`：在启动 Patroni 服务时确保 softdog 内核模块启用
  - `/usr/bin/sudo /bin/chown {{ pg_dbsu }} /dev/watchdog`: 在启动 Patroni 服务时，确保 watchdog 属主正确

**文档更新**

- 向英文文档中添加了更新内容。
- 添加了简体中文版本的内置文档，修复了 pigsty.cc 文档站的中文文档。

**软件更新**

- PostgreSQL 16 RC1 for EL8/EL9
- PGVector 0.5.0，支持 hnsw 索引
- TimescaleDB 2.11.2
- grafana 10.1.0
- loki & promtail 2.8.4
- redis-stack 7.2 on el7/8
- mcli-20230829225506 / minio-20230829230735
- ferretdb 1.9
- sealos 4.3.3
- pgbadger 1.12.2

```
ce69791eb622fa87c543096cdf11f970  pigsty-pkg-v2.3.1.el7.x86_64.tgz
495aba9d6d18ce1ebed6271e6c96b63a  pigsty-pkg-v2.3.1.el8.x86_64.tgz
38b45582cbc337ff363144980d0d7b64  pigsty-pkg-v2.3.1.el9.x86_64.tgz
```


----------------

## v2.3.0

相关文章：《[Pigsty v2.3 发布：应用生态丰富](https://mp.weixin.qq.com/s/p5sP42xsAxKPhWb_T7DqSA)》

发布注记：https://github.com/Vonng/pigsty/releases/tag/v2.3.0

使用 `bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"` 快速开始。

**亮点特性**

* INFRA: 添加了对 NODE/PGSQL VIP 的监控支持
* PGSQL: 通过小版本升级修复了 PostgreSQL [CVE-2023-39417](https://www.postgresql.org/about/news/postgresql-154-149-1312-1216-1121-and-postgresql-16-beta-3-released-2689/)： 15.4, 14.9, 13.12, 12.16，以及 Patroni v3.1.0
* NODE:  允许用户使用 `keepalived` 为一个节点集群绑定 L2 VIP
* REPO: Pigsty 专用 yum 源优化精简，全站默认使用 HTTPS： [`get.pigsty.cc`](https://get.pigsty.cc) 与 [`demo.pigsty.cc`](https://demo.pigsty.cc)
* APP:  升级 `app/bytebase` 版本至 v2.6.0， `app/ferretdb` 版本至 v1.8；添加新的应用模板：[nocodb](https://nocodb.com/)，开源的 Airtable。
* REDIS: 升级版本至 v7.2，并重制了 Redis 监控面板。
* MONGO: 添加基于 [FerretDB](https://www.ferretdb.io/) 1.8 实现的基本支持。
* MYSQL: 添加了 Prometheus / Grafana / CA 中的代码存根，便于后续纳管。

**API变化**

新增一个新的参数组 `NODE`.`NODE_VIP`：包含 8 个新参数

- `NODE`.`VIP`.`vip_enabled`：在此节点集群上启用 vip 吗？
- `NODE`.`VIP`.`vip_address`：ipv4 格式的节点 vip 地址，如果启用了 vip，则必需
- `NODE`.`VIP`.`vip_vrid`：必需，整数，1-255 在相同 VLAN 中应该是唯一的
- `NODE`.`VIP`.`vip_role`：master/backup，默认为备份，用作初始角色
- `NODE`.`VIP`.`vip_preempt`：可选，true/false，默认为 false，启用 vip 抢占
- `NODE`.`VIP`.`vip_interface`：节点 vip 网络接口监听，eth0 默认
- `NODE`.`VIP`.`vip_dns_suffix`：节点 vip dns 名称后缀，默认为空字符串
- `NODE`.`VIP`.`vip_exporter_port`：keepalived 导出器监听端口，默认为 9650

```
MD5 (pigsty-pkg-v2.3.0.el7.x86_64.tgz) = 81db95f1c591008725175d280ad23615
MD5 (pigsty-pkg-v2.3.0.el8.x86_64.tgz) = 6f4d169b36f6ec4aa33bfd5901c9abbe
MD5 (pigsty-pkg-v2.3.0.el9.x86_64.tgz) = 4bc9ae920e7de6dd8988ca7ee681459d
```



----------------

## v2.2.0

相关文章：《[Pigsty v2.2 发布 —— 监控系统大升级](https://mp.weixin.qq.com/s/NfQEL6fM8FA-ErijucXJ4g)》

发布注记：https://github.com/Vonng/pigsty/releases/tag/v2.2.0

快速开始： `bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"`

**亮点特性**

* 监控面板重做: https://demo.pigsty.cc
* Vagrant沙箱重做: 支持 libvirt 与新的配置模板
* Pigsty EL Yum 仓库: 统一收纳零碎 RPM，简化安装构建流程。
* 操作系统兼容性: 新增信创操作系统 UOS-v20-1050e 支持
* 新的配置模板：42 节点的生产仿真配置
* 统一使用官方 PGDG citus 软件包（el7）

**软件升级**

* PostgreSQL 16 beta2
* Citus 12 / PostGIS 3.3.3 / TimescaleDB 2.11.1 / PGVector 0.44
* patroni 3.0.4 / pgbackrest 2.47 / pgbouncer 1.20
* grafana 10.0.3 / loki/promtail/logcli 2.8.3
* etcd 3.5.9 / haproxy v2.8.1 / redis v7.0.12
* minio 20230711212934 / mcli 20230711233044


**Bug修复**

* 修复了 Docker 组权限的问题 [29434bd](https://github.com/Vonng/pigsty/commit/29434bdd39548d95d80a236de9099874ed564f9b)
* 将 `infra` 操作系统用户组作为额外的组，而不是首要用户组。
* 修复了 Redis Sentinel Systemd 服务的自动启用状态 [5c96feb](https://github.com/Vonng/pigsty/commit/5c96feb598ad6e44daa7a595e34c87e67952777b)
* 放宽了 `bootstrap` & `configure` 的检查，特别是当 `/etc/redhat-release` 不存在的时候。
* 升级到 Grafana 10，修复了 Grafana 9.x [CVE-2023-1410](https://grafana.com/blog/2023/03/22/grafana-security-release-new-versions-with-security-fixes-for-cve-2023-1410/)
* 在 CMDB `pglog` 模式中添加了 PG 14 - 16 的 command tags 与 错误代码。


**API变化**

新增1个变量

- `INFRA`.`NGINX`.`nginx_exporter_enabled`: 现在用户可以通过设置这个参数来禁用 nginx_exporter 。

默认值变化:

- `repo_modules`: `node,pgsql,infra` : redis 现在由 pigsty-el 仓库提供，不再需要 `redis` 模块。
- `repo_upstream`:
  - 新增 `pigsty-el`: 与具体EL版本无关的RPM: 例如 grafana, minio, pg_exporter, 等等……
  - 新增 `pigsty-misc`: 与具体EL版本有关的RPM: 例如 redis, prometheus 全家桶，等等……
  - 移除 `citus`: 现在 PGDG 中有完整的 EL7 - EL9 citus 12 支持
  - 移除 `remi`: redis 现在由 pigsty-el 仓库提供，不再需要 `redis` 模块。
- `repo_packages`:
  - ansible python3 python3-pip python3-requests python3.11-jmespath dnf-utils modulemd-tools # el7: python36-requests python36-idna yum-utils
  - grafana loki logcli promtail prometheus2 alertmanager karma pushgateway node_exporter blackbox_exporter nginx_exporter redis_exporter
  - redis etcd minio mcli haproxy vip-manager pg_exporter nginx createrepo_c sshpass chrony dnsmasq docker-ce docker-compose-plugin flamegraph
  - lz4 unzip bzip2 zlib yum pv jq git ncdu make patch bash lsof wget uuid tuned perf nvme-cli numactl grubby sysstat iotop htop rsync tcpdump
  - netcat socat ftp lrzsz net-tools ipvsadm bind-utils telnet audit ca-certificates openssl openssh-clients readline vim-minimal
  - postgresql13* wal2json_13* pg_repack_13* passwordcheck_cracklib_13* postgresql12* wal2json_12* pg_repack_12* passwordcheck_cracklib_12* timescaledb-tools
  - postgresql15 postgresql15* citus_15* pglogical_15* wal2json_15* pg_repack_15* pgvector_15* timescaledb-2-postgresql-15* postgis33_15* passwordcheck_cracklib_15* pg_cron_15*
  - postgresql14 postgresql14* citus_14* pglogical_14* wal2json_14* pg_repack_14* pgvector_14* timescaledb-2-postgresql-14* postgis33_14* passwordcheck_cracklib_14* pg_cron_14*
  - postgresql16* wal2json_16* pgvector_16* pg_squeeze_16* postgis34_16* passwordcheck_cracklib_16* pg_cron_16*
  - patroni patroni-etcd pgbouncer pgbadger pgbackrest pgloader pg_activity pg_partman_15 pg_permissions_15 pgaudit17_15 pgexportdoc_15 pgimportdoc_15 pg_statement_rollback_15*
  - orafce_15* mysqlcompat_15 mongo_fdw_15* tds_fdw_15* mysql_fdw_15 hdfs_fdw_15 sqlite_fdw_15 pgbouncer_fdw_15 multicorn2_15* powa_15* pg_stat_kcache_15* pg_stat_monitor_15* pg_qualstats_15 pg_track_settings_15 pg_wait_sampling_15 system_stats_15
  - plprofiler_15* plproxy_15 plsh_15* pldebugger_15 plpgsql_check_15*  pgtt_15 pgq_15* pgsql_tweaks_15 count_distinct_15 hypopg_15 timestamp9_15* semver_15* prefix_15* rum_15 geoip_15 periods_15 ip4r_15 tdigest_15 hll_15 pgmp_15 extra_window_functions_15 topn_15
  - pg_background_15 e-maj_15 pg_catcheck_15 pg_prioritize_15 pgcopydb_15 pg_filedump_15 pgcryptokey_15 logerrors_15 pg_top_15 pg_comparator_15 pg_ivm_15* pgsodium_15* pgfincore_15* ddlx_15 credcheck_15 safeupdate_15 pg_squeeze_15* pg_fkpart_15 pg_jobmon_15
- `repo_url_packages`:
  - https://get.pigsty.cc/rpm/pev.html
  - https://get.pigsty.cc/rpm/chart.tgz
- `node_default_packages`:
  - lz4,unzip,bzip2,zlib,yum,pv,jq,git,ncdu,make,patch,bash,lsof,wget,uuid,tuned,nvme-cli,numactl,grubby,sysstat,iotop,htop,rsync,tcpdump
  - netcat,socat,ftp,lrzsz,net-tools,ipvsadm,bind-utils,telnet,audit,ca-certificates,openssl,readline,vim-minimal,node_exporter,etcd,haproxy,python3,python3-pip
- `infra_packages`
  - grafana,loki,logcli,promtail,prometheus2,alertmanager,karma,pushgateway
  - node_exporter,blackbox_exporter,nginx_exporter,redis_exporter,pg_exporter
  - nginx,dnsmasq,ansible,postgresql15,redis,mcli,python3-requests
- `PGSERVICE` in `.pigsty` 被移除了，取而代之的是 `PGDATABASE=postgres`，这用户只需 IP 地址就可以从管理节点访问特定实例。

目录结构变化:

- `bin/dns` and `bin/ssh` 现在被移动到 `vagrant/` 目录中。

```bash
MD5 (pigsty-pkg-v2.2.0.el7.x86_64.tgz) = 5fb6a449a234e36c0d895a35c76add3c
MD5 (pigsty-pkg-v2.2.0.el8.x86_64.tgz) = c7211730998d3b32671234e91f529fd0
MD5 (pigsty-pkg-v2.2.0.el9.x86_64.tgz) = 385432fe86ee0f8cbccbbc9454472fdd
```



----------------

## v2.1.0

相关文章：[Pigsty v2.1 发布：向量扩展 / PG12-16 支持](https://mp.weixin.qq.com/s/Wu9kWEFSI3oGUr8t3hrz_w)

发布注记：https://github.com/Vonng/pigsty/releases/tag/v2.1.0

**Highlight**

* PostgreSQL 16 beta 支持, 以及 12 ~ 15 的支持.
* 为 PG 12 - 15 新增了 PGVector 扩展支持，用于存储 AI 嵌入。
* 为 Grafana 添加了额外6个默认的扩展面板/数据源插件。
* 添加 `bin/profile` 脚本用于执行远程 Profiling ，生成火焰图。
* 添加 `bin/validate` 用于校验 `pigsty.yml` 配置文件合法性。
* 添加 `bin/repo-add` 用于快速向节点添加 Yum 源定义。
* PostgreSQL 16 可观测性：添加了 `pg_stat_io` 支持与相关监控面板

**软件升级**

* PostgreSQL 15.3 , 14.8, 13.11, 12.15, 11.20, and 16 beta1
* pgBackRest 2.46 / pgbouncer 1.19
* Redis 7.0.11
* Grafana v9.5.3
* Loki / Promtail / Logcli 2.8.2
* Prometheus 2.44
* TimescaleDB 2.11.0
* minio-20230518000536 / mcli-20230518165900
* Bytebase v2.2.0


**改进增强**

* 当添加本地用户的公钥时，所有的 `id*.pub` 都会被添加到远程机器上（例如椭圆曲线算法生成的密钥文件）




----------------

## v2.0.2

https://github.com/Vonng/pigsty/releases/tag/v2.0.2

**亮点**

使用开箱即用的 [`pgvector`](https://github.com/pgvector/pgvector) 存储 AI Embedding、索引、检索向量。

* 新扩展 [`pgvector`](https://github.com/Vonng/pigsty/issues/267)
* [MinIO CVE-2023-28432](https://github.com/Vonng/pigsty/issues/265) 问题修复

**变更**

* 新扩展插件 [`pgvector`](https://github.com/Vonng/pigsty/issues/267) 用于存储 AI 嵌入，并执行向量相似度搜索。
* 修复 [MinIO CVE-2023-28432](https://github.com/Vonng/pigsty/issues/265) ，使用 20230324 新提供的 policy API.
* 为 DNSMASQ systemd 服务添加动态重载命令
* 更新 PEV 版本至 v1.8
* 更新 grafana 版本至 v9.4.7
* 更新 MinIO 与 MCLI 版本至 20230324
* 更新 bytebase 版本至 v1.15.0
* 更新监控面板并修复死链接
* 更新了阿里云 Terraform 模板，默认使用 RockyLinux 9
* 使用 Grafana v9.4 的 Provisioning API
* 为众多管理任务添加了 asciinema 视频
* 修复了 EL8 PostgreSQL 的破损依赖：移除 anonymizer_15 faker_15 pgloader

```bash
MD5 (pigsty-pkg-v2.0.2.el7.x86_64.tgz) = d46440a115d741386d29d6de646acfe2
MD5 (pigsty-pkg-v2.0.2.el8.x86_64.tgz) = 5fa268b5545ac96b40c444210157e1e1
MD5 (pigsty-pkg-v2.0.2.el9.x86_64.tgz) = c8b113d57c769ee86a22579fc98e8345
```



----------------

## v2.0.1

https://github.com/Vonng/pigsty/releases/tag/v2.0.1

安全性改进，与对 [v2.0.0](https://github.com/Vonng/pigsty/releases/tag/v2.0.0) 的 BUG 修复。

**改进**

- 更换猪头 logo 以符合 PostgreSQL 商标政策。
- 将 grafana 版本升级至 v9.4，界面更佳且修复了 bug。
- 将 patroni 版本升级至 v3.0.1，其中包含了一些 bug 修复。
- 修改：将 grafana systemd 服务文件回滚到 rpm 默认的版本。
- 使用缓慢的 `copy` 代替 `rsync` 来复制 grafana 仪表板，更加可靠。
- 增强：bootstrap 执行后会添加回默认 repo 文件。
- 添加 asciinema 视频，用于各种管理任务。
- 安全增强模式：限制监控用户权限。
- 新的配置模板：`dual.yml`，用于双节点部署。
- 在 `crit.yml` 模板中启用 `log_connections` 和 `log_disconnections`。
- 在 `crit.yml` 模板中的 `pg_libs` 中启用 `$lib/passwordcheck`。
- 明确授予 `pg_monitor` 角色监视视图权限。
- 从 `dbuser_monitor` 中移除默认的 `dbrole_readonly` 以限制监控用户的权限
- 现在 patroni 监听在 `{{ inventory_hostname }}` 而不是 `0.0.0.0`
- 现在你可以使用 `pg_listen` 控制 postgres/pgbouncer 监听的地址
- 现在你可以在 `pg_listen` 中使用 `${ip}`, `${lo}`, `${vip}` 占位符
- 将 Aliyun terraform 镜像从 centos 7.9 提升到 rocky Linux 9
- 将 bytebase 版本升级到 v1.14.0


**BUG修复**

* 为 alertmanager 添加缺失的 advertise 地址。
* 解决使用 `bin/pgsql-user` 创建数据库用户时，`pg_mode` 变量缺失问题。
* 在 `redis.yml` 中为 Redis 集群加入任务添加 `-a password` 选项。
* 在 `infra-rm.yml`.`remove infra data` 任务中补充缺失的默认值。
* 修复 prometheus 监控对象定义文件的属主为 `prometheus` 用户。
* 使用 管理员用户 而不是 root 去删除 DCS 中的元数据。
* 修复了由 grafana 9.4 bug 导致的问题：Meta数据源缺失。


**注意事项**

EL8 pgdg 上游官方源处于依赖破损状态，请小心使用。涉及到的软件包: `postgis33_15, pgloader, postgresql_anonymizer_15*, postgresql_faker_15`

**如何升级？**

```bash
cd ~/pigsty; tar -zcf /tmp/files.tgz files; rm -rf ~/pigsty    # backup files dir and remove
cd ~; bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"      # get latest pigsty source
cd ~/pigsty; rm -rf files; tar -xf /tmp/files.tgz -C ~/pigsty  # restore files dir
```

**Checksums**

```bash
MD5 (pigsty-pkg-v2.0.1.el7.x86_64.tgz) = 5cfbe98fd9706b9e0f15c1065971b3f6
MD5 (pigsty-pkg-v2.0.1.el8.x86_64.tgz) = c34aa460925ae7548866bf51b8b8759c
MD5 (pigsty-pkg-v2.0.1.el9.x86_64.tgz) = 055057cebd93c473a67fb63bcde22d33
```

特别感谢 [@cocoonkid](https://github.com/cocoonkid) 提供的反馈。



----------------

## v2.0.0

相关文章：

- [更好的开源RDS替代：Pigsty](https://mp.weixin.qq.com/s/-E_-HZ7LvOze5lmzy3QbQA)
- [炮打 RDS，Pigsty v2.0 发布](https://mp.weixin.qq.com/s/WsR-c64OJfkMql7zX7XmDA)
- [Pigsty v2 正式发布：更好的RDS PG开源替代](https://mp.weixin.qq.com/s/9lceZdyUZU9AzsqlAcpjTA)
- [Pigsty 2.0 展望](https://mp.weixin.qq.com/s/g-ZPWqBwjzaxZKxyjVmFig)

Pigsty [v2.0.0](https://github.com/Vonng/pigsty/releases/tag/v2.0.0) 正式发布！

从v2.0.0开始，PIGSTY 现在是 "PostgreSQL In Great STYle"的首字母缩写，即"全盛状态的PostgreSQL"。

```bash
curl -fsSL https://get.pigsty.cc/latest | bash
```

<details><summary>Download directly from GitHub Release</summary>

```bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Vonng/pigsty/master/bin/get)"

# or download tarball directly with curl (EL9)
curl -L https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-v2.0.0.tgz -o ~/pigsty.tgz
curl -L https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el9.x86_64.tgz  -o /tmp/pkg.tgz
# EL7: https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el7.x86_64.tgz
# EL8: https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el8.x86_64.tgz
```

</details>


**亮点**

* 完美整合 PostgreSQL 15, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10，分布式地理时序超融合数据库。
* OS兼容性大幅增强：支持 EL7，8，9，以及 RHEL, CentOS, Rocky, OracleLinux, AlmaLinux等兼容发行版。
* 安全性改进：自签名CA，全局网络流量SSL加密，密码scram-sha-256认证，备份采用AES加密，重制的HBA规则系统。
* Patroni升级至3.0，提供原生的高可用 Citus 分布式集群支持，默认启用FailSafe模式，无惧DCS故障致全局主库瘫痪。
* 提供基于 pgBackRest 的开箱即用的时间点恢复 PITR 支持，默认支持本地文件系统与专用MinIO/S3集群备份。
* 新模块 `ETCD`，可独立部署，简易扩缩容，自带监控高可用，彻底取代 Consul 作为高可用 PG 的 DCS。
* 新模块 `MINIO`，可独立部署，支持多盘多节点部署，用作S3本地替代，亦用于集中式 PostgreSQL 备份仓库。
* 大幅精简配置文件参数，无需默认值即可使用；模板自动根据机器规格调整主机与PG参数，HBA/服务的定义更简洁泛用。
* 受 Grafana 与 MinIO 影响，软件协议由 Apache License 2.0 变更为 AGPL 3.0


**兼容性**

* 支持 EL7, EL8, EL9 三个大版本，并提供三个版本对应的离线软件包，默认开发测试环境由EL7升级至EL9。
* 支持更多EL兼容Linux发行版：RHEL, CentOS, RockyLinux, AlmaLinux, OracleLinux等…
* 源码包与离线软件包的命名规则发生改变，现在版本号，操作系统版本号，架构都会体现在包名中。
* `PGSQL`: PostgreSQL 15.2, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 现可同时使用，协同工作。
* `PGSQL`: Patroni 升级至 3.0 版本，作为 PGSQL 的高可用组件。
  * 默认使用 ETCD 作为 DCS，取代 Consul，减少一个 Consul Agent 失效点。
  * 因为 vip-manager 升级至 2.1 并使用 ETCDv3 API，彻底弃用 ETCDv2 API，Patroni同理
  * 提供原生的高可用 Citus 分布式集群支持。使用完全开源所有功能的 Citus 11.2。
  * 默认启用FailSafe模式，无惧DCS故障致全局主库瘫痪。
* `PGSQL`: 引入 pgBackrest v2.44 提供开箱即用的 PostgreSQL 时间点恢复 PITR 功能
  * 默认使用主库上的备份目录创建备份仓库，滚动保留两天的恢复窗口。
  * 默认备选备份仓库为专用 MinIO/S3 集群，滚动保留两周的恢复窗口，本地使用需要启用 MinIO 模块。
* `ETCD` 现在作为一个独立部署的模块，带有完整的扩容/缩容方案与监控。
* `MINIO` 现在成为一个独立部署的模块，支持多盘多节点部署，用作S3本地替代，亦可用作集中式备份仓库。
* `NODE` 模块现在包含 `haproxy`, `docker`, `node_exporter`, `promtail` 功能组件
  * `chronyd` 现在取代 `ntpd` 成为所有节点默认的 NTP 服务。
  * HAPROXY 现从属于 `NODE` 的一部分，而不再是 `PGSQL` 专属，可以 NodePort 的方式对外暴露服务。
  * 现在 `PGSQL` 模块可以使用专用的集中式 HAPROXY 集群统一对外提供服务。
* `INFRA` 模块现在包含 `dnsmasq`, `nginx`, `prometheus`, `grafana`, `loki` 等组件
  * Infra 模块中的 DNSMASQ 服务器默认启用，并添加为所有节点的默认 DNS 服务器之一。
  * 添加了 `blackbox_exporter` 用于主机 PING 探测，`pushgateway` 用于批处理任务指标。
  * `loki` 与 `promtail` 现在使用 Grafana 默认的软件包，使用官方的 Grafana Echarts 面板插件
  * 提供针对 PostgreSQL 15 的新增可观测性位点的监控支持，添加 Patroni 监控
* 软件版本升级
  * PostgreSQL 15.2 / PostGIS 3.3 / TimescaleDB 2.10 / Citus 11.2
  * Patroni 3.0 / Pgbouncer 1.18 / pgBackRest 2.44 / vip-manager 2.1
  * HAProxy 2.7 / Etcd 3.5 / MinIO 20230131022419 / mcli 20230128202938
  * Prometheus 2.42 / Grafana 9.3 / Loki & Promtail 2.7 / Node Exporter 1.5

**安全性**

* 启用了一个完整的本地自签名CA：`pigsty-ca`，用于签发内网组件所使用的证书。
* 创建用户/修改密码的操作将不再会在日志文件中留下痕迹。
* Nginx 默认启用 SSL 支持（如需HTTPS，您需要在系统中信任`pigsty-ca`，或使用Chrome `thisisunsafe`）
* ETCD 全面启用 SSL 加密客户端与服务端对等通信
* PostgreSQL 添加并默认启用了 SSL 支持，管理链接默认都使用SSL访问。
* Pgbouncer 添加了 SSL 支持，出于性能考虑默认不启用。
* Patroni 添加了 SSL 支持，并默认限制了管理 API 只能从本机与管理节点使用密码认证方可访问。
* PostgreSQL 的默认密码认证方式由 `md5` 改为 `scram-sha-256`。
* Pgbouncer添加了认证查询支持，可以动态管理连接池用户。
* pgBackRest 使用远端集中备份存储仓库时，默认使用 `AES-256-CBC` 加密备份数据。
* 提供高安全等级配置模板：强制使用全局 SSL，并要求使用管理员证书登陆。
* 所有默认HBA规则现在全部在配置文件中显式定义。

**可维护性**

* 现有的配置模板可根据机器规格（CPU/内存/存储）自动调整优化。
* 现在可以动态配置 Postgres/Pgbouncer/Patroni/pgBackRest 的日志目录：默认为：`/pg/log/<type>/`
* 原有的 IP 地址占位符 `10.10.10.10` 被替换为一个专用变量：`${admin_ip}`，可在多处引用，便于切换备用管理节点。
* 您可以指定 `region` 来使用不同地区的上游镜像源，以加快软件包的下载速度。
* 现在允许用户定义更细粒度的上游源地址，您可以根据不同的EL版本、架构，以及地区，使用不同的上游源。
* 提供了阿里云与AWS中国地区的 Terraform 模板，可用于一键拉起所需的 EC2 虚拟机。
* 提供了多种不同规格的 Vagrant 沙箱模板：`meta`, `full`, `el7/8/9`, `minio`, `build`, `citus`
* 添加了新的专用剧本：`pgsql-monitor.yml` 用于监控现有的 Postgres 实例或 RDS。
* 添加了新的专用剧本：`pgsql-migration.yml` ，使用逻辑复制无缝迁移现有实例至 Pigsty管理的集群。
* 添加了一系列专用 Shell 实用命令，封装常见运维操作，方便用户使用。
* 优化了所有 Ansible Role 的实现，使其更加简洁、易读、易维护，无需默认参数即可使用。
* 允许在业务数据库/用户的层次上定义额外的 Pgbouncer 参数。


**API变更**

Pigsty v2.0 进行了大量变更，新增64个参数，移除13个参数，重命名17个参数。

**新增的参数**

- `INFRA`.`META`.`admin_ip` : 主元节点 IP 地址
- `INFRA`.`META`.`region` : 上游镜像区域：default|china|europe
- `INFRA`.`META`.`os_version` : 企业版 Linux 发行版本：7,8,9
- `INFRA`.`CA`.`ca_cn` : CA 通用名称，默认为 pigsty-ca
- `INFRA`.`CA`.`cert_validity` : 证书有效期，默认为 20 年
- `INFRA`.`REPO`.`repo_enabled` : 在 infra 节点上构建本地 yum 仓库吗？
- `INFRA`.`REPO`.`repo_upstream` : 上游 yum 仓库定义列表
- `INFRA`.`REPO`.`repo_home` : 本地 yum 仓库的主目录，通常与 nginx_home '/www' 相同
- `INFRA`.`NGINX`.`nginx_ssl_port` : https 监听端口
- `INFRA`.`NGINX`.`nginx_ssl_enabled` : 启用 nginx https 吗？
- `INFRA`.`PROMTETHEUS`.`alertmanager_endpoint` : altermanager 端点（ip|domain）：端口格式
- `NODE`.`NODE_TUNE`.`node_hugepage_ratio` : 内存 hugepage 比率，默认禁用，值为 0
- `NODE`.`HAPROXY`.`haproxy_service` : 要公开的 haproxy 服务列表
- `PGSQL`.`PG_ID`.`pg_mode` : pgsql 集群模式：pgsql,citus,gpsql
- `PGSQL`.`PG_BUSINESS`.`pg_dbsu_password` : dbsu 密码，默认为空字符串表示没有 dbsu 密码
- `PGSQL`.`PG_INSTALL`.`pg_log_dir` : postgres 日志目录，默认为 `/pg/data/log`
- `PGSQL`.`PG_BOOTSTRAP`.`pg_storage_type` : SSD|HDD，默认为 SSD
- `PGSQL`.`PG_BOOTSTRAP`.`patroni_log_dir` : patroni 日志目录，默认为 `/pg/log`
- `PGSQL`.`PG_BOOTSTRAP`.`patroni_ssl_enabled` : 使用 SSL 保护 patroni RestAPI 通信？
- `PGSQL`.`PG_BOOTSTRAP`.`patroni_username` : patroni rest api 用户名
- `PGSQL`.`PG_BOOTSTRAP`.`patroni_password` : patroni rest api 密码（重要：请更改此密码）
- `PGSQL`.`PG_BOOTSTRAP`.`patroni_citus_db` : 由 patroni 管理的 citus 数据库，默认为 postgres
- `PGSQL`.`PG_BOOTSTRAP`.`pg_max_conn` : postgres 最大连接数，`auto` 将使用推荐值
- `PGSQL`.`PG_BOOTSTRAP`.`pg_shmem_ratio` : postgres 共享内存比率，默认为 0.25，范围 0.1~0.4
- `PGSQL`.`PG_BOOTSTRAP`.`pg_rto` : 恢复时间目标，故障转移的 ttl，默认为 30s
- `PGSQL`.`PG_BOOTSTRAP`.`pg_rpo` : 恢复点目标，默认最多丢失 1MB 数据
- `PGSQL`.`PG_BOOTSTRAP`.`pg_pwd_enc` : 密码加密算法：md5|scram-sha-256
- `PGSQL`.`PG_BOOTSTRAP`.`pgbouncer_log_dir` : pgbouncer 日志目录，默认为 `/var/log/pgbouncer`
- `PGSQL`.`PG_BOOTSTRAP`.`pgbouncer_auth_query` : 如果启用，查询 pg_authid 表以检索 biz 用户，而不是填充用户列表
- `PGSQL`.`PG_BOOTSTRAP`.`pgbouncer_sslmode` : pgbouncer 客户端的 SSL：disable|allow|prefer|require|verify-ca|verify-full
- `PGSQL`.`PG_BOOTSTRAP`.`pg_service_provider` : 专用的 haproxy 节点组名称，或者默认为本地节点的空字符串
- `PGSQL`.`PG_BOOTSTRAP`.`pg_default_service_dest` : 如果 svc.dest='default'，则为默认服务目标
- `PGSQL`.`PG_BACKUP`.`pgbackrest_enabled` : 启用 pgbackrest 吗？
- `PGSQL`.`PG_BACKUP`.`pgbackrest_clean` : 初始化期间删除 pgbackrest 数据吗？
- `PGSQL`.`PG_BACKUP`.`pgbackrest_log_dir` : pgbackrest 日志目录，默认为 `/pg/log`
- `PGSQL`.`PG_BACKUP`.`pgbackrest_method` : pgbackrest 备份仓库方法，local 或 minio
- `PGSQL`.`PG_BACKUP`.`pgbackrest_repo` : pgbackrest 备份仓库配置
- `PGSQL`.`PG_DNS`.`pg_dns_suffix` : pgsql dns 后缀，默认为空字符串
- `PGSQL`.`PG_DNS`.`pg_dns_target` : auto, primary, vip, none 或 ad hoc ip
- `ETCD`.`etcd_seq` : etcd 实例标识符，必需
- `ETCD`.`etcd_cluster` : etcd 集群和组名称，默认为 etcd
- `ETCD`.`etcd_safeguard` : 防止清除正在运行的 etcd 实例吗？
- `ETCD`.`etcd_clean` : 在初始化期间清除现有的 etcd 吗？
- `ETCD`.`etcd_data` : etcd 数据目录，默认为 /data/etcd
- `ETCD`.`etcd_port` : etcd 客户端端口，默认为 2379
- `ETCD`.`etcd_peer_port` : etcd 对等端口，默认为 2380
- `ETCD`.`etcd_init` : etcd 初始集群状态，新建或已存在
- `ETCD`.`etcd_election_timeout` : etcd 选举超时，默认为 1000ms
- `ETCD`.`etcd_heartbeat_interval` : etcd 心跳间隔，默认为 100ms
- `MINIO`.`minio_seq` : minio 实例标识符，必须参数
- `MINIO`.`minio_cluster` : minio 集群名称，默认为 minio
- `MINIO`.`minio_clean` : 初始化时清理 minio 吗？默认为 false
- `MINIO`.`minio_user` : minio 操作系统用户，默认为 `minio`
- `MINIO`.`minio_node` : minio 节点名模式
- `MINIO`.`minio_data` : minio 数据目录，使用 {x...y} 来指定多个驱动器
- `MINIO`.`minio_domain` : minio 外部域名，默认为 `sss.pigsty`
- `MINIO`.`minio_port` : minio 服务端口，默认为 9000
- `MINIO`.`minio_admin_port` : minio 控制台端口，默认为 9001
- `MINIO`.`minio_access_key` : 根访问密钥，默认为 `minioadmin`
- `MINIO`.`minio_secret_key` : 根秘密密钥，默认为 `minioadmin`
- `MINIO`.`minio_extra_vars` : minio 服务器的额外环境变量
- `MINIO`.`minio_alias` : 本地 minio 部署的别名
- `MINIO`.`minio_buckets` : 待创建的 minio 存储桶列表
- `MINIO`.`minio_users` : 待创建的 minio 用户列表

**移除的参数**

- `INFRA`.`CA`.`ca_homedir` : CA 主目录，现在固定为 `/etc/pki/`
- `INFRA`.`CA`.`ca_cert` : CA 证书文件名，现在固定为 `ca.key`
- `INFRA`.`CA`.`ca_key` : CA 密钥文件名，现在固定为 `ca.key`
- `INFRA`.`REPO`.`repo_upstreams` : 已被 `repo_upstream` 替代
- `PGSQL`.`PG_INSTALL`.`pgdg_repo` : 现在由节点 playbooks 负责
- `PGSQL`.`PG_INSTALL`.`pg_add_repo` : 现在由节点 playbooks 负责
- `PGSQL`.`PG_IDENTITY`.`pg_backup` : 未使用且与部分名称冲突
- `PGSQL`.`PG_IDENTITY`.`pg_preflight_skip` : 不再使用，由 `pg_id` 替代
- `DCS`.`dcs_name` : 由于使用 etcd 而被移除
- `DCS`.`dcs_servers` : 被 ad hoc 组 `etcd` 替代
- `DCS`.`dcs_registry` : 由于使用 etcd 而被移除
- `DCS`.`dcs_safeguard` : 被 `etcd_safeguard` 替代
- `DCS`.`dcs_clean` : 被 `etcd_clean` 替代

**重命名的参数**

- `nginx_upstream`            -> `infra_portal`
- `repo_address`              -> `repo_endpoint`
- `pg_hostname`               -> `node_id_from_pg`
- `pg_sindex`                 -> `pg_group`
- `pg_services`               -> `pg_default_services`
- `pg_services_extra`         -> `pg_services`
- `pg_hba_rules_extra`        -> `pg_hba_rules`
- `pg_hba_rules`              -> `pg_default_hba_rules`
- `pgbouncer_hba_rules_extra` -> `pgb_hba_rules`
- `pgbouncer_hba_rules`       -> `pgb_default_hba_rules`
- `vip_mode`                  -> `pg_vip_enabled`
- `vip_address`               -> `pg_vip_address`
- `vip_interface`             -> `pg_vip_interface`
- `node_packages_default`     -> `node_default_packages`
- `node_packages_meta`        -> `infra_packages`
- `node_packages_meta_pip`    -> `infra_packages_pip`
- `node_data_dir`             -> `node_data`

**Checksums**

```
MD5 (pigsty-pkg-v2.0.0-rc1.el7.x86_64.tgz) = af4b5db9dc38c860de609956a8f1f0d3
MD5 (pigsty-pkg-v2.0.0-rc1.el8.x86_64.tgz) = 5b7152e142df3e3cbc06de30bd70e433
MD5 (pigsty-pkg-v2.0.0-rc1.el9.x86_64.tgz) = 1362e2a5680fc1a3a014cc4f304100bd
```

特别感谢意大利用户 @alemacci 在 SSL加密，备份，多操作系统发行版适配与自适应参数模版上的贡献！




----------------

## v1.5.1

**亮点**

重要：修复了PG14.0-14.3中 `CREATE INDEX|REINDEX CONCURRENTLY` 可能导致索引数据损坏的问题。

Pigsty v1.5.1 升级默认PostgreSQL版本至 14.4 强烈建议尽快更新。

**软件升级**

* postgres 升级至 to 14.4
* haproxy 升级至 to 2.6.0
* grafana 升级至 to 9.0.0
* prometheus 升级至 2.36.0
* patroni 升级至 2.1.4

**问题修复**

* 修复了`pgsql-migration.yml`中的TYPO
* 移除了HAProxy配置文件中的PID配置项
* 移除了默认软件包中的 i686 软件包
* 默认启用所有Systemd Redis Service
* 默认启用所有Systemd Patroni Service

**API变更**

* `grafana_database` 与 `grafana_pgurl` 被标记为过时API，将从后续版本移除

**New Apps**

* wiki.js : 使用Postgres搭建本地维基百科
* FerretDB ： 使用Postgres提供MongoDB API



----------------

## v1.5.0

**亮点概述**

* 完善的Docker支持：在管理节点上默认启用并提供诸多开箱即用的软件模板：bytebase, pgadmin, pgweb, postgrest, minio等。
* 基础设施自我监控：Nginx， ETCD， Consul， Prometheus， Grafana， Loki 自我监控
* CMDB升级：兼容性改善，支持Redis集群/Greenplum集群元数据，配置文件可视化。
* 服务发现改进：可以使用Consul自动发现所有待监控对象，并纳入Prometheus中。
* 更好的冷备份支持：默认定时备份任务，添加`pg_probackup`备份工具，一键创建延时从库。
* ETCD现在可以用作PostgreSQL/Patroni的DCS服务，作为Consul的备选项。
* Redis剧本/角色改善：现在允许对单个Redis实例，而非整个Redis节点进行初始化与移除。

**详细变更列表**

**监控面板**

* CMDB Overview：可视化Pigsty CMDB Inventory。
* DCS Overview：查阅Consul与ETCD集群的监控指标。
* Nginx Overview：查阅Pigsty Web访问指标与访问日志。
* Grafana Overview：Grafana自我监控
* Prometheus Overview：Prometheus自我监控
* INFRA Dashboard进行重制，反映基础设施整体状态

**监控架构**

* 现在允许使用 Consul 进行服务发现（当所有服务注册至Consul时）
* 现在所有的Infra组件会启用自我监控，并通过`infra_register`角色注册至Prometheus与Consul中。
* 指标收集器 pg_exporter 更新至 v0.5.0，添加新功能，`scale` 与 `default`，允许为指标指定一个倍乘因子，以及指定默认值。
*  `pg_bgwriter`, `pg_wal`, `pg_query`, `pg_db`, `pgbouncer_stat` 关于时间的指标，单位由默认的毫秒或微秒统一缩放至秒。
* `pg_table` 中的相关计数器指标，现在配置有默认值 `0`，替代原有的`NaN`。
* `pg_class`指标收集器默认移除，相关指标添加至 `pg_table` 与 `pg_index` 收集器中。
* `pg_table_size` 指标收集器现在默认启用，默认设置有300秒的缓存时间。

**部署方案**

* 新增可选软件包 `docker.tgz`，带有常用应用镜像：Pgadmin, Pgweb, Postgrest, ByteBase, Kong, Minio等。
* 新增角色ETCD，可以在DCS Servers指定的节点上自动部署ETCD服务，并自动纳入监控。
* 允许通过 `pg_dcs_type` 指定PG高可用使用的DCS服务，Consul（默认），ETCD（备选）
* 允许通过 `node_crontab` 参数，为节点配置定时任务，例如数据库备份、VACUUM，统计收集等。
* 新增了 `pg_checksum`  选项，启用时，数据库集群将启用数据校验和（此前只有`crit`模板默认启用）
* 新增了`pg_delay`选项，当实例为Standby Cluster Leader时，此参数可以用于配置一个**延迟从库**
* 新增了软件包 `pg_probackup`，默认角色`replicator`现在默认赋予了备份相关函数所需的权限。
* Redis部署现在拆分为两个部分：Redis节点与Redis实例，通过`redis_port`参数可以精确控制一个具体实例。
* Loki 与 Promtail 现在使用 `frpm` 制作的 RPM软件包进行安装。
* DCS3配置模板现在使用一个3节点的`pg-meta`集群，与一个单节点的延迟从库。

**软件升级**

* 升级 PostgreSQL 至 14.3
* 升级 Redis 至 6.2.7
* 升级 PG Exporter 至 0.5.0
* 升级 Consul 至 1.12.0
* 升级 vip-manager 至 v1.0.2
* 升级 Grafana 至 v8.5.2
* 升级 Loki & Promtail 至 v2.5.0，使用frpm打包。

**问题修复**

* 修复了Loki 与 Promtail 默认配置文件名的问题
* 修复了Loki 与 Promtail 环境变量无法正确展开的问题
* 对英文文档进行了一次完整的翻译与修缮，文档依赖的JS资源现在直接从本地获取，无需互联网访问。

**API变化**

**新参数**

- `node_data_dir` : 主要的数据挂载路径，如果不存在会被创建。
- `node_crontab_overwrite` : 覆盖 `/etc/crontab` 而非追加内容。
- `node_crontab`: 要被追加或覆盖的 node crontab 内容。
- `nameserver_enabled`: 在这个基础设施节节点上启用 nameserver 吗？
- `prometheus_enabled`: 在这个基础设施节节点上启用 prometheus 吗？
- `grafana_enabled`: 在这个基础设施节节点上启用 grafana 吗？
- `loki_enabled`: 在这个基础设施节节点上启用 loki 吗？
- `docker_enable`: 在这个基础设施节点上启用 docker 吗？
- `consul_enable`: 启用 consul 服务器/代理吗？
- `etcd_enable`: 启用 etcd 服务器/客户端吗？
- `pg_checksum`: 启用 pg 集群数据校验和吗？
- `pg_delay`: 备份集群主库复制重放时的应用延迟。

**参数重制**

现在 `*_clean` 是布尔类型的参数，用于在初始化期间清除现有实例。

`*_safeguard` 也是布尔类型的参数，用于在执行任何剧本时，避免清除正在运行的实例。

- `pg_exists_action` -> `pg_clean`
- `pg_disable_purge` -> `pg_safeguard`
- `dcs_exists_action` -> `dcs_clean`
- `dcs_disable_purge` -> `dcs_safeguard`

**参数重命名**

- `node_ntp_config` -> `node_ntp_enabled`
- `node_admin_setup` -> `node_admin_enabled`
- `node_admin_pks` -> `node_admin_pk_list`
- `node_dns_hosts` -> `node_etc_hosts_default`
- `node_dns_hosts_extra` -> `node_etc_hosts`
- `node_dns_server` -> `node_dns_method`
- `node_local_repo_url` -> `node_repo_local_urls`
- `node_packages` -> `node_packages_default`
- `node_extra_packages` -> `node_packages`
- `node_packages_meta` -> `node_packages_meta`
- `node_meta_pip_install` -> `node_packages_meta_pip`
- `node_sysctl_params` -> `node_tune_params`
- `app_list` -> `nginx_indexes`
- `grafana_plugin` -> `grafana_plugin_method`
- `grafana_cache` -> `grafana_plugin_cache`
- `grafana_plugins` -> `grafana_plugin_list`
- `grafana_git_plugin_git` -> `grafana_plugin_git`
- `haproxy_admin_auth_enabled` -> `haproxy_auth_enabled`
- `pg_shared_libraries` -> `pg_libs`
- `dcs_type` -> `pg_dcs_type`




----------------

## v1.4.1

日常错误修复 / Docker 支持 / 英文文档

现在，默认在元节点上启用 docker。您可以使用它启动海量的各类软件

现在提供英文文档。

- [将 docker 添加到默认包列表](https://github.com/Vonng/pigsty/commit/68f8c8da0576e043686137aca47bad01dd4e82c0)
- [将 docker-compose 添加到默认包列表](https://github.com/Vonng/pigsty/commit/765077744836d8600a8703dce8623182784d65a7)
- [默认禁用 nameserver & 默认启用 docker 角色](https://github.com/Vonng/pigsty/commit/9b8b7c5209d09049716318b624001de3b567452a)

**Bug 修复**

- [修复 promtail & loki 配置变量问题](https://github.com/Vonng/pigsty/commit/100f31842d473001f946200d9b8e2e3e89add35a)
- 修复 grafana 旧版警报。
- 默认禁用 nameserver
- 为 patroni 快捷方式重命名 pg-alias.sh
- [为所有仪表板禁用 exemplars 查询](https://github.com/Vonng/pigsty/commit/62d74f15f8c164e5971d9d1d1215869359267b53)
- [修复 loki 数据目录问题](https://github.com/Vonng/pigsty/commit/b277f488b7ed0fd0a7eeeb995e2efd75a048e0ef) https://github.com/Vonng/pigsty/issues/100
- [将 autovacuum_freeze_max_age 从 100000000 更改为 1000000000](https://github.com/Vonng/pigsty/commit/1690b490205af24d5f0394aba99007c0d9ebc49d)




----------------

## v1.4.0

**架构**

- 将系统解耦为4大类别：`INFRA`、`NODES`、`PGSQL`、`REDIS`，这使得pigsty更加清晰、更易于扩展。
- 单节点部署 = `INFRA` + `NODES` + `PGSQL`
- 部署pgsql集群 = `NODES` + `PGSQL`
- 部署redis集群 = `NODES` + `REDIS`
- 部署其他数据库 = `NODES` + xxx（例如 `MONGO`、`KAFKA`...待定）

**可访问性**

- 为中国大陆提供CDN。
- 使用 `bash -c "$(curl -fsSL http://get.pigsty.cc/latest)"` 获取最新源代码。
- 使用新的 `download` 脚本下载并提取包。

**监控增强**

- 将监控系统分为5大类别：`INFRA`、`NODES`、`REDIS`、`PGSQL`、`APP`
- 默认启用日志记录
  - 现在默认启用`loki`和`promtail`，带有预构建的 [loki-rpm](https://github.com/Vonng/loki-rpm)。
- 模型和标签
  - 为所有仪表板添加了一个隐藏的`ds` prometheus数据源变量，因此您只需选择一个新的数据源而不是修改Grafana数据源和仪表板。
  - 为所有指标添加了一个`ip`标签，并将其用作数据库指标和节点指标之间的连接键。
- INFRA监控
  - Infra主仪表板：INFRA概览
  - 添加日志仪表板：日志实例
  - PGLOG分析和PGLOG会话现在被视为一个示例Pigsty APP。
- NODES监控应用
  - 如果您完全不关心数据库，现在可以单独使用Pigsty作为主机监控软件！
  - 包括4个核心仪表板：节点概览 & 节点集群 & 节点实例 & 节点警报
  - 为节点引入新的身份变量：`node_cluster` 和 `nodename`
  - 变量`pg_hostname`现在意味着将主机名设置为与postgres实例名相同，以保持向后兼容性
  - 变量`nodename_overwrite` 控制是否用nodename覆盖节点的主机名
  - 变量`nodename_exchange` 将nodename写入彼此的`/etc/hosts`
  - 所有节点指标引用都经过修订，通过`ip`连接
  - 节点监控目标在`/etc/prometheus/targets/nodes`下单独管理
- PGSQL监控增强
  - 完全新的PGSQL集群，简化并专注于集群中的重要内容。
  - 新仪表板PGSQL数据库是集群级对象监控。例如整个集群而不是单个实例的表和查询。
  - PGSQL警报仪表板现在只关注pgsql警报。
  - PGSQL Shard已添加到PGSQL中。
- Redis监控增强
  - 为所有redis仪表板添加节点监控。

**MatrixDB支持**

- 通过`pigsty-matrix.yml` playbook可以部署MatrixDB（Greenplum 7）
- MatrixDB监控仪表板：PGSQL MatrixDB
- 添加示例配置：`pigsty-mxdb.yml`

**监控增强**

- 将监控系统分为5大类别：`INFRA`、`NODES`、`REDIS`、`PGSQL`、`APP`
- 默认启用日志记录
  - 现在默认启用`loki`和`promtail`，带有预构建的 [loki-rpm](https://github.com/Vonng/loki-rpm)。
- 模型和标签
  - 为所有仪表板添加了一个隐藏的`ds` prometheus数据源变量，因此您只需选择一个新的数据源而不是修改Grafana数据源和仪表板。
  - 为所有指标添加了一个`ip`标签，并将其用作数据库指标和节点指标之间的连接键。
- INFRA监控
  - Infra主仪表板：INFRA概览
  - 添加日志仪表板：日志实例
  - PGLOG分析和PGLOG会话现在被视为一个示例Pigsty APP。
- NODES监控应用
  - 如果您完全不关心数据库，现在可以单独使用Pigsty作为主机监控软件！
  - 包括4个核心仪表板：节点概览 & 节点集群 & 节点实例 & 节点警报
  - 为节点引入新的身份变量：`node_cluster` 和 `nodename`
  - 变量`pg_hostname`现在意味着将主机名设置为与postgres实例名相同，以保持向后兼容性
  - 变量`nodename_overwrite` 控制是否用nodename覆盖节点的主机名
  - 变量`nodename_exchange` 将nodename写入彼此的`/etc/hosts`
  - 所有节点指标引用都经过修订，通过`ip`连接
  - 节点监控目标在`/etc/prometheus/targets/nodes`下单独管理
- PGSQL监控增强
  - 完全新的PGSQL集群，简化并专注于集群中的重要内容。
  - 新仪表板PGSQL数据库是集群级对象监控。例如整个集群而不是单个实例的表和查询。
  - PGSQL警报仪表板现在只关注pgsql警报。
  - PGSQL Shard已添加到PGSQL中。
- Redis监控增强
  - 为所有redis仪表板添加节点监控。

**MatrixDB支持**

- 通过`pigsty-matrix.yml` playbook可以部署MatrixDB（Greenplum 7）
- MatrixDB监控仪表板：PGSQL MatrixDB
- 添加示例配置：`pigsty-mxdb.yml`


**置备改进**

现在 pigsty 的工作流如下：

```
 infra.yml ---> 在单一的元节点上安装 pigsty
      |          然后将更多节点加入 pigsty 的管理下
      |
 nodes.yml ---> 为 pigsty 准备节点（节点设置、dcs、node_exporter、promtail）
      |          然后选择一个 playbook 在这些节点上部署数据库集群
      |
      ^--> pgsql.yml   在已准备好的节点上安装 postgres
      ^--> redis.yml   在已准备好的节点上安装 redis

infra-demo.yml = 
           infra.yml -l meta     +
           nodes.yml -l pg-test  +
           pgsql.yml -l pg-test +
           infra-loki.yml + infra-jupyter.yml + infra-pgweb.yml
```

- `nodes.yml`：用于设置和准备 pigsty 的节点，
- 在节点上设置 node、node_exporter、consul agent
- `node-remove.yml` 用于节点注销
- `pgsql.yml`：现在只在已准备好的节点上工作
- `pgsql-remove` 现在只负责 postgres 本身（dcs 和节点监控由 `node.yml` 负责）
- 添加一系列新选项以在 greenplum/matrixdb 中重用 `postgres` 角色
- `redis.yml`：现在在已准备好的节点上工作
- 而 `redis-remove.yml` 现在从节点上移除 redis。
- `pgsql-matrix.yml` 现在在已准备好的节点上安装 matrixdb（Greenplum 7）。

**软件升级**

- PostgreSQL 14.2
- PostGIS 3.2
- TimescaleDB 2.6
- Patroni 2.1.3 (Prometheus 指标 + 故障转移插槽)
- HAProxy 2.5.5 (修复统计错误，更多指标)
- PG 导出器 0.4.1 (超时参数等)
- Grafana 8.4.4
- Prometheus 2.33.4
- Greenplum 6.19.4 / MatrixDB 4.4.0
- Loki 现在作为 rpm 包提供，而不是 zip 存档。

**错误修复**

- 删除 patroni 的 consul 依赖，这使其更容易迁移到新的 consul 集群
- 修复 prometheus bin/new 脚本的默认数据目录路径：从 `/export/prometheus` 更改为 `/data/prometheus`
- 在 vip-manager systemd 服务中添加重新启动秒数
- 修复错别字和任务

**API 变更**

**新增变量**

- `node_cluster`：节点集群的身份变量
- `nodename_overwrite`：如果设置，则 nodename 将设置为节点的主机名
- `nodename_exchange`：交换 play 主机之间的节点主机名（在 `/etc/hosts` 中）
- `node_dns_hosts_extra`：可以通过单个实例/集群轻松覆盖的额外静态 dns 记录
- `patroni_enabled`：如果禁用，postgres & patroni 的引导过程不会在 `postgres` 角色期间执行
- `pgbouncer_enabled`：如果禁用，pgbouncer 在 `postgres` 角色期间不会启动
- `pg_exporter_params`：生成监控目标 url 时为 pg_exporter 提供的额外 url 参数。
- `pg_provision`：布尔值变量，表示是否执行 `postgres` 角色的资源配置部分（模板，数据库，用户）
- `no_cmdb`：用于 `infra.yml` 和 `infra-demo.yml` 播放书，不会在元节点上创建 cmdb。

```
MD5 (app.tgz) = f887313767982b31a2b094e5589a75ea
MD5 (matrix.tgz) = 3d063437c482d94bd7e35df1a08bbc84
MD5 (pigsty.tgz) = e143b88ebea1474f9ebaffddc6072c49
MD5 (pkg.tgz) = 73e8f5ce995b1f1760cb63c1904fb91b
```



----------------

## v1.3.1

**监控**

- PGSQL & PGCAT 仪表盘改进
- 优化 pgcat 实例 & pgcat 数据库的布局
- 在 pgsql 实例仪表盘中添加关键指标面板，与 pgsql 集群保持一致
- 在 pgcat 数据库中添加表/索引膨胀面板，移除 pgcat 膨胀仪表盘
- 在 pgcat 数据库仪表盘中添加索引信息
- 修复在 grafana 8.3 中的损坏面板
- 在 nginx 主页中添加 redis 索引

**部署**

- 新的 `infra-demo.yml` 剧本用于一次性引导
- 使用 `infra-jupyter.yml` 剧本部署可选的 jupyter lab 服务器
- 使用 `infra-pgweb.yml` 剧本部署可选的 pgweb 服务器
- 在 meta 节点上新的 `pg` 别名，可以从 admin 用户启动 postgres 集群（除了 postgres）
- 根据 `timescaledb-tune` 的建议调整所有 patroni 配置模板中的 `max_locks_per_transactions`
- 在配置模板中添加 `citus.node_conninfo: 'sslmode=prefer'` 以便在没有 SSL 的情况下使用 citus
- 在 pgdg14 包列表中添加所有扩展（除了 pgrouting）
- 将 node_exporter 升级到 v1.3.1
- 将 PostgREST v9.0.0 添加到包列表。从 postgres 模式生成 API。

**错误修复**

- Grafana 的安全漏洞（升级到 v8.3.1 [问题](https://grafana.com/blog/2021/12/07/grafana-8.3.1-8.2.7-8.1.8-and-8.0.7-released-with-high-severity-security-fix/))
- 修复 `pg_instance` & `pg_service` 在 `register` 角色中从剧本的中间开始时的问题
- 修复在没有 `pg_cluster` 变量存在的主机上 nginx 主页渲染问题
- 在升级到 grafana 8.3.1 时修复样式问题



----------------

## v1.3.0

- 【功能增强】Redis 部署（集群、哨兵、主从）
- 【功能增强】Redis 监控
  - Redis 总览仪表盘
  - Redis 集群仪表盘
  - Redis 实例仪表盘
-【功能增强】 监控：PGCAT 大修
  - 新仪表盘：PGCAT 实例
  - 新仪表盘：PGCAT 数据库仪表盘
  - 重做仪表盘：PGCAT 表格
- 【功能增强】 监控：PGSQL 增强
  - 新面板：PGSQL 集群，添加 10 个关键指标面板（默认切换）
  - 新面板：PGSQL 实例，添加 10 个关键指标面板（默认切换）
  - 简化 & 重新设计：PGSQL 服务
  - 在 PGCAT & PGSL 仪表盘之间添加交叉引用
-【功能增强】 监控部署
  - 现在 grafana 数据源在仅监控部署期间自动注册
-【功能增强】 软件升级
  - 将 PostgreSQL 13 添加到默认包列表
  - 默认升级到 PostgreSQL 14.1
  - 添加 greenplum rpm 和依赖项
  - 添加 redis rpm & 源代码包
  - 将 perf 添加为默认包



----------------

## v1.2.0

- 【功能增强】默认使用 PostgreSQL 14 版本
- 【功能增强】默认使用 TimescaleDB 2.5 扩展
  - 现在 timescaledb 和 postgis 默认在 cmdb 中启用
- 【功能增强】 新增仅监控模式：
  - 仅通过可连接的 URL，您可以使用 pigsty 监控现有的 pg 实例
  - pg_exporter 将在本地的 meta 节点上部署
  - 新仪表板 PGSQL Cluster Monly 用于远程集群
- 【功能增强】软件升级
  - grafana 升级到 8.2.2
  - pev2 升级到 v0.11.9
  - promscale 升级到 0.6.2
  - pgweb 升级到 0.11.9
  - 新增扩展：pglogical、pg_stat_monitor、orafce
-【功能增强】自动检测机器规格并使用适当的 `node_tune` 和 `pg_conf` 模板
-【功能增强】重做与膨胀相关的视图，现在公开更多信息
-【功能增强】删除 timescale 和 citus 的内部监控
-【功能增强】新剧本 `pgsql-audit.yml` 用于创建审计报告
-【BUG修复】现在 pgbouncer_exporter 资源所有者是 {{ pg_dbsu }} 而不是 postgres
-【BUG修复】 修复在执行 `REINDEX TABLE CONCURRENTLY` 时 pg_exporter 在 pg_table pg_index 上的重复指标
-【功能增强】现在所有配置模板都减少到两个：auto 和 demo。(已删除：`pub4, pg14, demo4, tiny, oltp`)
  - 如果 `vagrant` 是默认用户，则配置 `pigsty-demo`，否则使用 `pigsty-auto`。

**如何从 v1.1.1 升级**

在 1.2.0 中没有 API 变更。您仍然可以使用旧的 `pigsty.yml` 配置文件 (PG13)。
对于基础设施部分，重新执行 `repo` 将完成大部分工作。

至于数据库，您仍然可以使用现有的 PG13 实例。就地升级在涉及到像 PostGIS 和 Timescale 这样的扩展时非常棘手。我强烈推荐使用逻辑复制进行数据库迁移。
新的剧本 `pgsql-migration.yml` 将使这一过程变得容易得多。它将创建一系列的脚本，帮助您近乎零停机时间地迁移您的集群。



----------------

## v1.1.1

- 【功能增强】 用 `timescale` 版本替换 timescaledb 的 `apache` 版本
- 【功能增强】 升级 prometheus 到 2.30
- 【BUG修复】 现在 pg_exporter 配置目录的属主是 `{{ pg_dbsu }}`，而不再是 `prometheus`


**如何从v1.1.0升级？**

这个版本的主要变动是 TimescaleDB，使用 TimescaleDB License （TSL）的官方版本替代了 PGDG 仓库中的 Apache License v2 的版本。

```bash
stop/pause postgres instance with timescaledb
yum remove -y timescaledb_13

[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=0
gpgcheck=0
enabled=1

yum install timescaledb-2-postgresql13 
```



----------------

## v1.1.0

- 【增强功能】 增加 `pg_dummy_filesize` 以创建文件系统空间占位符
- 【增强功能】 主页大改版
- 【增强功能】 增加 Jupyter Lab 整合
- 【增强功能】 增加 pgweb 控制台整合
- 【增强功能】 增加 pgbadger 支持
- 【增强功能】 增加 pev2 支持，解释可视化工具
- 【增强功能】 增加 pglog 工具
- 【增强功能】 更新默认的 pkg.tgz 软件版本：
  - PostgreSQL 升级至 v13.4（支持官方的 pg14）
  - pgbouncer 升级至 v1.16（指标定义更新）
  - Grafana 升级至 v8.1.4
  - Prometheus 升级至 v2.2.29
  - node_exporter 升级至 v1.2.2
  - haproxy 升级至 v2.1.1
  - consul 升级至 v1.10.2
  - vip-manager 升级至 v1.0.1

**API 变更**

- `nginx_upstream` 现在持有不同的结构。（不兼容）
- 新的配置条目：`app_list`，渲染至主页的导航条目
- 新的配置条目：`docs_enabled`，在默认服务器上设置本地文档
- 新的配置条目：`pev2_enabled`，设置本地的 pev2 工具
- 新的配置条目：`pgbadger_enabled`，创建日志概要/报告目录
- 新的配置条目：`jupyter_enabled`，在元节点上启用 Jupyter Lab 服务器
- 新的配置条目：`jupyter_username`，指定运行 Jupyter Lab 的用户
- 新的配置条目：`jupyter_password`，指定 Jupyter Lab 的默认密码
- 新的配置条目：`pgweb_enabled`，在元节点上启用 pgweb 服务器
- 新的配置条目：`pgweb_username`，指定运行 pgweb 的用户
- 将内部标记 `repo_exist` 重命名为 `repo_exists`
- 现在 `repo_address` 的默认值为 `pigsty` 而非 `yum.pigsty`
- 现在 haproxy 的访问点为 `http://pigsty` 而非 `http://h.pigsty`


----------------

## v1.0.1

2021-09-14

- 文档更新
  - 现已支持中文文档
  - 现已支持机器翻译的英文文档
- 错误修复：`pgsql-remove` 不会移除主实例
- 错误修复：用 pg_cluster + pg_seq 替换 pg_instance
  - Start-At-Task 可能因为 pg_instance 未定义而失败
- 错误修复：从默认共享预加载库中移除 citus
  - citus 会强制 max_prepared_transaction 的值为非零
- 错误修复：在 `configure` 中进行 ssh sudo 检查：
  - 现在使用 `ssh -t sudo -n ls` 进行权限检查
- 笔误修复：`pg-backup` 脚本的笔误
- 警报调整：移除 NTP 合理性检查警报（与 ClockSkew 重复）
- 导出器调整：移除 collector.systemd 以减少开销



----------------

## v1.0.0

v1 正式发布，监控系统全面改进

**亮点**

- 监控系统全面改进
  - 在 Grafana 8.0 上新增仪表盘
  - 新的度量定义，增加 PG14 支持
  - 简化的标签系统：静态标签集：(job, cls, ins)
  - 新的警报规则与衍生度量
  - 同时监控多个数据库
  - 实时日志搜索 & csvlog 分析
  - 链接丰富的仪表盘，点击图形元素进行深入|汇总
- 架构变更
  - 将 citus 和 timescaledb 加入默认安装部分
  - 增加对 PostgreSQL 14beta2 的支持
  - 简化 haproxy 管理页面索引
  - 通过添加新的角色 `register` 来解耦基础设施和 pgsql
  - 添加新角色 `loki` 和 `promtail` 用于日志记录
  - 为管理员节点上的管理员用户添加新角色 `environ` 以设置环境
  - 默认使用 `static` 服务发现用于 prometheus（而不是 `consul`）
  - 添加新角色 `remove` 以优雅地移除集群和实例
  - 升级 prometheus 和 grafana 的配置逻辑
  - 升级到 vip-manager 1.0，node_exporter 1.2，pg_exporter 0.4，grafana 8.0
  - 现在，每个实例上的每个数据库都可以自动注册为 grafana 数据源
  - 将 consul 注册任务移到 `register` 角色，更改 consul 服务标签
  - 添加 cmdb.sql 作为 pg-meta 基线定义（CMDB & PGLOG）
- 应用框架
  - 可扩展框架用于新功能
  - 核心应用：PostgreSQL 监控系统：`pgsql`
  - 核心应用：PostgreSQL 目录浏览器：`pgcat`
  - 核心应用：PostgreSQL Csvlog 分析器：`pglog`
  - 添加示例应用 `covid` 用于可视化 covid-19 数据
  - 添加示例应用 `isd` 用于可视化 isd 数据
- 其他
  - 添加 jupyterlab，为数据科学提供完整的 python 环境
  - 添加 `vonng-echarts-panel` 以恢复对 Echarts 的支持
  - 添加 wrap 脚本 `createpg`，`createdb`，`createuser`
  - 添加 cmdb 动态库存脚本：`load_conf.py`，`inventory_cmdb`，`inventory_conf`
  - 移除过时的剧本：`pgsql-monitor`，`pgsql-service`，`node-remove` 等....

**API 变更**

- 新变量: `node_meta_pip_install`
- 新变量: `grafana_admin_username`
- 新变量: `grafana_database`
- 新变量: `grafana_pgurl`
- 新变量: `pg_shared_libraries`
- 新变量: `pg_exporter_auto_discovery`
- 新变量: `pg_exporter_exclude_database`
- 新变量: `pg_exporter_include_database`
- 变量重命名: `grafana_url` 为 [`grafana_endpoint`](https://doc.pigsty.cc/#/zh-cn/v-meta?id=grafana_endpoint)

**Bug 修复**

- 修复默认时区 Asia/Shanghai (CST) 问题
- 修复 pgbouncer & patroni 的 nofile 限制
- 当执行标签 `pgbouncer` 时，pgbouncer 的用户列表和数据库列表将会被生成



----------------

## v0.9.0

v0.9极大简化了安装流程，进行了大量日志相关改进，开发了命令行工具（Beta），并修复了一系列问题。

<details><br>

**新功能**

* 一键安装模式：

  ```bash
  /bin/bash -c "$(curl -fsSL https://pigsty.cc/install)"
  ```

* 开发命令行工具 `pigsty-cli`封装常用Ansible命令，目前pigsty-cli处于Beta状态
* 使用Loki与Promtail收集日志：
  * 默认收集Postgres，Pgbouncer，Patroni日志
  * 新增部署脚本`infra-loki.yml` 与 `pgsql-promtail.yml`
  * 定义基于日志的监控指标
  * 使用Grafana制作日志相关可视化面板。
* 监控组件可以使用二进制安装，使用`files/get_bin.sh`下载监控二进制组件。
* 飞升模式：
  当集群元节点初始化完成后，可以使用`bin/upgrade`升级为动态Inventory
  使用pg-meta上的数据库代替YAML配置文件。


**问题修复**

* 集中修复日志相关问题：
  * 修复了HAProxy健康检查造成PG日志中大量 `connection reset by peer`的问题。
  * 修复了HAProxy健康检查造成Patroni日志中大量出现`Connect Reset` Exception的问题
  * 修复了Patroni日志时间戳格式，去除毫秒时间戳，附加完整时区信息。
  * 为`dbuser_monitor`配置1秒的`log_min_duration_statement`，避免监控查询出现在日志中。
* 重构Grafana角色
  * 在保持API不变的前提下重构Grafana角色。
  * 使用CDN下载预打包的Grafana插件，加速插件下载
* 其他问题修复
  * 修复了`pgbouncer-create-user` 未能正确处理 md5 密码的问题。
  * 完善了数据库与用户创建SQL模版中参数空置检查。
  * 修复了 NODE DNS配置时如果手工中断执行，DNS配置可能出错的问题。
  * 重构了Makefile快捷方式 Makefile 中的错别字

**参数变更**

* `node_disable_swap` 默认为 False，默认不会关闭SWAP。
* `node_sysctl_params` 不再有默认修改的系统参数。
*  `grafana_plugin` 的默认值`install` 现在意味着当插件缓存不存在时，从CDN下载。
* `repo_url_packages` 现在从 Pigsty CDN 下载额外的RPM包，解决墙内无法访问的问题。
* `proxy_env.no_proxy`现在将Pigsty CDN加入到NOPROXY列表中。
* `grafana_customize` 现在默认为`false`，启用意味着安装Pigsty Pro版UI（默认不开源所以不要启用）
* `node_admin_pk_current`，新增选项，启用后会将当前用户的`~/.ssh/id_rsa.pub`添加至管理员的Key中
* `loki_clean`：新增选项，安装Loki时是否清除现有数据
* `loki_data_dir`：新增选项，指明安装Loki时的数据目录
* `promtail_enabled` 是否启用Promtail日志收集服务？
* `promtail_clean` 是否在安装promtail时移除已有状态信息？
* `promtail_port` promtail使用的默认端口，默认为9080
* `promtail_status_file` 保存Promtail状态信息的文件位置
* `promtail_send_url` 用于接收日志的loki服务endpoint

</details>






----------------

## v0.8.0

v0.8 针对 **服务（Service）** 接入部分进行了彻底的重做。现在除了默认的`primary`, `replica`服务外，用户可以自行定义新的服务。服务的接口可以支持多种不同的实现，例如L4 DPKG VIP可作为Haproxy的替代品与Pigsty集成。同时，针对用户反馈的一些问题进行了集中处理与改进。

<details><br>

**改动内容**

v0.8是供给方案定稿版本，此后供给系统的API将保持稳定。

**API变更**

原有`vip`与`haproxy`角色的所有配置项，现在迁移至`service`角色中。

```yaml
#------------------------------------------------------------------------------
# SERVICE PROVISION
#------------------------------------------------------------------------------
pg_weight: 100              # default load balance weight (instance level)

# - service - #
pg_services:                                  # how to expose postgres service in cluster?
  # primary service will route {ip|name}:5433 to primary pgbouncer (5433->6432 rw)
  - name: primary           # service name {{ pg_cluster }}_primary
    src_ip: "*"
    src_port: 5433
    dst_port: pgbouncer     # 5433 route to pgbouncer
    check_url: /primary     # primary health check, success when instance is primary
    selector: "[]"          # select all instance as primary service candidate

  # replica service will route {ip|name}:5434 to replica pgbouncer (5434->6432 ro)
  - name: replica           # service name {{ pg_cluster }}_replica
    src_ip: "*"
    src_port: 5434
    dst_port: pgbouncer
    check_url: /read-only   # read-only health check. (including primary)
    selector: "[]"          # select all instance as replica service candidate
    selector_backup: "[? pg_role == `primary`]"   # primary are used as backup server in replica service

  # default service will route {ip|name}:5436 to primary postgres (5436->5432 primary)
  - name: default           # service's actual name is {{ pg_cluster }}-{{ service.name }}
    src_ip: "*"             # service bind ip address, * for all, vip for cluster virtual ip address
    src_port: 5436          # bind port, mandatory
    dst_port: postgres      # target port: postgres|pgbouncer|port_number , pgbouncer(6432) by default
    check_method: http      # health check method: only http is available for now
    check_port: patroni     # health check port:  patroni|pg_exporter|port_number , patroni by default
    check_url: /primary     # health check url path, / as default
    check_code: 200         # health check http code, 200 as default
    selector: "[]"          # instance selector
    haproxy:                # haproxy specific fields
      maxconn: 3000         # default front-end connection
      balance: roundrobin   # load balance algorithm (roundrobin by default)
      default_server_options: 'inter 3s fastinter 1s downinter 5s rise 3 fall 3 on-marked-down shutdown-sessions slowstart 30s maxconn 3000 maxqueue 128 weight 100'

  # offline service will route {ip|name}:5438 to offline postgres (5438->5432 offline)
  - name: offline           # service name {{ pg_cluster }}_replica
    src_ip: "*"
    src_port: 5438
    dst_port: postgres
    check_url: /replica     # offline MUST be a replica
    selector: "[? pg_role == `offline` || pg_offline_query ]"         # instances with pg_role == 'offline' or instance marked with 'pg_offline_query == true'
    selector_backup: "[? pg_role == `replica` && !pg_offline_query]"  # replica are used as backup server in offline service

pg_services_extra: []        # extra services to be added

# - haproxy - #
haproxy_enabled: true                         # enable haproxy among every cluster members
haproxy_reload: true                          # reload haproxy after config
haproxy_policy: roundrobin                    # roundrobin, leastconn
haproxy_admin_auth_enabled: false             # enable authentication for haproxy admin?
haproxy_admin_username: admin                 # default haproxy admin username
haproxy_admin_password: admin                 # default haproxy admin password
haproxy_exporter_port: 9101                   # default admin/exporter port
haproxy_client_timeout: 3h                    # client side connection timeout
haproxy_server_timeout: 3h                    # server side connection timeout

# - vip - #
vip_mode: none                                # none | l2 | l4
vip_reload: true                              # whether reload service after config
# vip_address: 127.0.0.1                      # virtual ip address ip (l2 or l4)
# vip_cidrmask: 24                            # virtual ip address cidr mask (l2 only)
# vip_interface: eth0                         # virtual ip network interface (l2 only)
```

**新增选项**

```yml
# - localization - #
pg_encoding: UTF8                             # default to UTF8
pg_locale: C                                  # default to C
pg_lc_collate: C                              # default to C
pg_lc_ctype: en_US.UTF8                       # default to en_US.UTF8

pg_reload: true                               # reload postgres after hba changes
vip_mode: none                                # none | l2 | l4
vip_reload: true                              # whether reload service after config
```

**移除选项**

```bash
haproxy_check_port                            # Haproxy相关参数已经被Service定义覆盖
haproxy_primary_port
haproxy_replica_port
haproxy_backend_port
haproxy_weight
haproxy_weight_fallback
vip_enabled                                   # vip_enabled参数被vip_mode覆盖
```

**服务管理**

`pg_services` 与 `pg_services_extra` 定义了集群中的**服务**，每一个服务的定义结构如下例所示：

一个服务必须指定以下内容：

* **名称**：服务的完整名称以数据库集群名为前缀，以`service.name`为后缀，通过`-`连接。例如在`pg-test`集群中`name=primary`的服务，其完整服务名称为`pg-test-primary`。

* **端口**：在Pigsty中，服务默认采用NodePort的形式对外暴露，因此暴露端口为必选项。但如果使用外部负载均衡服务接入方案，您也可以通过其他的方式区分服务。

* **选择器**：选择器指定了服务的成员，采用JMESPath的形式，从所有集群实例成员中筛选变量。默认的`[]`选择器会选取所有的集群成员。

  此外`selector_backup`会选择或标记用于backup的实例列表（当集群中所有其他成员失效时方才接管服务）

```yaml
  # default service will route {ip|name}:5436 to primary postgres (5436->5432 primary)
  - name: default           # service's actual name is {{ pg_cluster }}-{{ service.name }}
    src_ip: "*"             # service bind ip address, * for all, vip for cluster virtual ip address
    src_port: 5436          # bind port, mandatory
    dst_port: postgres      # target port: postgres|pgbouncer|port_number , pgbouncer(6432) by default
    check_method: http      # health check method: only http is available for now
    check_port: patroni     # health check port:  patroni|pg_exporter|port_number , patroni by default
    check_url: /primary     # health check url path, / as default
    check_code: 200         # health check http code, 200 as default
    selector: "[]"          # instance selector
    haproxy:                # haproxy specific fields
      maxconn: 3000         # default front-end connection
      balance: roundrobin   # load balance algorithm (roundrobin by default)
      default_server_options: 'inter 3s fastinter 1s downinter 5s rise 3 fall 3 on-marked-down shutdown-sessions slowstart 30s maxconn 3000 maxqueue 128 weight 100'
```

**数据库管理**

数据库现在可以对locale的细分选项：`lc_ctype`与`lc_collate`分别进行指定。支持这一功能的主要原因是PG的扩展插件`pg_trgm`需要在`lc_ctype!=C`的环境中才能正常支持中文。

**旧接口定义**

```yaml
pg_databases:
  - name: meta                      # name is the only required field for a database
    owner: postgres                 # optional, database owner
    template: template1             # optional, template1 by default
    encoding: UTF8                  # optional, UTF8 by default
    locale: C                       # optional, C by default
    allowconn: true                 # optional, true by default, false disable connect at all
    revokeconn: false               # optional, false by default, true revoke connect from public # (only default user and owner have connect privilege on database)
    tablespace: pg_default          # optional, 'pg_default' is the default tablespace
    connlimit: -1                   # optional, connection limit, -1 or none disable limit (default)
    extensions:                     # optional, extension name and where to create
      - {name: postgis, schema: public}
    parameters:                     # optional, extra parameters with ALTER DATABASE
      enable_partitionwise_join: true
    pgbouncer: true                 # optional, add this database to pgbouncer list? true by default
    comment: pigsty meta database   # optional, comment string for database
```

**新的接口定义**

```yaml
pg_databases:
  - name: meta                      # name is the only required field for a database
    # owner: postgres                 # optional, database owner
    # template: template1             # optional, template1 by default
    # encoding: UTF8                # optional, UTF8 by default , must same as template database, leave blank to set to db default
    # locale: C                     # optional, C by default , must same as template database, leave blank to set to db default
    # lc_collate: C                 # optional, C by default , must same as template database, leave blank to set to db default
    # lc_ctype: C                   # optional, C by default , must same as template database, leave blank to set to db default
    allowconn: true                 # optional, true by default, false disable connect at all
    revokeconn: false               # optional, false by default, true revoke connect from public # (only default user and owner have connect privilege on database)
    # tablespace: pg_default          # optional, 'pg_default' is the default tablespace
    connlimit: -1                   # optional, connection limit, -1 or none disable limit (default)
    extensions:                     # optional, extension name and where to create
      - {name: postgis, schema: public}
    parameters:                     # optional, extra parameters with ALTER DATABASE
      enable_partitionwise_join: true
    pgbouncer: true                 # optional, add this database to pgbouncer list? true by default
    comment: pigsty meta database   # optional, comment string for database
```

</details>





----------------

## v0.7.0

v0.7 针对**接入已有数据库实例**进行了改进，现在用户可以采用 **仅监控部署（Monly Deployment）** 模式使用Pigsty。同时新增了专用于管理数据库与用户、以及单独部署监控的剧本，并对数据库与用户的定义进行改进。

<details><br>

**Features**

* [Monitor Only Deployment Support #25](https://github.com/Vonng/pigsty/issues/25)
* [Split monolith static monitor target file into per-cluster conf #36](https://github.com/Vonng/pigsty/issues/36)
* [Add create user playbook #29](https://github.com/Vonng/pigsty/issues/29)
* [Add create database playbook #28](https://github.com/Vonng/pigsty/issues/28)
* [Database provisioning interface enhancement #33](https://github.com/Vonng/pigsty/issues/33)
* [User provisioning interface enhancement #34](https://github.com/Vonng/pigsty/issues/34)

**Bug Fix**

* [Create extension with schema typo #32](https://github.com/Vonng/pigsty/issues/32)
* [pgbouncer reload with systemctl not work #35](https://github.com/Vonng/pigsty/issues/35)

**API变更**

**新增选项**

```yml
prometheus_sd_target: batch                   # batch|single    监控目标定义文件采用单体还是每个实例一个
exporter_install: none                        # none|yum|binary 监控Exporter的安装模式
exporter_repo_url: ''                         # 如果设置，这里的REPO连接会加入目标的Yum源中
node_exporter_options: '--no-collector.softnet --collector.systemd --collector.ntp --collector.tcpstat --collector.processes'                          # Node Exporter默认的命令行选项
pg_exporter_url: ''                           # 可选，PG Exporter监控对象的URL
pgbouncer_exporter_url: ''                    # 可选，PGBOUNCER EXPORTER监控对象的URL
```

**移除选项**

```yml
exporter_binary_install: false                 # 功能被 exporter_install 覆盖
```

**定义结构变更**

```yaml
pg_default_roles                               # 变化细节参考 用户管理。
pg_users                                       # 变化细节参考 用户管理。
pg_databases                                   # 变化细节参考 数据库管理。
```

**重命名选项**

```yml
pg_default_privilegs -> pg_default_privileges # 很明显这是一个错别字
```

**仅监控模式**

有时用户不希望使用Pigsty供给方案，只希望使用Pigsty监控系统管理现有PostgreSQL实例。

Pigsty提供了仅监控部署（monly, monitor-only模式，剥离供给方案部分，可用于监控现有PostgreSQL集群。

仅监控模式的部署流程与标准模式大体上保持一致，但省略了很多步骤

- 在**元节点**上完成基础设施初始化的部分与标准流程保持一致，仍然通过`./infra.yml`完成。
- 不需要在**数据库节点**上完成 **基础设施初始化**。
- 不需要在**数据库节点**上执行数据库初始化的绝大多数任务，而是通过专用的`./pgsql-monitor.yml` 完成仅监控系统部署。
- 实际使用的配置项大大减少，只保留基础设施相关变量，与 监控系统相关的少量变量。


**数据库管理**

[Database provisioning interface enhancement #33](https://github.com/Vonng/pigsty/issues/33)

**旧接口定义**

```yaml
pg_databases:                       # create a business database 'meta'
  - name: meta
    schemas: [meta]                 # create extra schema named 'meta'
    extensions: [{name: postgis}]   # create extra extension postgis
    parameters:                     # overwrite database meta's default search_path
      search_path: public, monitor
```

**新的接口定义**

```yaml
pg_databases:
  - name: meta                      # name is the only required field for a database
    owner: postgres                 # optional, database owner
    template: template1             # optional, template1 by default
    encoding: UTF8                  # optional, UTF8 by default
    locale: C                       # optional, C by default
    allowconn: true                 # optional, true by default, false disable connect at all
    revokeconn: false               # optional, false by default, true revoke connect from public # (only default user and owner have connect privilege on database)
    tablespace: pg_default          # optional, 'pg_default' is the default tablespace
    connlimit: -1                   # optional, connection limit, -1 or none disable limit (default)
    extensions:                     # optional, extension name and where to create
      - {name: postgis, schema: public}
    parameters:                     # optional, extra parameters with ALTER DATABASE
      enable_partitionwise_join: true
    pgbouncer: true                 # optional, add this database to pgbouncer list? true by default
    comment: pigsty meta database   # optional, comment string for database
```

**接口变更**

* Add new options: `template` , `encoding`, `locale`, `allowconn`, `tablespace`, `connlimit`
* Add new option `revokeconn`, which revoke connect privileges from public for this database
* Add `comment` field for database

**数据库变更**

在运行中集群中创建新数据库可以使用`pgsql-createdb.yml`剧本，在配置中定义完新数据库后，执行以下剧本。

```bash
./pgsql-createdb.yml -e pg_database=<your_new_database_name>
```

通过`-e pg_datbase=`告知需要创建的数据库名称，则该数据库即会被创建（或修改）。具体执行的命令参见集群主库`/pg/tmp/pg-db-{{ database.name}}.sql`文件。

**用户管理**

[User provisioning interface enhancement #34](https://github.com/Vonng/pigsty/issues/34)

**旧接口定义**

```yaml
pg_users:
  - username: test                  # example production user have read-write access
    password: test                  # example user's password
    options: LOGIN                  # extra options
    groups: [ dbrole_readwrite ]    # dborole_admin|dbrole_readwrite|dbrole_readonly
    comment: default test user for production usage
    pgbouncer: true                 # add to pgbouncer
```

**新接口定义**

```yaml
pg_users:
  # complete example of user/role definition for production user
  - name: dbuser_meta               # example production user have read-write access
    password: DBUser.Meta           # example user's password, can be encrypted
    login: true                     # can login, true by default (should be false for role)
    superuser: false                # is superuser? false by default
    createdb: false                 # can create database? false by default
    createrole: false               # can create role? false by default
    inherit: true                   # can this role use inherited privileges?
    replication: false              # can this role do replication? false by default
    bypassrls: false                # can this role bypass row level security? false by default
    connlimit: -1                   # connection limit, -1 disable limit
    expire_at: '2030-12-31'         # 'timestamp' when this role is expired
    expire_in: 365                  # now + n days when this role is expired (OVERWRITE expire_at)
    roles: [dbrole_readwrite]       # dborole_admin|dbrole_readwrite|dbrole_readonly
    pgbouncer: true                 # add this user to pgbouncer? false by default (true for production user)
    parameters:                     # user's default search path
      search_path: public
    comment: test user
```

**接口变更**

* `username` field rename to `name`
* `groups` field rename to `roles`
* `options` now split into separated configration entries:
  `login`, `superuser`, `createdb`, `createrole`, `inherit`, `replication`,`bypassrls`,`connlimit`
* `expire_at` and `expire_in` options
* `pgbouncer` option for user is now `false` by default

**用户管理**

在运行中集群中创建新数据库可以使用`pgsql-createuser.yml`剧本，在配置中定义完新数据库后，执行以下剧本。

```bash
./pgsql-createuser.yml -e pg_user=<your_new_user_name>
```

通过`-e pg_user=`告知需要创建的数据库名称，则该数据库即会被创建（或修改）。具体执行的命令参见集群主库`/pg/tmp/pg-user-{{ user.name}}.sql`文件。

</details>





----------------

## v0.6.0

v0.6 对数据库供给方案进行了修改与调整，根据用户的反馈添加了一系列实用功能与修正。针对监控系统的移植性进行优化，便于与其他外部数据库供给方案对接。

<details><br>

**BUG修复**

* 修复了新版本Patroni重启后会重置PG HBA的问题
* 修复了PG Overview Dashboard标题中的别字
* 修复了沙箱集群`pg-test`的默认主库，原来为`pg-test-2`，应当为`pg-test-1`
* 修复了过时代码注释

**功能改进**

* 改造Prometheus与监控供给方式
  * 允许在无基础设施的情况下对已有PG集群进行监控部署，便于监控系统与其他供给方案集成。[#11](https://github.com/Vonng/pigsty/issues/11)
  * 基于Inventory渲染所有监控对象的静态列表，用于静态服务发现。[#11](https://github.com/Vonng/pigsty/issues/11)
  * Prometheus添加了静态对象模式，用于替代动态服务发现，集中进行身份管理[#11](https://github.com/Vonng/pigsty/issues/11)
  * 监控Exporter现在添加了`service_registry`选项，Consul服务注册变为可选项 [#13](https://github.com/Vonng/pigsty/issues/13)
  * Exporter现在可以通过拷贝二进制的方式直接安装：`exporter_binary_install`，[#14](https://github.com/Vonng/pigsty/issues)
  * Exporter现在具有`xxx_enabled`选项，控制是否启用该组件。
* Haproxy供给重构与改进  [#8](https://github.com/Vonng/pigsty/issues/8)
  * 新增了全局HAProxy管理界面导航，默认域名`h.pigsty`
  * 允许将主库加入只读服务集中，当集群中所有从库宕机时自动承接读流量。 [#8](https://github.com/Vonng/pigsty/issues/8)
  * 允许位Haproxy实例管理界面启用认证 `haproxy_admin_auth_enabled`
  * 允许通过配置项调整每个服务对应后端的流量权重. [#10](https://github.com/Vonng/pigsty/issues/10)
* 访问控制模型改进。[#7](https://github.com/Vonng/pigsty/issues/7)
  * 添加了默认角色`dbrole_offline`，用于慢查询，ETL，交互式查询场景。
  * 修改默认HBA规则，允许`dbrole_offline`分组的用户访问`pg_role == 'offline'`及`pg_offline_query == true`的实例。
* 软件更新 Release v0.6
  * PostgreSQL 13.2
  * Prometheus 2.25
  * PG Exporter 0.3.2
  * Node Exporter 1.1
  * Consul 1.9.3
  * 更新默认PG源：PostgreSQL现在默认使用浙江大学的镜像，加速下载安装

**接口变更**

**新增选项**

```yaml
service_registry: consul                      # 服务注册机制：none | consul | etcd | both
prometheus_options: '--storage.tsdb.retention=30d'  # prometheus命令行选项
prometheus_sd_method: consul                  # Prometheus使用的服务发现机制：static|consul
prometheus_sd_interval: 2s                    # Prometheus服务发现刷新间隔
pg_offline_query: false                       # 设置后将允许dbrole_offline角色连接与查询该实例
node_exporter_enabled: true                   # 设置后将安装配置Node Exporter
pg_exporter_enabled: true                     # 设置后将安装配置PG Exporter
pgbouncer_exporter_enabled: true              # 设置后将安装配置Pgbouncer Exporter
dcs_disable_purge: false                      # 双保险，强制 dcs_exists_action = abort 避免误删除DCS实例
pg_disable_purge: false                       # 双保险，强制 pg_exists_action = abort 避免误删除数据库实例
haproxy_weight: 100                           # 配置实例的相对负载均衡权重
haproxy_weight_fallback: 1                    # 配置集群主库在只读服务中的相对权重
```

**移除选项**

```yaml
prometheus_metrics_path                       # 与 exporter_metrics_path 重复
prometheus_retention                          # 功能被 prometheus_options 覆盖
```

</details>




----------------

## v0.5.0

Pigsty 现在有了官方网站啦：[pigsty.cc](https://pigsty.cc/) 🎉 !


<details><br>

**亮点特性**

* Pigsty官方[文档站](http://pigsty.cc/)正式上线！
* 添加了数据库模板的定制支持，用户可以通过配置文件定制所需的数据库内部对象。
* 对默认[访问控制](PGSQL-ACL)模型进行了改进
* 重构了HBA管理的逻辑，现在将由Pigsty替代Patroni直接负责生成HBA
* 将Grafana监控系统的供给方案从sqlite改为JSON文件静态Provision
* 将`pg-cluster-replication`面板加入Pigsty开源免费套餐。
* 最新的经过测试的离线安装包：[pkg.tgz](https://github.com/Vonng/pigsty/releases/download/v0.5.0/pkg.tgz) (v0.5)

**定制数据库**


您是否烦恼过单实例多租户的问题？比如总有研发拿着PostgreSQL当MySQL使，明明是一个Schema就能解决的问题，非要创建一个新的数据库出来，在一个实例中创建出几十个不同的DB。
不要忧伤，不要心急。Pigsty已经提供数据库内部对象的Provision方案，您可以轻松地在配置文件中指定所需的数据库内对象，包括：

* 角色
  * 用户/角色名
  * 密码
  * 用户属性
  * 用户备注
  * 用户所属的权限组
* 数据库
  * 属主
  * 额外的模式
  * 额外的扩展插件
  * 数据库级的自定义配置参数
* 数据库
  * 属主
  * 额外的模式
  * 额外的扩展插件
  * 数据库级的自定义配置参数
* 默认权限
  * 默认情况下这里配置的权限会应用至所有由 超级用户 和 管理员用户创建的对象上。
* 默认扩展
  * 所有新创建的业务数据库都会安装有这些默认扩展
* 默认模式
  * 所有新创建的业务数据库都会创建有这些默认的模式

配置样例

```yaml
# 通常是每个DB集群配置的变量
pg_users:
  - username: test
    password: test
    comment: default test user
    groups: [ dbrole_readwrite ]    # dborole_admin|dbrole_readwrite|dbrole_readonly
pg_databases:                       # create a business database 'test'
  - name: test
    extensions: [{name: postgis}]   # create extra extension postgis
    parameters:                     # overwrite database meta's default search_path
      search_path: public,monitor

# 通常是整个环境统一配置的全局变量
# - system roles - #
pg_replication_username: replicator           # system replication user
pg_replication_password: DBUser.Replicator    # system replication password
pg_monitor_username: dbuser_monitor           # system monitor user
pg_monitor_password: DBUser.Monitor           # system monitor password
pg_admin_username: dbuser_admin               # system admin user
pg_admin_password: DBUser.Admin               # system admin password

# - default roles - #
pg_default_roles:
  - username: dbrole_readonly                 # sample user:
    options: NOLOGIN                          # role can not login
    comment: role for readonly access         # comment string

  - username: dbrole_readwrite                # sample user: one object for each user
    options: NOLOGIN
    comment: role for read-write access
    groups: [ dbrole_readonly ]               # read-write includes read-only access

  - username: dbrole_admin                    # sample user: one object for each user
    options: NOLOGIN BYPASSRLS                # admin can bypass row level security
    comment: role for object creation
    groups: [dbrole_readwrite,pg_monitor,pg_signal_backend]

  # NOTE: replicator, monitor, admin password are overwritten by separated config entry
  - username: postgres                        # reset dbsu password to NULL (if dbsu is not postgres)
    options: SUPERUSER LOGIN
    comment: system superuser

  - username: replicator
    options: REPLICATION LOGIN
    groups: [pg_monitor, dbrole_readonly]
    comment: system replicator

  - username: dbuser_monitor
    options: LOGIN CONNECTION LIMIT 10
    comment: system monitor user
    groups: [pg_monitor, dbrole_readonly]

  - username: dbuser_admin
    options: LOGIN BYPASSRLS
    comment: system admin user
    groups: [dbrole_admin]

  - username: dbuser_stats
    password: DBUser.Stats
    options: LOGIN
    comment: business read-only user for statistics
    groups: [dbrole_readonly]


# object created by dbsu and admin will have their privileges properly set
pg_default_privilegs:
  - GRANT USAGE                         ON SCHEMAS   TO dbrole_readonly
  - GRANT SELECT                        ON TABLES    TO dbrole_readonly
  - GRANT SELECT                        ON SEQUENCES TO dbrole_readonly
  - GRANT EXECUTE                       ON FUNCTIONS TO dbrole_readonly
  - GRANT INSERT, UPDATE, DELETE        ON TABLES    TO dbrole_readwrite
  - GRANT USAGE,  UPDATE                ON SEQUENCES TO dbrole_readwrite
  - GRANT TRUNCATE, REFERENCES, TRIGGER ON TABLES    TO dbrole_admin
  - GRANT CREATE                        ON SCHEMAS   TO dbrole_admin
  - GRANT USAGE                         ON TYPES     TO dbrole_admin

# schemas
pg_default_schemas: [monitor]

# extension
pg_default_extensions:
  - { name: 'pg_stat_statements',  schema: 'monitor' }
  - { name: 'pgstattuple',         schema: 'monitor' }
  - { name: 'pg_qualstats',        schema: 'monitor' }
  - { name: 'pg_buffercache',      schema: 'monitor' }
  - { name: 'pageinspect',         schema: 'monitor' }
  - { name: 'pg_prewarm',          schema: 'monitor' }
  - { name: 'pg_visibility',       schema: 'monitor' }
  - { name: 'pg_freespacemap',     schema: 'monitor' }
  - { name: 'pg_repack',           schema: 'monitor' }
  - name: postgres_fdw
  - name: file_fdw
  - name: btree_gist
  - name: btree_gin
  - name: pg_trgm
  - name: intagg
  - name: intarray

# postgres host-based authentication rules
pg_hba_rules:
  - title: allow meta node password access
    role: common
    rules:
      - host    all     all                         10.10.10.10/32      md5

  - title: allow intranet admin password access
    role: common
    rules:
      - host    all     +dbrole_admin               10.0.0.0/8          md5
      - host    all     +dbrole_admin               172.16.0.0/12       md5
      - host    all     +dbrole_admin               192.168.0.0/16      md5

  - title: allow intranet password access
    role: common
    rules:
      - host    all             all                 10.0.0.0/8          md5
      - host    all             all                 172.16.0.0/12       md5
      - host    all             all                 192.168.0.0/16      md5

  - title: allow local read-write access (local production user via pgbouncer)
    role: common
    rules:
      - local   all     +dbrole_readwrite                               md5
      - host    all     +dbrole_readwrite           127.0.0.1/32        md5

  - title: allow read-only user (stats, personal) password directly access
    role: replica
    rules:
      - local   all     +dbrole_readonly                               md5
      - host    all     +dbrole_readonly           127.0.0.1/32        md5
pg_hba_rules_extra: []

# pgbouncer host-based authentication rules
pgbouncer_hba_rules:
  - title: local password access
    role: common
    rules:
      - local  all          all                                     md5
      - host   all          all                     127.0.0.1/32    md5

  - title: intranet password access
    role: common
    rules:
      - host   all          all                     10.0.0.0/8      md5
      - host   all          all                     172.16.0.0/12   md5
      - host   all          all                     192.168.0.0/16  md5
pgbouncer_hba_rules_extra: []
```

**数据库模板**

* [pg-init-template.sql](https://github.com/Vonng/pigsty/blob/master/roles/postgres/templates/pg-init-template.sql) 用于初始化`template1`数据的脚本模板
* [pg-init-business.sql](https://github.com/Vonng/pigsty/blob/master/roles/postgres/templates/pg-init-business.sql) 用于初始化其他业务数据库的脚本模板


**权限模型**

v0.5 改善了默认的权限模型，主要是针对单实例多租户的场景进行优化，并收紧权限控制。

* 撤回了普通业务用户对非所属数据库的默认`CONNECT`权限
* 撤回了非管理员用户对所属数据库的默认`CREATE`权限
* 撤回了所有用户在`public`模式下的默认创建权限。


**供给方式**

原先Pigsty采用直接拷贝Grafana自带的grafana.db的方式完成监控系统的初始化。
这种方式虽然简单粗暴管用，但不适合进行精细化的版本控制管理。在v0.5中，Pigsty采用了Grafana API完成了监控系统面板供给的工作。
您所需的就是在`grafana_url`中填入带有用户名密码的Grafana URL。
因此，监控系统可以背方便地添加至已有的Grafana中。

</details>



----------------

## v0.4.0

第二个公开测试版v0.4现已正式发行！

<details><br>

**监控系统**

Pigsty v0.4对监控系统进行了整体升级改造，精心挑选了10个面板作为标准的Pigsty开源内容。同时，针对Grafana 7.3的不兼容升级进行了大量适配改造工作。使用升级的`pg_exporter v0.3.1`作为默认指标导出器，调整了监控报警规则的监控面板连接。


**Pigsty开源版**

Pigsty开源版选定了以下10个Dashboard作为开源内容。其他Dashboard作为可选的商业支持内容提供。

* PG Overview
* PG Cluster
* PG Service
* PG Instance
* PG Database
* PG Query
* PG Table
* PG Table Catalog
* PG Table Detail
* Node

尽管进行了少量阉割，这10个监控面板所涵盖的内容仍然可以吊打所有同类软件。

**软件升级**

Pigsty v0.4进行了大量软件适配工作，包括：

* Upgrade to PostgreSQL 13.1, Patroni 2.0.1-4, add citus to repo.
* Upgrade to [`pg_exporter 0.3.1`](https://github.com/Vonng/pg_exporter/releases/tag/v0.3.1)
* Upgrade to Grafana 7.3, Ton's of compatibility work
* Upgrade to prometheus 2.23, with new UI as default
* Upgrade to consul 1.9

**其他改进**

* Update prometheus alert rules
* Fix alertmanager info links
* Fix bugs and typos.
* add a simple backup script

**离线安装包**

* v0.4的离线安装包（CentOS 7.8）已经可以从Github下载：[pkg.tgz](https://github.com/Vonng/pigsty/releases/download/v0.4.0/pkg.tgz)

</details>



----------------

## v0.3.0

首个Pigsty公开测试版本现在已经释出！

<details><br>

**监控系统**

Pigsty v0.3 包含以下8个监控面板作为开源内容：
* PG Overview
* PG Cluster
* PG Service
* PG Instance
* PG Database
* PG Table Overview
* PG Table Catalog
* Node

**离线安装包**

* v0.3 离线安装包（CentOS 7.8）已经可以从Github下载：[pkg.tgz](https://github.com/Vonng/pigsty/releases/download/v0.3.0/pkg.tgz)

</details>