###################################################
# repmgr sample configuration file
###################################################

# Some configuration items will be set with a default value; this
# is noted for each item. Where no default value is shown, the
# parameter will be treated as empty or false.
#
# repmgr parses its configuration file in the same way as PostgreSQL itself
# does. In particular, strings must be enclosed in single quotes (although
# simple identifiers may be provided as-is).
#
# For details on the configuration file format see the documentation at:
#
#  https://repmgr.org/docs/current/configuration-file.html#CONFIGURATION-FILE-FORMAT
#
# =============================================================================
# Required configuration items
# =============================================================================
#
# repmgr and repmgrd require the following items to be explicitly configured.


#node_id=			 # A unique integer greater than zero
#node_name=''			 # An arbitrary (but unique) string; we recommend
				 # using the server's hostname or another identifier
				 # unambiguously associated with the server to avoid
				 # confusion. Avoid choosing names which reflect the
				 # node's current role, e.g. 'primary' or 'standby1',
				 # as roles can change and it will be confusing if
				 # the current primary is called 'standby1'.
				 # The string's maximum length is 63 characters and it should
				 # contain only printable ASCII characters.

#conninfo=''			 # Database connection information as a conninfo string.
				 # All servers in the cluster must be able to connect to
				 # the local node using this string.
				 #
				 # For details on conninfo strings, see:
				 #  https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
				 #
				 # If repmgrd is in use, consider explicitly setting
				 # "connect_timeout" in the conninfo string to determine
				 # the length of time which elapses before a network
				 # connection attempt is abandoned; for details see:
				 #  https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-CONNECT-TIMEOUT

#data_directory=''		 # The node's data directory. This is needed by repmgr
				 # when performing operations when the PostgreSQL instance
				 # is not running and there's no other way of determining
				 # the data directory.


# =============================================================================
# Optional configuration items
# =============================================================================


#------------------------------------------------------------------------------
# Server settings
#------------------------------------------------------------------------------

#config_directory=''		 # If configuration files are located outside the data
				 # directory, specify the directory where the main
				 # postgresql.conf file is located.

#------------------------------------------------------------------------------
# Replication settings
#------------------------------------------------------------------------------

#replication_user='repmgr'	 # User to make replication connections with, if not set
				 # defaults to the user defined in "conninfo".

#replication_type='physical'	 # Must "physical" (the default).

#location='default'		 # An arbitrary string defining the location of the node; this
				 # is used during failover to check visibility of the
				 # current primary node. For further details see:
				 #  https://repmgr.org/docs/current/repmgrd-network-split.html

#use_replication_slots=no	 # whether to use physical replication slots
				 # NOTE: when using replication slots,
				 # 'max_replication_slots' should be configured for
				 # at least the number of standbys which will connect
				 # to the primary.

#------------------------------------------------------------------------------
# Witness server settings
#------------------------------------------------------------------------------

#witness_sync_interval=15	 # interval (in seconds) to synchronise node records
				 # to the witness server

#------------------------------------------------------------------------------
# Logging settings
#------------------------------------------------------------------------------
#
# Note that logging facility settings will only apply to `repmgrd` by default;
# `repmgr` will always write to STDERR unless the switch `--log-to-file` is
# supplied, in which case it will log to the same destination as `repmgrd`.
# This is mainly intended for those cases when `repmgr` is executed directly
# by `repmgrd`.

#log_level='INFO'		 # Log level: possible values are DEBUG, INFO, NOTICE,
				 # WARNING, ERROR, ALERT, CRIT or EMERG

#log_facility='STDERR'		 # Logging facility: possible values are STDERR, or for
				 # syslog integration, one of LOCAL0, LOCAL1, ..., LOCAL7, USER

#log_file=''			 # STDERR can be redirected to an arbitrary file
#log_status_interval=300	 # interval (in seconds) for repmgrd to log a status message


#------------------------------------------------------------------------------
# Event notification settings
#------------------------------------------------------------------------------

# event notifications can be passed to an arbitrary external program
# together with the following parameters:
#
#   %n - node ID
#   %e - event type
#   %s - success (1 or 0)
#   %t - timestamp
#   %d - details
#
# the values provided for "%t" and "%d" will probably contain spaces,
# so should be quoted in the provided command configuration, e.g.:
#
#   event_notification_command='/path/to/some/script %n %e %s "%t" "%d"'
#
# By default, all notifications will be passed; the notification types
# can be filtered to explicitly named ones, e.g.:
#
#   event_notifications=primary_register,standby_register

