# Module: PGSQL

> The most advanced open-source relational database in the world with HA, PITR, IaC and more!
---

> **The most advanced open-source relational database in the world!**
>
> With battery-included observability, reliability, and maintainability powered by Pigsty


## Concept

> Overview of PostgreSQL in Pigsty

- [Architecture](/docs/pgsql/arch)
- [Configuration](/docs/pgsql/config)
- [Extensions](/docs/pgsql/extension)
- [Databases](/docs/pgsql/db)
- [Users](/docs/pgsql/user)
- [Services](/docs/pgsql/svc)
- [HBA Rules](/docs/pgsql/hba)
- [Access Control](/docs/pgsql/acl)
- [Administration](/docs/pgsql/admin)
- [Backup & PITR](/docs/pgsql/pitr)
- [Monitor](/docs/pgsql/monitor)
- [Migration](/docs/pgsql/migration)


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

## Configuration

> [Describe](/docs/pgsql/config) the cluster you want

- [Identity](/docs/pgsql/config#identity): Parameters used for describing a PostgreSQL cluster
- [Primary](/docs/pgsql/config#primary): Define a single instance cluster
- [Replica](/docs/pgsql/config#replica): Define a basic HA cluster with one primary & one replica
- [Offline](/docs/pgsql/config#offline): Define a dedicated instance for OLAP/ETL/Interactive queries.
- [Sync Standby](/docs/pgsql/config#sync-standby): Enable synchronous commit to ensure no data loss
- [Quorum Commit](/docs/pgsql/config#quorum-commit):   Use quorum sync commit for an even higher consistency level
- [Standby Cluster](/docs/pgsql/config#standby-cluster): Clone an existing cluster and follow it
- [Delayed Cluster](/docs/pgsql/config#delayed-cluster): Clone an existing cluster for emergency data recovery
- [Citus Cluster](/docs/pgsql/config#citus-cluster): Define a Citus distributed database cluster
- [Major Version](/docs/pgsql/config#major-version): Define a PostgreSQL cluster with specific major version


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

## Administration

> [Admin](/docs/pgsql/admin) your existing clusters

- [`Admin Cheatsheet`](/docs/pgsql/admin#cheatsheet)
- [`Create Cluster`](/docs/pgsql/admin#create-cluster)
- [`Create User`](/docs/pgsql/admin#create-user)
- [`Create Database`](/docs/pgsql/admin#create-database)
- [`Reload Service`](/docs/pgsql/admin#reload-service)
- [`Reload HBARule`](/docs/pgsql/admin#reload-hbarule)
- [`Config Cluster`](/docs/pgsql/admin#config-cluster)
- [`Append Replica`](/docs/pgsql/admin#append-replica)
- [`Remove Replica`](/docs/pgsql/admin#remove-replica)
- [`Remove Cluster`](/docs/pgsql/admin#remove-cluster)
- [`Switchover Cluster`](/docs/pgsql/admin#switchover)
- [`Backup Cluster`](/docs/pgsql/admin#backup-cluster)
- [`Restore Cluster`](/docs/pgsql/admin#restore-cluster)



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

## Playbook

> Materialize the cluster with idempotent [playbooks](/docs/pgsql/playbook)

- [`pgsql.yml`](/docs/pgsql/playbook#pgsqlyml) : Init HA PostgreSQL clusters or add new replicas.
- [`pgsql-rm.yml`](/docs/pgsql/playbook#pgsql-rmyml) : Remove PostgreSQL cluster, or remove replicas
- [`pgsql-user.yml`](/docs/pgsql/playbook#pgsql-useryml) : Add new business user to existing PostgreSQL cluster
- [`pgsql-db.yml`](/docs/pgsql/playbook#pgsql-dbyml) : Add new business database to existing PostgreSQL cluster
- [`pgsql-monitor.yml`](/docs/pgsql/playbook#pgsql-monitoryml) : Monitor remote PostgreSQL instance with local exporters
- [`pgsql-migration.yml`](/docs/pgsql/playbook#pgsql-migrationyml) : Generate Migration manual & scripts for existing PostgreSQL

<details><summary>Example: Install PGSQL module</summary>

[![asciicast](https://asciinema.org/a/566417.svg)](https://asciinema.org/a/566417)

</details>


<details><summary>Example: Remove PGSQL module</summary>

[![asciicast](https://asciinema.org/a/566418.svg)](https://asciinema.org/a/566418)

</details>



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

## Dashboard

There are 26 default grafana dashboards about PostgreSQL and categorized into 4 levels. Check [Dashboards](/docs/pgsql/dashboard) for details.

|                         Overview                          |                             Cluster                             |                          Instance                           |                         Database                          |
|:---------------------------------------------------------:|:---------------------------------------------------------------:|:-----------------------------------------------------------:|:---------------------------------------------------------:|
| [PGSQL Overview](https://demo.pigsty.cc/d/pgsql-overview) |     [PGSQL Cluster](https://demo.pigsty.cc/d/pgsql-cluster)     |  [PGSQL Instance](https://demo.pigsty.cc/d/pgsql-instance)  | [PGSQL Database](https://demo.pigsty.cc/d/pgsql-database) |
|    [PGSQL Alert](https://demo.pigsty.cc/d/pgsql-alert)    |     [PGRDS Cluster](https://demo.pigsty.cc/d/pgrds-cluster)     |  [PGRDS Instance](https://demo.pigsty.cc/d/pgrds-instance)  | [PGCAT Database](https://demo.pigsty.cc/d/pgcat-database) |
|    [PGSQL Shard](https://demo.pigsty.cc/d/pgsql-shard)    |    [PGSQL Activity](https://demo.pigsty.cc/d/pgsql-activity)    |  [PGCAT Instance](https://demo.pigsty.cc/d/pgcat-instance)  |   [PGSQL Tables](https://demo.pigsty.cc/d/pgsql-tables)   |
|                                                           | [PGSQL Replication](https://demo.pigsty.cc/d/pgsql-replication) |   [PGSQL Persist](https://demo.pigsty.cc/d/pgsql-persist)   |    [PGSQL Table](https://demo.pigsty.cc/d/pgsql-table)    |
|                                                           |     [PGSQL Service](https://demo.pigsty.cc/d/pgsql-service)     |     [PGSQL Proxy](https://demo.pigsty.cc/d/pgsql-proxy)     |    [PGCAT Table](https://demo.pigsty.cc/d/pgcat-table)    |
|                                                           |   [PGSQL Databases](https://demo.pigsty.cc/d/pgsql-databases)   | [PGSQL Pgbouncer](https://demo.pigsty.cc/d/pgsql-pgbouncer) |    [PGSQL Query](https://demo.pigsty.cc/d/pgsql-query)    |
|                                                           |     [PGSQL Patroni](https://demo.pigsty.cc/d/pgsql-patroni)     |   [PGSQL Session](https://demo.pigsty.cc/d/pgsql-session)   |    [PGCAT Query](https://demo.pigsty.cc/d/pgcat-query)    |
|                                                           |        [PGSQL PITR](https://demo.pigsty.cc/d/pgsql-pitr)        |     [PGSQL Xacts](https://demo.pigsty.cc/d/pgsql-xacts)     |    [PGCAT Locks](https://demo.pigsty.cc/d/pgcat-locks)    |
|                                                           |                                                                 |  [PGSQL Exporter](https://demo.pigsty.cc/d/pgsql-exporter)  |   [PGCAT Schema](https://demo.pigsty.cc/d/pgcat-schema)   |



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

## Parameter

> API Reference for [PGSQL](/docs/reference/param/#pgsql) module:

- [`PG_ID`](/docs/reference/param/#pg_id)               : Calculate & Check Postgres Identity
- [`PG_BUSINESS`](/docs/reference/param/#pg_business)   : Postgres Business Object Definition
- [`PG_INSTALL`](/docs/reference/param/#pg_install)     : Install PGSQL Packages & Extensions
- [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) : Init a HA Postgres Cluster with Patroni
- [`PG_PROVISION`](/docs/reference/param/#pg_provision) : Create users, databases, and in-database objects
- [`PG_BACKUP`](/docs/reference/param/#pg_backup)       : Setup backup repo with pgbackrest
- [`PG_SERVICE`](/docs/reference/param/#pg_service)     : Exposing pg service, bind vip and register DNS
- [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   : Add Monitor for PGSQL Instance


<details><summary>Parameters</summary>

| Parameter                                                                             | Section                                               |    Type     | Level | Comment                                                                       |
|---------------------------------------------------------------------------------------|-------------------------------------------------------|:-----------:|:-----:|-------------------------------------------------------------------------------|
| [`pg_mode`](/docs/reference/param/#pg_mode)                                           | [`PG_ID`](/docs/reference/param/#pg_id)               |    enum     |   C   | pgsql cluster mode: pgsql,citus,gpsql                                         |
| [`pg_cluster`](/docs/reference/param/#pg_cluster)                                     | [`PG_ID`](/docs/reference/param/#pg_id)               |   string    |   C   | pgsql cluster name, REQUIRED identity parameter                               |
| [`pg_seq`](/docs/reference/param/#pg_seq)                                             | [`PG_ID`](/docs/reference/param/#pg_id)               |     int     |   I   | pgsql instance seq number, REQUIRED identity parameter                        |
| [`pg_role`](/docs/reference/param/#pg_role)                                           | [`PG_ID`](/docs/reference/param/#pg_id)               |    enum     |   I   | pgsql role, REQUIRED, could be primary,replica,offline                        |
| [`pg_instances`](/docs/reference/param/#pg_instances)                                 | [`PG_ID`](/docs/reference/param/#pg_id)               |    dict     |   I   | define multiple pg instances on node in `{port:ins_vars}` format              |
| [`pg_upstream`](/docs/reference/param/#pg_upstream)                                   | [`PG_ID`](/docs/reference/param/#pg_id)               |     ip      |   I   | repl upstream ip addr for standby cluster or cascade replica                  |
| [`pg_shard`](/docs/reference/param/#pg_shard)                                         | [`PG_ID`](/docs/reference/param/#pg_id)               |   string    |   C   | pgsql shard name, optional identity for sharding clusters                     |
| [`pg_group`](/docs/reference/param/#pg_group)                                         | [`PG_ID`](/docs/reference/param/#pg_id)               |     int     |   C   | pgsql shard index number, optional identity for sharding clusters             |
| [`gp_role`](/docs/reference/param/#gp_role)                                           | [`PG_ID`](/docs/reference/param/#pg_id)               |    enum     |   C   | greenplum role of this cluster, could be master or segment                    |
| [`pg_exporters`](/docs/reference/param/#pg_exporters)                                 | [`PG_ID`](/docs/reference/param/#pg_id)               |    dict     |   C   | additional pg_exporters to monitor remote postgres instances                  |
| [`pg_offline_query`](/docs/reference/param/#pg_offline_query)                         | [`PG_ID`](/docs/reference/param/#pg_id)               |    bool     |   I   | set to true to enable offline query on this instance                          |
| [`pg_users`](/docs/reference/param/#pg_users)                                         | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |   user[]    |   C   | postgres business users                                                       |
| [`pg_databases`](/docs/reference/param/#pg_databases)                                 | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   | database[]  |   C   | postgres business databases                                                   |
| [`pg_services`](/docs/reference/param/#pg_services)                                   | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  service[]  |   C   | postgres business services                                                    |
| [`pg_hba_rules`](/docs/reference/param/#pg_hba_rules)                                 | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |    hba[]    |   C   | business hba rules for postgres                                               |
| [`pgb_hba_rules`](/docs/reference/param/#pgb_hba_rules)                               | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |    hba[]    |   C   | business hba rules for pgbouncer                                              |
| [`pg_replication_username`](/docs/reference/param/#pg_replication_username)           | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  username   |   G   | postgres replication username, `replicator` by default                        |
| [`pg_replication_password`](/docs/reference/param/#pg_replication_password)           | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  password   |   G   | postgres replication password, `DBUser.Replicator` by default                 |
| [`pg_admin_username`](/docs/reference/param/#pg_admin_username)                       | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  username   |   G   | postgres admin username, `dbuser_dba` by default                              |
| [`pg_admin_password`](/docs/reference/param/#pg_admin_password)                       | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  password   |   G   | postgres admin password in plain text, `DBUser.DBA` by default                |
| [`pg_monitor_username`](/docs/reference/param/#pg_monitor_username)                   | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  username   |   G   | postgres monitor username, `dbuser_monitor` by default                        |
| [`pg_monitor_password`](/docs/reference/param/#pg_monitor_password)                   | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  password   |   G   | postgres monitor password, `DBUser.Monitor` by default                        |
| [`pg_dbsu_password`](/docs/reference/param/#pg_dbsu_password)                         | [`PG_BUSINESS`](/docs/reference/param/#pg_business)   |  password   |  G/C  | dbsu password, empty string means no dbsu password by default                 |
| [`pg_dbsu`](/docs/reference/param/#pg_dbsu)                                           | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |  username   |   C   | os dbsu name, postgres by default, better not change it                       |
| [`pg_dbsu_uid`](/docs/reference/param/#pg_dbsu_uid)                                   | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |     int     |   C   | os dbsu uid and gid, 26 for default postgres users and groups                 |
| [`pg_dbsu_sudo`](/docs/reference/param/#pg_dbsu_sudo)                                 | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |    enum     |   C   | dbsu sudo privilege, none,limit,all,nopass. limit by default                  |
| [`pg_dbsu_home`](/docs/reference/param/#pg_dbsu_home)                                 | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |    path     |   C   | postgresql home directory, `/var/lib/pgsql` by default                        |
| [`pg_dbsu_ssh_exchange`](/docs/reference/param/#pg_dbsu_ssh_exchange)                 | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |    bool     |   C   | exchange postgres dbsu ssh key among same pgsql cluster                       |
| [`pg_version`](/docs/reference/param/#pg_version)                                     | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |    enum     |   C   | postgres major version to be installed, 16 by default                         |
| [`pg_bin_dir`](/docs/reference/param/#pg_bin_dir)                                     | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |    path     |   C   | postgres binary dir, `/usr/pgsql/bin` by default                              |
| [`pg_log_dir`](/docs/reference/param/#pg_log_dir)                                     | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |    path     |   C   | postgres log dir, `/pg/log/postgres` by default                               |
| [`pg_packages`](/docs/reference/param/#pg_packages)                                   | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |  string[]   |   C   | pg packages to be installed, `${pg_version}` will be replaced                 |
| [`pg_extensions`](/docs/reference/param/#pg_extensions)                               | [`PG_INSTALL`](/docs/reference/param/#pg_install)     |  string[]   |   C   | pg extensions to be installed, `${pg_version}` will be replaced               |
| [`pg_safeguard`](/docs/reference/param/#pg_safeguard)                                 | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    bool     | G/C/A | prevent purging running postgres instance? false by default                   |
| [`pg_clean`](/docs/reference/param/#pg_clean)                                         | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    bool     | G/C/A | purging existing postgres during pgsql init? true by default                  |
| [`pg_data`](/docs/reference/param/#pg_data)                                           | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    path     |   C   | postgres data directory, `/pg/data` by default                                |
| [`pg_fs_main`](/docs/reference/param/#pg_fs_main)                                     | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    path     |   C   | mountpoint/path for postgres main data, `/data` by default                    |
| [`pg_fs_bkup`](/docs/reference/param/#pg_fs_bkup)                                     | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    path     |   C   | mountpoint/path for pg backup data, `/data/backup` by default                 |
| [`pg_storage_type`](/docs/reference/param/#pg_storage_type)                           | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | storage type for pg main data, SSD,HDD, SSD by default                        |
| [`pg_dummy_filesize`](/docs/reference/param/#pg_dummy_filesize)                       | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    size     |   C   | size of `/pg/dummy`, hold 64MB disk space for emergency use                   |
| [`pg_listen`](/docs/reference/param/#pg_listen)                                       | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    ip(s)    |  C/I  | postgres/pgbouncer listen addresses, comma separated list                     |
| [`pg_port`](/docs/reference/param/#pg_port)                                           | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    port     |   C   | postgres listen port, 5432 by default                                         |
| [`pg_localhost`](/docs/reference/param/#pg_localhost)                                 | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    path     |   C   | postgres unix socket dir for localhost connection                             |
| [`pg_namespace`](/docs/reference/param/#pg_namespace)                                 | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    path     |   C   | top level key namespace in etcd, used by patroni & vip                        |
| [`patroni_enabled`](/docs/reference/param/#patroni_enabled)                           | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    bool     |   C   | if disabled, no postgres cluster will be created during init                  |
| [`patroni_mode`](/docs/reference/param/#patroni_mode)                                 | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | patroni working mode: default,pause,remove                                    |
| [`patroni_port`](/docs/reference/param/#patroni_port)                                 | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    port     |   C   | patroni listen port, 8008 by default                                          |
| [`patroni_log_dir`](/docs/reference/param/#patroni_log_dir)                           | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    path     |   C   | patroni log dir, `/pg/log/patroni` by default                                 |
| [`patroni_ssl_enabled`](/docs/reference/param/#patroni_ssl_enabled)                   | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    bool     |   G   | secure patroni RestAPI communications with SSL?                               |
| [`patroni_watchdog_mode`](/docs/reference/param/#patroni_watchdog_mode)               | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | patroni watchdog mode: automatic,required,off. off by default                 |
| [`patroni_username`](/docs/reference/param/#patroni_username)                         | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |  username   |   C   | patroni restapi username, `postgres` by default                               |
| [`patroni_password`](/docs/reference/param/#patroni_password)                         | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |  password   |   C   | patroni restapi password, `Patroni.API` by default                            |
| [`patroni_citus_db`](#patroni_citus_db)                                               | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |   string    |   C   | citus database managed by patroni, postgres by default                        |
| [`pg_conf`](/docs/reference/param/#pg_conf)                                           | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | config template: oltp,olap,crit,tiny. `oltp.yml` by default                   |
| [`pg_max_conn`](/docs/reference/param/#pg_max_conn)                                   | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |     int     |   C   | postgres max connections, `auto` will use recommended value                   |
| [`pg_shared_buffer_ratio`](/docs/reference/param/#pg_shared_buffer_ratio)             | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    float    |   C   | postgres shared buffer memory ratio, 0.25 by default, 0.1~0.4                 |
| [`pg_rto`](/docs/reference/param/#pg_rto)                                             | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |     int     |   C   | recovery time objective in seconds, `30s` by default                          |
| [`pg_rpo`](/docs/reference/param/#pg_rpo)                                             | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |     int     |   C   | recovery point objective in bytes, `1MiB` at most by default                  |
| [`pg_libs`](/docs/reference/param/#pg_libs)                                           | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |   string    |   C   | preloaded libraries, `pg_stat_statements,auto_explain` by default |
| [`pg_delay`](/docs/reference/param/#pg_delay)                                         | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |  interval   |   I   | replication apply delay for standby cluster leader                            |
| [`pg_checksum`](/docs/reference/param/#pg_checksum)                                   | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    bool     |   C   | enable data checksum for postgres cluster?                                    |
| [`pg_pwd_enc`](/docs/reference/param/#pg_pwd_enc)                                     | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | passwords encryption algorithm: md5,scram-sha-256                             |
| [`pg_encoding`](/docs/reference/param/#pg_encoding)                                   | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | database cluster encoding, `UTF8` by default                                  |
| [`pg_locale`](/docs/reference/param/#pg_locale)                                       | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | database cluster local, `C` by default                                        |
| [`pg_lc_collate`](/docs/reference/param/#pg_lc_collate)                               | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | database cluster collate, `C` by default                                      |
| [`pg_lc_ctype`](/docs/reference/param/#pg_lc_ctype)                                   | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | database character type, `en_US.UTF8` by default                              |
| [`pgbouncer_enabled`](/docs/reference/param/#pgbouncer_enabled)                       | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    bool     |   C   | if disabled, pgbouncer will not be launched on pgsql host                     |
| [`pgbouncer_port`](/docs/reference/param/#pgbouncer_port)                             | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    port     |   C   | pgbouncer listen port, 6432 by default                                        |
| [`pgbouncer_log_dir`](/docs/reference/param/#pgbouncer_log_dir)                       | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    path     |   C   | pgbouncer log dir, `/pg/log/pgbouncer` by default                             |
| [`pgbouncer_auth_query`](/docs/reference/param/#pgbouncer_auth_query)                 | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    bool     |   C   | query postgres to retrieve unlisted business users?                           |
| [`pgbouncer_poolmode`](/docs/reference/param/#pgbouncer_poolmode)                     | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | pooling mode: transaction,session,statement, transaction by default           |
| [`pgbouncer_sslmode`](/docs/reference/param/#pgbouncer_sslmode)                       | [`PG_BOOTSTRAP`](/docs/reference/param/#pg_bootstrap) |    enum     |   C   | pgbouncer client ssl mode, disable by default                                 |
| [`pg_provision`](/docs/reference/param/#pg_provision)                                 | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |    bool     |   C   | provision postgres cluster after bootstrap                                    |
| [`pg_init`](/docs/reference/param/#pg_init)                                           | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |   string    |  G/C  | provision init script for cluster template, `pg-init` by default              |
| [`pg_default_roles`](/docs/reference/param/#pg_default_roles)                         | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |   role[]    |  G/C  | default roles and users in postgres cluster                                   |
| [`pg_default_privileges`](/docs/reference/param/#pg_default_privileges)               | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |  string[]   |  G/C  | default privileges when created by admin user                                 |
| [`pg_default_schemas`](/docs/reference/param/#pg_default_schemas)                     | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |  string[]   |  G/C  | default schemas to be created                                                 |
| [`pg_default_extensions`](/docs/reference/param/#pg_default_extensions)               | [`PG_PROVISION`](/docs/reference/param/#pg_provision) | extension[] |  G/C  | default extensions to be created                                              |
| [`pg_reload`](/docs/reference/param/#pg_reload)                                       | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |    bool     |   A   | reload postgres after hba changes                                             |
| [`pg_default_hba_rules`](/docs/reference/param/#pg_default_hba_rules)                 | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |    hba[]    |  G/C  | postgres default host-based authentication rules                              |
| [`pgb_default_hba_rules`](/docs/reference/param/#pgb_default_hba_rules)               | [`PG_PROVISION`](/docs/reference/param/#pg_provision) |    hba[]    |  G/C  | pgbouncer default host-based authentication rules                             |
| [`pgbackrest_enabled`](/docs/reference/param/#pgbackrest_enabled)                     | [`PG_BACKUP`](/docs/reference/param/#pg_backup)       |    bool     |   C   | enable pgbackrest on pgsql host?                                              |
| [`pgbackrest_clean`](/docs/reference/param/#pgbackrest_clean)                         | [`PG_BACKUP`](/docs/reference/param/#pg_backup)       |    bool     |   C   | remove pg backup data during init?                                            |
| [`pgbackrest_log_dir`](/docs/reference/param/#pgbackrest_log_dir)                     | [`PG_BACKUP`](/docs/reference/param/#pg_backup)       |    path     |   C   | pgbackrest log dir, `/pg/log/pgbackrest` by default                           |
| [`pgbackrest_method`](/docs/reference/param/#pgbackrest_method)                       | [`PG_BACKUP`](/docs/reference/param/#pg_backup)       |    enum     |   C   | pgbackrest repo method: local,minio,etc...                                    |
| [`pgbackrest_repo`](/docs/reference/param/#pgbackrest_repo)                           | [`PG_BACKUP`](/docs/reference/param/#pg_backup)       |    dict     |  G/C  | pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository |
| [`pg_weight`](/docs/reference/param/#pg_weight)                                       | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |     int     |   I   | relative load balance weight in service, 100 by default, 0-255                |
| [`pg_service_provider`](/docs/reference/param/#pg_service_provider)                   | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |    enum     |  G/C  | dedicate haproxy node group name, or empty string for local nodes by default  |
| [`pg_default_service_dest`](/docs/reference/param/#pg_default_service_dest)           | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |    enum     |  G/C  | default service destination if svc.dest='default'                             |
| [`pg_default_services`](/docs/reference/param/#pg_default_services)                   | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |  service[]  |  G/C  | postgres default service definitions                                          |
| [`pg_vip_enabled`](/docs/reference/param/#pg_vip_enabled)                             | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |    bool     |   C   | enable a l2 vip for pgsql primary? false by default                           |
| [`pg_vip_address`](/docs/reference/param/#pg_vip_address)                             | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |    cidr4    |   C   | vip address in `<ipv4>/<mask>` format, require if vip is enabled              |
| [`pg_vip_interface`](/docs/reference/param/#pg_vip_interface)                         | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |   string    |  C/I  | vip network interface to listen, eth0 by default                              |
| [`pg_dns_suffix`](/docs/reference/param/#pg_dns_suffix)                               | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |   string    |   C   | pgsql dns suffix, '' by default                                               |
| [`pg_dns_target`](/docs/reference/param/#pg_dns_target)                               | [`PG_SERVICE`](/docs/reference/param/#pg_service)     |    enum     |   C   | auto, primary, vip, none, or ad hoc ip                                        |
| [`pg_exporter_enabled`](/docs/reference/param/#pg_exporter_enabled)                   | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |    bool     |   C   | enable pg_exporter on pgsql hosts?                                            |
| [`pg_exporter_config`](/docs/reference/param/#pg_exporter_config)                     | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |   string    |   C   | pg_exporter configuration file name                                           |
| [`pg_exporter_cache_ttls`](/docs/reference/param/#pg_exporter_cache_ttls)             | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |   string    |   C   | pg_exporter collector ttl stage in seconds, '1,10,60,300' by default          |
| [`pg_exporter_port`](/docs/reference/param/#pg_exporter_port)                         | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |    port     |   C   | pg_exporter listen port, 9630 by default                                      |
| [`pg_exporter_params`](/docs/reference/param/#pg_exporter_params)                     | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |   string    |   C   | extra url parameters for pg_exporter dsn                                      |
| [`pg_exporter_url`](/docs/reference/param/#pg_exporter_url)                           | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |    pgurl    |   C   | overwrite auto-generate pg dsn if specified                                   |
| [`pg_exporter_auto_discovery`](/docs/reference/param/#pg_exporter_auto_discovery)     | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |    bool     |   C   | enable auto database discovery? enabled by default                            |
| [`pg_exporter_exclude_database`](/docs/reference/param/#pg_exporter_exclude_database) | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |   string    |   C   | csv of database that WILL NOT be monitored during auto-discovery              |
| [`pg_exporter_include_database`](/docs/reference/param/#pg_exporter_include_database) | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |   string    |   C   | csv of database that WILL BE monitored during auto-discovery                  |
| [`pg_exporter_connect_timeout`](/docs/reference/param/#pg_exporter_connect_timeout)   | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |     int     |   C   | pg_exporter connect timeout in ms, 200 by default                             |
| [`pg_exporter_options`](/docs/reference/param/#pg_exporter_options)                   | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |     arg     |   C   | overwrite extra options for pg_exporter                                       |
| [`pgbouncer_exporter_enabled`](/docs/reference/param/#pgbouncer_exporter_enabled)     | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |    bool     |   C   | enable pgbouncer_exporter on pgsql hosts?                                     |
| [`pgbouncer_exporter_port`](/docs/reference/param/#pgbouncer_exporter_port)           | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |    port     |   C   | pgbouncer_exporter listen port, 9631 by default                               |
| [`pgbouncer_exporter_url`](/docs/reference/param/#pgbouncer_exporter_url)             | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |    pgurl    |   C   | overwrite auto-generate pgbouncer dsn if specified                            |
| [`pgbouncer_exporter_options`](/docs/reference/param/#pgbouncer_exporter_options)     | [`PG_EXPORTER`](/docs/reference/param/#pg_exporter)   |     arg     |   C   | overwrite extra options for pgbouncer_exporter                                |

</details>



## Tutorials

- Fork an existing PostgreSQL cluster.
- Create a standby cluster of an existing PostgreSQL cluster.
- Create a delayed cluster of another pgsql cluster?
- Monitoring an existing postgres instance?
- Migration from an external PostgreSQL with logical replication?
- Use MinIO as a central pgBackRest repo.
- Use dedicate etcd cluster for DCS?
- Use dedicated haproxy for exposing PostgreSQL service.
- Deploy a multi-node MinIO cluster?
- Use CMDB instead of Config as inventory.
- Use PostgreSQL as grafana backend storage ?
- Use PostgreSQL as prometheus backend storage ?

---

Section pages:

- [Architecture](/docs/pgsql/arch/): PostgreSQL cluster architectures and implmenetation details.
- [Users](/docs/pgsql/user/): Define business users & roles in PostgreSQL, which is the object created by SQL `CREATE USER/ROLE`
- [Databases](/docs/pgsql/db/): Define business databases in PostgreSQL, which is the object create by SQL `CREATE DATABASE`
- [Services](/docs/pgsql/svc/): Define and create new services, and expose them via haproxy
- [Extensions](/docs/pgsql/extension/): Define, Create, Install, Enable Extensions in Pigsty
- [Authentication](/docs/pgsql/hba/): Host-Based Authentication in Pigsty, how to manage HBA rules in Pigsty?
- [Configuration](/docs/pgsql/config/): Configure your PostgreSQL cluster & instances according to your needs
- [Playbook](/docs/pgsql/playbook/): How to manage PostgreSQL cluster with ansible playbooks
- [Administration](/docs/pgsql/admin/): Administration standard operation procedures to manage PostgreSQL clusters in production environment.
- [Access Control](/docs/pgsql/acl/): Built-in roles system, and battery-included access control model in Pigsty.
- [Backup & PITR](/docs/pgsql/pitr/): How to perform base backup & PITR with pgBackRest?
- [Migration](/docs/pgsql/migration/): How to migrate existing postgres into Pigsty-managed cluster with mimial downtime? The blue-green online migration playbook
- [Monitoring](/docs/pgsql/monitor/): How PostgreSQL monitoring works, and how to monitor remote (existing) PostgreSQL instances?
- [Dashboards](/docs/pgsql/dashboard/): Grafana dashboards provided by Pigsty
- [Metrics](/docs/pgsql/metric/): Pigsty PGSQL module metric list
- [FAQ](/docs/pgsql/faq/): Pigsty PGSQL module frequently asked questions
- [PGSQL Architecture](/docs/pgsql/concept/): Historical documentation recovered from the Pigsty v2.7.0 product tag.
