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 7f08fbef9b80>
_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 7f08fbef9fa0>
__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_line ( record : Dict [ str , Any ] ) str | None View on GitHub
_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 the primary_conninfo .

Returns :

a tuple with two elements:

  • CaseInsensitiveDict object with current values of recovery parameters, or None 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 set pending_restart to true as an indicator that current values of parameters are not matching expectations.

format_dsn ( params : Dict [ str , Any ] , include_dbname : bool = False ) str View on GitHub
get ( key : str , default : Any | None = None ) Any | None View on GitHub
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 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
reload_config ( config : Dict [ str , Any ] , sighup : bool = False ) None 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 in postgresql 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 the postgresql 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 as conn_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 and postgresql.use_unix_socket and/or postgresql.use_unix_socket_repl are set to True , 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 a host in connection parameters relying on the ability of libpq to connect via some default unix socket directory.

If unix sockets are not requested we "switch" to TCP, prefering 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 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
write_postgresql_conf ( configuration : CaseInsensitiveDict | None = None ) None View on GitHub
write_recovery_conf ( recovery_params : CaseInsensitiveDict ) None View on GitHub
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_parse ( dsn : str ) Dict [ str , str ] | None View on GitHub
patroni.postgresql.config. conninfo_uri_parse ( dsn : str ) Dict [ str , str ] View on GitHub
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 is one minor difference though, this function removes dbname from the result and sets the sslmode , ‘gssencmode’, and channel_binding to prefer if it is 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', 'host': ',::1', 'sslmode': 'require',              'password': 'pass', 'port': '/123,', 'user': 'u/se', 'gssencmode': 'prefer', 'channel_binding': 'prefer'}
True
>>> r = parse_dsn(" host = 'host' dbname = db\\ name requiressl=1 ")
>>> r == {'host': 'host', 'sslmode': 'require', 'gssencmode': 'prefer', 'channel_binding': 'prefer'}
True
>>> parse_dsn('requiressl = 0\\') == {'sslmode': 'prefer', 'gssencmode': 'prefer', 'channel_binding': 'prefer'}
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