#event_notification_command=''		# An external program or script which
					# can be executed by the user under which
					# repmgr/repmgrd are run.

#event_notifications=''			# A commas-separated list of notification
					# types

#------------------------------------------------------------------------------
# Environment/command settings
#------------------------------------------------------------------------------

#pg_bindir=''				# Path to PostgreSQL binary directory (location
					# of pg_ctl, pg_basebackup etc.). Only needed
					# if these files are not in the system $PATH.
					#
					# Debian/Ubuntu users: you will probably need to
					# set this to the directory where `pg_ctl` is located,
					# e.g. /usr/lib/postgresql/9.6/bin/
					#
					# *NOTE* "pg_bindir" is only used when repmgr directly
					# executes PostgreSQL binaries; any user-defined scripts
					# *must* be specified with the full path

#repmgr_bindir=''			# Path to repmgr binary directory (location of the repmgr
					# binary. Only needed if the repmgr executable is not in
					# the system $PATH or the path defined in "pg_bindir".

#use_primary_conninfo_password=false	# explicitly set "password" in "primary_conninfo"
					# using the value contained in the environment variable
					# PGPASSWORD
#passfile=''				# path to .pgpass file to include in "primary_conninfo"

#------------------------------------------------------------------------------
# external command options
#------------------------------------------------------------------------------
#
# Options which can be passed to external commands invoked by repmgr/repmgrd.
#
# Examples:
#
#   pg_ctl_options='-s'
#   pg_basebackup_options='--label=repmgr_backup'
#   rsync_options=--archive --checksum --compress --progress --rsh="ssh -o \"StrictHostKeyChecking no\""
#   ssh_options=-o "StrictHostKeyChecking no"

#pg_ctl_options=''			# Options to append to "pg_ctl"
#pg_basebackup_options=''		# Options to append to "pg_basebackup"
					# (Note: when cloning from Barman, repmgr will honour any
					# --waldir/--xlogdir setting present in "pg_basebackup_options"
#rsync_options=''			# Options to append to "rsync"
ssh_options='-q -o ConnectTimeout=10'	# Options to append to "ssh"



#------------------------------------------------------------------------------
# "standby clone" settings
#------------------------------------------------------------------------------
#
# These settings apply when cloning a standby ("repmgr standby clone").
#
# Examples:
#
#   tablespace_mapping='/path/to/original/tablespace=/path/to/new/tablespace'
#   restore_command = 'cp /path/to/archived/wals/%f %p'

#tablespace_mapping=''			# Tablespaces can be remapped from one
					# file system location to another. This
					# parameter can be provided multiple times.

#restore_command=''			# This will be included in the recovery configuration
					# generated by repmgr.

#archive_cleanup_command=''		# This will be included in the recovery configuration
					# generated by repmgr. Note we recommend using Barman for
					# managing WAL archives (see: https://www.pgbarman.org )

#recovery_min_apply_delay=		# If provided, "recovery_min_apply_delay" will be set to
					# this value (PostgreSQL 9.4 and later). Value can be
					# an integer representing milliseconds, or a string
					# representing a period of time (e.g. '5 min').


#------------------------------------------------------------------------------
# "standby promote" settings
#------------------------------------------------------------------------------

# These settings apply when instructing a standby to promote itself to the
# new primary ("repmgr standby promote").

#promote_check_timeout=60		# The length of time (in seconds) to wait
					# for the new primary to finish promoting
#promote_check_interval=1		# The interval (in seconds) to check whether
					# the new primary has finished promoting


#------------------------------------------------------------------------------
# "standby follow" settings
#------------------------------------------------------------------------------

# These settings apply when instructing a standby to follow the new primary
# ("repmgr standby follow").

#primary_follow_timeout=60		# The max length of time (in seconds) to wait
					# for the new primary to become available
#standby_follow_timeout=30		# The max length of time (in seconds) to wait
					# for the standby to connect to the primary
#standby_follow_restart=false		# Restart the standby instead of sending a SIGHUP
					# (only for PostgreSQL 13 and later)

#------------------------------------------------------------------------------
# "standby switchover" settings
#------------------------------------------------------------------------------

# These settings apply when switching roles between a primary and a standby
# ("repmgr standby switchover").

#shutdown_check_timeout=60		# The max length of time (in seconds) to wait for the demotion
					# candidate (current primary) to shut down
#standby_reconnect_timeout=60		# The max length of time (in seconds) to wait
					# for the demoted standby to reconnect to the promoted
					# primary (note: this value should be equal to or greater
					# than that set for "node_rejoin_timeout")
#wal_receive_check_timeout=30		# The max length of time (in seconds) to wait for the walreceiver
					# on the standby to flush WAL to disk before comparing location
					# with the shut-down primary

#------------------------------------------------------------------------------
# "node rejoin" settings
#------------------------------------------------------------------------------

# These settings apply when reintegrating a node into a replication cluster
# with "repmgrd_node_rejoin"

#node_rejoin_timeout=60		# The maximum length of time (in seconds) to wait for
					# the node to reconnect to the replication cluster

#------------------------------------------------------------------------------
# Barman options
#------------------------------------------------------------------------------

#barman_server=''			# The barman configuration section
#barman_host=''				# The host name of the barman server
#barman_config=''			# The Barman configuration file on the
					# Barman server (needed if the file is
					# in a non-standard location)

#------------------------------------------------------------------------------
# Failover and monitoring settings (repmgrd)
#------------------------------------------------------------------------------
#
# These settings are only applied when repmgrd is running. Values shown
# are defaults.

#failover='manual'			# one of 'automatic', 'manual'.
					# determines what action to take in the event of upstream failure
					#
					# 'automatic': repmgrd will automatically attempt to promote the
					#    node or follow the new upstream node
					# 'manual': repmgrd will take no action and the node will require
					#    manual attention to reattach it to replication

#priority=100				# indicates a preferred priority for promoting nodes;
					# a value of zero prevents the node being promoted to primary
					# (default: 100)

#connection_check_type='ping'		# How to check availability of the upstream node; valid options:
					#  'ping': use PQping() to check if the node is accepting connections
					#  'connection': attempt to make a new connection to the node
					#  'query': execute an SQL statement on the node via the existing connection
#reconnect_attempts=6			# Number of attempts which will be made to reconnect to an unreachable
					# primary (or other upstream node)
#reconnect_interval=10			# Interval between attempts to reconnect to an unreachable
					# primary (or other upstream node)
#promote_command=''			# command repmgrd executes when promoting a new primary; use something like:
					#
					#     repmgr standby promote -f /etc/repmgr.conf
					#
#follow_command=''			# command repmgrd executes when instructing a standby to follow a new primary;
					# use something like:
					#
					#     repmgr standby follow -f /etc/repmgr.conf --upstream-node-id=%n
					#
#primary_notification_timeout=60	# Interval (in seconds) which repmgrd on a standby
					# will wait for a notification from the new primary,
					# before falling back to degraded monitoring
#repmgrd_standby_startup_timeout=60	# Interval (in seconds) which repmgrd on a standby will wait
					# for the the local node to restart and become ready to accept connections after
					# executing "follow_command" (defaults to the value set in "standby_reconnect_timeout")

#monitoring_history=no			# Whether to write monitoring data to the "monitoring_history" table
#monitor_interval_secs=2		# Interval (in seconds) at which to write monitoring data
#degraded_monitoring_timeout=-1		# Interval (in seconds) after which repmgrd will terminate if the
					# server(s) being monitored are no longer available. -1 (default)
					# disables the timeout completely.
#async_query_timeout=60			# Interval (in seconds) which repmgrd will wait before
					# cancelling an asynchronous query.
#repmgrd_pid_file=			# Path of PID file to use for repmgrd; if not set, a PID file will
					# be generated in a temporary directory specified by the environment
					# variable $TMPDIR, or if not set, in "/tmp". This value can be overridden
					# by the command line option "-p/--pid-file"; the command line option
					# "--no-pid-file" will force PID file creation to be skipped.
					# Note: there is normally no need to set this, particularly if
					# repmgr was installed from packages.
#repmgrd_exit_on_inactive_node=false	# If "true", and the node record is marked as "inactive", abort repmgrd startup
#standby_disconnect_on_failover=false	# If "true", in a failover situation wait for all standbys to
					# disconnect their WAL receivers before electing a new primary
					# Can be true in PostgreSQL 9.5 and later only. Until PostgreSQL 14 repmgr user must be a superuser to use this.
					# From PostgreSQL 15 repmgr must be a superuser or have 'ALTER SYSTEM wal_retrieve_retry_interval' privilege.
					# (see: https://repmgr.org/docs/current/repmgrd-standby-disconnection-on-failover.html )
#sibling_nodes_disconnect_timeout=30	# If "standby_disconnect_on_failover" is true, the maximum length of time
					# (in seconds) to wait for other standbys to confirm they have disconnected their
					# WAL receivers
