Param Templates
Pigsty provides four preset Patroni/PostgreSQL config templates optimized for different workloads:
| Template | CPU Cores | Use Case | Characteristics |
|---|---|---|---|
/docs/pgsql/template/oltp.yml |
4-128C | OLTP transactions | High concurrency, low latency |
/docs/pgsql/template/olap.yml |
4-128C | OLAP analytics | Large queries, high parallelism |
/docs/pgsql/template/crit.yml |
4-128C | Consistency-first | Consistency-first, detailed auditing |
/docs/pgsql/template/tiny.yml |
1-3C | Tiny instances | Resource-constrained envs |
Use pg_conf to select a template; default is /docs/pgsql/template/oltp.yml.
The database tuning template
pg_confshould be paired with the OS tuning templatenode_tune.
All four standard templates set wal_level to logical. PostgreSQL 18.6 adds the output_plugin_libraries security allowlist; Pigsty permits the built-in pgoutput and test_decoding plugins plus wal2json, which is installed by the default pgsql-main package set. To use another logical-decoding output plugin, review its code and privilege boundary, then add its exact library name through pg_parameters. Patroni filters the template setting on older PostgreSQL versions that do not support it.
Usage
Set pg_conf in your cluster definition.
It’s recommended to set node_tune accordingly for OS-level tuning:
For critical financial workloads, use /docs/pgsql/template/crit.yml:
For low-spec VMs or dev environments, use /docs/pgsql/template/tiny.yml:
Comparison
The four templates differ significantly in key parameters:
Connections & Memory
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| max_connections | 500/1000 | 500 | 500/1000 | 250 |
| work_mem range | 64MB-1GB | 64MB-8GB | 64MB-1GB | 16MB-256MB |
| maintenance_work_mem | 25% shmem | 50% shmem | 25% shmem | 25% shmem |
| max_locks_per_transaction | 1-2x maxconn | 2-4x maxconn | 1-2x maxconn | 1-2x maxconn |
Parallel Query
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| max_worker_processes | max(cpu+16, 24) | max(cpu+20, 28) | max(cpu+16, 24) | max(cpu+12, 20) |
| max_parallel_workers | 50% cpu | 80% cpu | 50% cpu | 50% cpu |
| max_parallel_workers_per_gather | 20% cpu (max 8) | 50% cpu | 0 (off) | 0 (off) |
| parallel_setup_cost | 2000 | 1000 | 2000 | 1000 |
| parallel_tuple_cost | 0.2 | 0.1 | 0.2 | 0.1 |
Sync Replication
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| synchronous_mode | depends pg_rpo | depends pg_rpo | forced on | depends pg_rpo |
| data_checksums | optional | optional | forced on | optional |
Vacuum Config
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| vacuum_cost_delay | 20ms | 10ms | 20ms | 20ms |
| vacuum_cost_limit | 2000 | 10000 | 2000 | 2000 |
| autovacuum_max_workers | 3 | 3 | 3 | 2 |
Timeout & Security
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| idle_in_transaction_session_timeout | 10min | off | 1min | 10min |
| log_min_duration_statement | 100ms | 1000ms | 100ms | 100ms |
| default_statistics_target | 400 | 1000 | 400 | 200 |
| track_activity_query_size | 8KB | 8KB | 32KB | 8KB |
| log_connections | auth | auth | full | default |
IO Config (PG18)
| Parameter | OLTP | OLAP | CRIT | TINY |
|---|---|---|---|---|
| io_workers | 25% cpu (4-16) | 50% cpu (4-32) | 25% cpu (4-8) | 3 |
| temp_file_limit | 1/20 disk, max 100GB | 1/5 disk, max 400GB | 1/20 disk, max 100GB | 1/20 disk, max 100GB |
Selection Guide
-
OLTP Template: Default choice for most transaction processing. Ideal for e-commerce, social, gaming apps.
-
OLAP Template: For data warehouses, BI reports, ETL. Allows large queries, high parallelism, relaxed timeouts.
-
CRIT Template: For financial transactions, core accounting with strict consistency/security requirements. Forced sync replication, checksums, full audit.
-
TINY Template: For dev/test environments, resource-constrained VMs, Raspberry Pi. Minimizes resource usage, disables parallel queries.
Custom Templates
Create custom templates based on existing ones. Templates are in roles/pgsql/templates/:
Steps to create a custom template:
- Copy an existing template as base
- Modify parameters as needed
- Place in
roles/pgsql/templates/ - Reference via
pg_conf
Example:
Then use in your cluster:
Templates use Jinja2 syntax; parameters are dynamically computed based on node resources (CPU, memory, disk).
Tuning Strategy
For technical details on template parameter optimization, see Tuning Strategy:
- Memory tuning (shared buffers, work mem, max connections)
- CPU tuning (parallel query worker config)
- Storage tuning (WAL size, temp file limits)
- Manual parameter adjustment
Related Parameters
pg_conf: PostgreSQL config templatenode_tune: OS tuning template, should matchpg_confpg_rto: Recovery time objective, affects failover timeoutpg_rpo: Candidate-replica lag threshold; setting it to 0 enables synchronous replication in the general templatespg_max_conn: Override template max connectionspg_shared_buffer_ratio: Shared buffer memory ratiopg_storage_type: Storage type, affects IO params
Learn the parameter optimization strategies Pigsty uses for the 4 different PostgreSQL workload scenarios.
PostgreSQL config template optimized for online transaction processing workloads
PostgreSQL config template optimized for online analytical processing workloads
PostgreSQL parameter template for consistency-first workloads, with strict synchronous replication, data checksums, and detailed connection logging.
PostgreSQL config template optimized for micro instances and resource-constrained environments