- class patroni.postgresql.config. ConfigHandler ( postgresql : Postgresql , config : Dict [ str , Any ] ) View on GitHub
-
Bases:
object
-
CMDLINE_OPTIONS
=
(None, _false_validator>, 90100), 'port': (None, _false_validator>, 90100), 'cluster_name': (None, _false_validator>, 90500), 'wal_level': ('hot_standby', object>, 90100), 'hot_standby': ('on', _bool_is_true_validator>, 90100), 'max_connections': (100, object>, 90100), 'max_wal_senders': (10, object>, 90100), 'wal_keep_segments': (8, object>, 90100), 'wal_keep_size': ('128MB', object>, 130000), 'max_prepared_transactions': (0, object>, 90100), 'max_locks_per_transaction': (64, object>, 90100), 'track_commit_timestamp': ('off', _bool_validator>, 90500), 'max_replication_slots': (10, object>, 90400), 'max_worker_processes': (8, object>, 90400), 'wal_log_hints': ('on', _bool_is_true_validator>, 90400)} at 7f5c900c87f0>
-
_RECOVERY_PARAMETERS
=
'pause_at_recovery_target', 'primary_conninfo', 'primary_slot_name', 'promote_trigger_file', 'recovery_end_command', 'recovery_min_apply_delay', 'recovery_target', 'recovery_target_action', 'recovery_target_inclusive', 'recovery_target_lsn', 'recovery_target_name', 'recovery_target_time', 'recovery_target_timeline', 'recovery_target_xid', 'restore_command', 'standby_mode', 'trigger_file') at 7f5c900c8820>
- __init__ ( postgresql : Postgresql , config : Dict [ str , Any ] ) None View on GitHub
- _adjust_recovery_parameters ( ) None View on GitHub
- _check_passfile ( passfile : str , wanted_primary_conninfo : Dict [ str , Any ] ) bool View on GitHub
- _check_primary_conninfo ( primary_conninfo : Dict [ str , Any ] , wanted_primary_conninfo : Dict [ str , Any ] ) bool View on GitHub
- property _configuration_to_save : List [ str ] View on GitHub
- _get_pg_settings ( names : Collection [ str ] ) Dict [ Any , Tuple [ Any , ... ] ] View on GitHub
- _get_tcp_local_address ( ) str View on GitHub
- static _get_unix_local_address ( unix_socket_directories : str ) str View on GitHub
- static _handle_wal_buffers ( old_values : Dict [ Any , Tuple [ Any , ... ] ] , changes : CaseInsensitiveDict ) None View on GitHub
- static _pgpass_content ( record : Dict [ str , Any ] ) str | None View on GitHub
-
Generate content of
pgpassfile
based on connection parameters.Note
In case if
host
is a comma separated string we generate one line per host.- Parameters :
-
record –
dict
object with connection parameters. - Returns :
-
a string with generated content of pgpassfile or
None
if there is nopassword
.
- _read_recovery_params ( ) Tuple [ CaseInsensitiveDict | None , bool ] View on GitHub
-
Read current recovery parameters values.
Note
We query Postgres only if we detected that Postgresql was restarted or when at least one of the following files was updated:
-
postgresql.conf
; -
postgresql.auto.conf
; -
passfile
that is used in theprimary_conninfo
.
- Returns :
-
a tuple with two elements:
-
CaseInsensitiveDict
object with current values of recovery parameters, orNone
if no configuration files were updated; -
True
if new values of recovery parameters were queried,False
otherwise.
-
-
- _read_recovery_params_pre_v12 ( ) Tuple [ CaseInsensitiveDict | None , bool ] View on GitHub
- property _recovery_parameters_to_compare : CaseInsensitiveSet View on GitHub
- static _remove_file_if_exists ( name : str ) None View on GitHub
- _sanitize_auto_conf ( ) None View on GitHub
- property _triggerfile_wrong_name : str View on GitHub
- _write_recovery_params ( fd : ConfigWriter , recovery_params : CaseInsensitiveDict ) None View on GitHub
- append_pg_hba ( config : List [ str ] ) bool View on GitHub
- build_recovery_params ( member : Leader | Member | None ) CaseInsensitiveDict View on GitHub
- check_directories ( ) None View on GitHub
- check_recovery_conf ( member : Leader | Member | None ) Tuple [ bool , bool ] View on GitHub
-
Returns a tuple. The first boolean element indicates that recovery params don’t match and the second is set to
True
if the restart is required in order to apply new values
- property config_dir : str View on GitHub
- config_writer ( filename : str ) Iterator [ ConfigWriter ] View on GitHub
-
Create
ConfigWriter
object and set permissions on a filename .- Parameters :
-
filename – path to a config file.
- Yields :
-
ConfigWriter
object.
- property effective_configuration : CaseInsensitiveDict View on GitHub
-
It might happen that the current value of one (or more) below parameters stored in the controldata is higher than the value stored in the global cluster configuration.
Example: max_connections in global configuration is 100, but in controldata
Current max_connections setting: 200
. If we try to start postgres with max_connections=100, it will immediately exit. As a workaround we will start it with the values from controldata and setpending_restart
to true as an indicator that current values of parameters are not matching expectations.
- format_dsn ( params : Dict [ str , Any ] ) str View on GitHub
-
Format connection string from connection parameters.
Note
only parameters from the below list are considered and values are escaped.
- Parameters :
-
params –
dict
object with connection parameters. - Returns :
-
a connection string in a format "key1=value2 key2=value2"
- get_server_parameters ( config : Dict [ str , Any ] ) CaseInsensitiveDict View on GitHub
- property hba_file : str | None View on GitHub
- property ident_file : str | None View on GitHub
- load_current_server_parameters ( ) None View on GitHub
-
Read GUC’s values from
pg_settings
when Patroni is joining the the postgres that is already running.
- property pg_hba_conf : str View on GitHub
- property pg_version : int View on GitHub
-
Current full postgres version if instance is running, major version otherwise.
We can only use
postgres --version
output if major version there equals to the one in data directory. If it is not the case, we should use major version from thePG_VERSION
file.
- property postgresql_conf : str View on GitHub
- primary_conninfo_params ( member : Leader | Member | None ) Dict [ str , Any ] | None View on GitHub
- recovery_conf_exists ( ) bool View on GitHub
- remove_recovery_conf ( ) None View on GitHub
- replace_pg_hba ( ) bool | None View on GitHub
-
Replace pg_hba.conf content in the PGDATA if hba_file is not defined in the
postgresql.parameters
and pg_hba is defined inpostgresql
configuration section.- Returns :
-
True if pg_hba.conf was rewritten.
- replace_pg_ident ( ) bool | None View on GitHub
-
Replace pg_ident.conf content in the PGDATA if ident_file is not defined in the
postgresql.parameters
and pg_ident is defined in thepostgresql
section.- Returns :
-
True if pg_ident.conf was rewritten.
- property replication : Dict [ str , Any ] View on GitHub
- resolve_connection_addresses ( ) None View on GitHub
-
Calculates and sets local and remote connection urls and options.
- This method sets:
-
-
Postgresql.connection_string
attribute, which is later written to the member key in DCS asconn_url
. -
ConfigHandler.local_replication_address
attribute, which is used for replication connections to local postgres. -
ConnectionPool.conn_kwargs
attribute, which is used for superuser connections to local postgres.
-
Note
If there is a valid directory in
postgresql.parameters.unix_socket_directories
in the Patroni configuration andpostgresql.use_unix_socket
and/orpostgresql.use_unix_socket_repl
are set toTrue
, we respectively use unix sockets for superuser and replication connections to local postgres.If there is a requirement to use unix sockets, but nothing is set in the
postgresql.parameters.unix_socket_directories
, we omit ahost
in connection parameters relying on the ability oflibpq
to connect via some default unix socket directory.If unix sockets are not requested we "switch" to TCP, preferring to use
localhost
if it is possible to deduce that Postgres is listening on a local interface address.Otherwise we just used the first address specified in the
listen_addresses
GUC.
- restore_command ( ) str | None View on GitHub
- restore_configuration_files ( ) None View on GitHub
-
restore a previously saved postgresql.conf
- property rewind_credentials : Dict [ str , Any ] View on GitHub
- save_configuration_files ( check_custom_bootstrap : bool = False ) bool View on GitHub
-
copy postgresql.conf to postgresql.conf.backup to be able to retrieve configuration files - originally stored as symlinks, those are normally skipped by pg_basebackup - in case of WAL-E basebackup (see http://comments.gmane.org/gmane.comp.db.postgresql.wal-e/239 )
- set_file_permissions ( filename : str ) None View on GitHub
-
Set permissions of file filename according to the expected permissions if it resides under PGDATA.
Note
Do nothing if the file is not under PGDATA.
- Parameters :
-
filename – path to a file which permissions might need to be adjusted.
- set_synchronous_standby_names ( value : str | None ) bool | None View on GitHub
-
Updates synchronous_standby_names and reloads if necessary. :returns: True if value was updated.
- setup_server_parameters ( ) None View on GitHub
- property superuser : Dict [ str , Any ] View on GitHub
- property synchronous_standby_names : str | None View on GitHub
-
Get
synchronous_standby_names
value configured by the user.- Returns :
-
value of
synchronous_standby_names
in the Patroni configuration, if any, otherwiseNone
.
- property triggerfile_good_name : str View on GitHub
- try_to_create_dir ( d : str , msg : str ) None View on GitHub
- write_pgpass ( record : Dict [ str , Any ] ) Dict [ str , str ] View on GitHub
-
Maybe creates
_passfile
based on connection parameters.- Parameters :
-
record –
dict
object with connection parameters. - Returns :
-
a copy of environment variables, that will include
PGPASSFILE
in case if the file was written.
- write_postgresql_conf ( configuration : CaseInsensitiveDict | None = None ) None View on GitHub
- write_recovery_conf ( recovery_params : CaseInsensitiveDict ) None View on GitHub
-
CMDLINE_OPTIONS
=
- class patroni.postgresql.config. ConfigWriter ( filename : str ) View on GitHub
-
Bases:
object
- __init__ ( filename : str ) None View on GitHub
- static escape ( value : Any ) str View on GitHub
- write_param ( param : str , value : Any ) None View on GitHub
- writeline ( line : str ) None View on GitHub
- writelines ( lines : List [ str | None ] ) None View on GitHub
- patroni.postgresql.config. _bool_is_true_validator ( value : Any ) bool View on GitHub
- patroni.postgresql.config. _bool_validator ( value : Any ) bool View on GitHub
- patroni.postgresql.config. _false_validator ( value : Any ) bool View on GitHub
- patroni.postgresql.config. conninfo_uri_parse ( dsn : str ) Dict [ str , str ] View on GitHub
- patroni.postgresql.config. get_param_diff ( old_value : Any , new_value : Any , vartype : str | None = None , unit : str | None = None ) Dict [ str , str ] View on GitHub
-
Get a dictionary representing a single PG parameter’s value diff.
- Parameters :
-
-
old_value – current
str
parameter value. -
new_value –
str
value of the parameter after a restart. -
vartype – the target type to parse old/new_value. See
vartype
argument ofmaybe_convert_from_base_unit()
. -
unit – unit of old/new_value . See
base_unit
argument ofmaybe_convert_from_base_unit()
.
-
- Returns :
-
a
dict
object that contains two keys:old_value
andnew_value
with their values casted tostr
and converted from base units (if possible).
- patroni.postgresql.config. mtime ( filename : str ) float | None View on GitHub
- patroni.postgresql.config. parse_dsn ( value : str ) Dict [ str , str ] | None View on GitHub
-
Very simple equivalent of
psycopg2.extensions.parse_dsn
introduced in 2.7.0. We are not using psycopg2 function in order to remain compatible with 2.5.4+. There are a few minor differences though, this function sets thesslmode
, ‘gssencmode’, andchannel_binding
toprefer
if they are not present in the connection string. This is necessary to simplify comparison of the old and the new values.>>> r = parse_dsn('postgresql://u%2Fse:pass@:%2f123,[::1]/db%2Fsdf?application_name=mya%2Fpp&ssl=true') >>> r == {'application_name': 'mya/pp', 'dbname': 'db/sdf', 'host': ',::1', 'sslmode': 'require', 'password': 'pass', 'port': '/123,', 'user': 'u/se', 'gssencmode': 'prefer', 'channel_binding': 'prefer', 'sslnegotiation': 'postgres'} True >>> r = parse_dsn(" host = 'host' dbname = db\\ name requiressl=1 ") >>> r == {'dbname': 'db name', 'host': 'host', 'sslmode': 'require', 'gssencmode': 'prefer', 'channel_binding': 'prefer', 'sslnegotiation': 'postgres'} True >>> parse_dsn('requiressl = 0\\') == {'sslmode': 'prefer', 'gssencmode': 'prefer', 'channel_binding': 'prefer', 'sslnegotiation': 'postgres'} True >>> parse_dsn("host=a foo = '") is None True >>> parse_dsn("host=a foo = ") is None True >>> parse_dsn("1") is None True
- patroni.postgresql.config. read_param_value ( value : str ) Tuple [ None , None ] | Tuple [ str , int ] View on GitHub
- patroni.postgresql.config. read_recovery_param_value ( value : str ) str | None View on GitHub
-
>>> read_recovery_param_value('') is None True >>> read_recovery_param_value("'") is None True >>> read_recovery_param_value("''a") is None True >>> read_recovery_param_value('a b') is None True >>> read_recovery_param_value("'''") is None True >>> read_recovery_param_value("'\\") is None True >>> read_recovery_param_value("'a' s#") is None True >>> read_recovery_param_value("'\\'''' #a") "''" >>> read_recovery_param_value('asd') 'asd'
- patroni.postgresql.config. strip_comment ( value : str ) str View on GitHub