#primary_visibility_consensus=false	# If "true", only continue with failover if no standbys have seen
					# the primary node recently. *Must* be the same on all nodes.
#always_promote=false			# Always promote a node, even if repmgr metadata is outdated
#failover_validation_command=''	# Script to execute for an external mechanism to validate the failover
					# decision made by repmgrd. Each of the following parameter placeholders
					# should be provided, which will be replaced by repmgrd with the appropriate value:
					#   %n (node_id)
					#   %a (node_name)
					#   %v (number of visible nodes)
					#   %u (number of shared upstream nodes)
					#   %t (total number of nodes)
					# *Must* be the same on all nodes.
#election_rerun_interval=15		# if "failover_validation_command" is set, and the command returns
					# an error, pause the specified amount of seconds before rerunning the election.

# The following items are relevant for repmgrd running on the primary,
# and will be ignored on non-primary nodes.
# (see: https://repmgr.org/docs/current/repmgrd-primary-child-disconnection.html )

#child_nodes_check_interval=5		# Interval (in seconds) to check for attached child nodes (standbys)
#child_nodes_connected_min_count=-1	# Minimum number of child nodes which must remain connected, otherwise
					# disconnection command will be triggered
#child_nodes_disconnect_min_count=-1	# Minimum number of disconnected child nodes required to execute disconnection command
					# (ignored if "child_nodes_connected_min_count" set)
#child_nodes_disconnect_timeout=30	# Interval between child node disconnection and disconnection command execution
#child_nodes_disconnect_command=''	# Command to execute if child node disconnection detected
#child_nodes_connected_include_witness=false	# Whether to count the witness node (if in use) as a child node when determining whether to execute child_nodes_disconnect_command.

#------------------------------------------------------------------------------
# service control commands
#------------------------------------------------------------------------------
#
# repmgr provides options to override the default pg_ctl commands
# used to stop, start, restart, reload and promote the PostgreSQL cluster
#
# These options are useful when PostgreSQL has been installed from a package
# which provides OS-level service commands. In environments using an init system
# such as systemd, which keeps track of the state of various services, it is
# essential that the service commands are correctly configured and pg_ctl is
# not executed directly.
#
# NOTE: These commands must be runnable on remote nodes as well for switchover
# to function correctly.
#
# If you use sudo, the user repmgr runs as (usually 'postgres')	 must have
# passwordless sudo access to execute the command.
#
# For example, to use systemd, you can set
#
#    service_start_command = 'sudo systemctl start postgresql-16'
#    (...)
#
# and then use the following sudoers configuration:
#
#    # this is required when running sudo over ssh without -t:
#    Defaults:postgres !requiretty
#    postgres ALL = NOPASSWD: /usr/bin/systemctl stop postgresql-16, \
#        /usr/bin/systemctl start postgresql-16, \
#        /usr/bin/systemctl restart postgresql-16
#
# Debian/Ubuntu users: use "sudo pg_ctlcluster" to execute service control commands.
#
# For further details, see: https://repmgr.org/docs/current/configuration-file-service-commands.html

#service_start_command = ''
#service_stop_command = ''
#service_restart_command = ''
#service_reload_command = ''
#service_promote_command = ''		# This parameter is intended for systems which provide a
					# package-level promote command, such as Debian's
					# "pg_ctlcluster". *IMPORTANT*: it is *not* a substitute
					# for "promote_command"; do not use "repmgr standby promote"
					# (or a script which executes "repmgr standby promote") here.

# Used by "repmgr service (start|stop)" to control repmgrd
#
#repmgrd_service_start_command = ''
#repmgrd_service_stop_command = ''

#------------------------------------------------------------------------------
# Status check thresholds
#------------------------------------------------------------------------------

# Various warning/critical thresholds used by "repmgr node check".

#archive_ready_warning=16		# repmgr node check --archive-ready
#archive_ready_critical=128		#
					# Numbers of files pending archiving via PostgreSQL's
					# "archive_command" configuration parameter. If
					# files can't be archived fast enough, or the archive
					# command is failing, the buildup of files can
					# cause various issues, such as server shutdown being
					# delayed until all files are archived, or excessive
					# space being occupied by unarchived files.
					#
					# Note that these values will be checked when executing
					# "repmgr standby switchover" to warn about potential
					# issues with shutting down the demotion candidate.

#replication_lag_warning=300		# repmgr node check --replication-lag
#replication_lag_critical=600		#
					# Note that these values will be checked when executing
					# "repmgr standby switchover" to warn about potential
					# issues with shutting down the demotion candidate.

