Skip to content

Instantly share code, notes, and snippets.

@jbub
Created May 15, 2023 07:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbub/ef1a1d5436aefca06e51c59c1b8a1150 to your computer and use it in GitHub Desktop.
Save jbub/ef1a1d5436aefca06e51c59c1b8a1150 to your computer and use it in GitHub Desktop.
pgcat.toml
# General pooler settings
[general]
# What IP to run on, 0.0.0.0 means accessible from everywhere.
host = "0.0.0.0"
# Port to run on, same as PgBouncer used in this example.
port = 6432
# Whether to enable prometheus exporter or not.
enable_prometheus_exporter = true
# Port at which prometheus exporter listens on.
prometheus_exporter_port = 9930
# How long to wait before aborting a server connection.
connect_timeout = 5000 # milliseconds
# How long an idle connection with a server is left open.
idle_timeout = 30000 # milliseconds
# Max connection lifetime before it's closed, even if actively used.
server_lifetime = 86400000 # 24 hours
# How long a client is allowed to be idle while in a transaction.
idle_client_in_transaction_timeout = 0 # milliseconds
# How much time to give `SELECT 1` health check query to return with a result.
healthcheck_timeout = 1000 # milliseconds
# How long to keep connection available for immediate re-use, without running a healthcheck query on it
healthcheck_delay = 30000 # milliseconds
# How much time to give clients during shutdown before forcibly killing client connections.
shutdown_timeout = 60000 # milliseconds
# For how long to ban a server if it fails a health check.
ban_time = 0 # seconds
# If we should log client connections
log_client_connections = true
# If we should log client disconnections
log_client_disconnections = true
# Reload config periodically if it changes, period is in milliseconds
autoreload = 30000 # milliseconds
# Number of worker threads the Runtime will use (4 by default).
worker_threads = 5
# Number of seconds of connection idleness to wait before sending a keepalive packet to the server.
tcp_keepalives_idle = 5
# Number of unacknowledged keepalive packets allowed before giving up and closing the connection.
tcp_keepalives_count = 5
# Number of seconds between keepalive packets.
tcp_keepalives_interval = 5
# TLS
# tls_certificate = "server.cert"
# tls_private_key = "server.key"
# Credentials to access the virtual administrative database (pgbouncer or pgcat)
# Connecting to that database allows running commands like `SHOW POOLS`, `SHOW DATABASES`, etc..
admin_username = "xxx"
admin_password = "xxx"
# pool
# configs are structured as pool.<pool_name>
# the pool_name is what clients use as database name when connecting
# For the example below a client can connect using "postgres://sharding_user:sharding_user@pgcat_host:pgcat_port/sharded"
[pools.platform]
# Pool mode (see PgBouncer docs for more).
# session: one server connection per connected client
# transaction: one server connection per client transaction
pool_mode = "transaction"
# If the client doesn't specify, route traffic to
# this role by default.
#
# any: round-robin between primary and replicas,
# replica: round-robin between replicas only without touching the primary,
# primary: all queries go to the primary unless otherwise specified.
default_role = "primary"
# Query parser. If enabled, we'll attempt to parse
# every incoming query to determine if it's a read or a write.
# If it's a read query, we'll direct it to a replica. Otherwise, if it's a write,
# we'll direct it to the primary.
query_parser_enabled = false
# If the query parser is enabled and this setting is enabled, the primary will be part of the pool of databases used for
# load balancing of read queries. Otherwise, the primary will only be used for write
# queries. The primary can always be explicitely selected with our custom protocol.
primary_reads_enabled = true
# So what if you wanted to implement a different hashing function,
# or you've already built one and you want this pooler to use it?
#
# Current options:
#
# pg_bigint_hash: PARTITION BY HASH (Postgres hashing function)
# sha1: A hashing function based on SHA1
#
sharding_function = "pg_bigint_hash"
# Credentials for users that may connect to this cluster
[pools.platform.users.0]
username = "xxx"
password = "xxx"
server_username = "yyy"
server_password = "yyy"
# Minimum number of server connections to keep open.
min_pool_size = 3
# Maximum number of server connections that can be established for this user
# The maximum number of connection from a single Pgcat process to any database in the cluster
# is the sum of pool_size across all users.
pool_size = 6
# Maximum query duration. Dangerous, but protects against DBs that died in a non-obvious way.
statement_timeout = 0
# Shard 0
[pools.platform.shards.0]
# [ host, port, role ]
servers = [
[ "xxxx", 5432, "primary" ]
]
# Database name (e.g. "postgres")
database = "xxxx"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment