Write all postgres parameters into postgresql.conf (#323)

It will make possible to start postgres easily with pg_ctl (without
Patroni). Previously if you tried to start such postgres manually
it was usually failing because some of the parameters does not much
with values written into xlog (for example max_connections).
This commit is contained in:
Alexander Kukushkin
2016-09-27 16:25:53 +02:00
committed by GitHub
parent 67c4b6b105
commit bb07076343
2 changed files with 8 additions and 6 deletions
+2 -1
View File
@@ -381,7 +381,8 @@ class RestApiHandler(BaseHTTPRequestHandler):
pg_xlog_location_diff(pg_last_xlog_replay_location(), '0/0')::bigint,
to_char(pg_last_xact_replay_timestamp(), 'YYYY-MM-DD HH24:MI:SS.MS TZ'),
pg_is_in_recovery() AND pg_is_xlog_replay_paused(),
(SELECT json_agg(row_to_json(ri)) FROM replication_info ri)""", retry=retry)[0]
(SELECT array_to_json(array_agg(row_to_json(ri))) FROM replication_info ri)""",
retry=retry)[0]
result = {
'state': self.server.patroni.postgresql.state,
+6 -5
View File
@@ -80,6 +80,9 @@ class Postgresql(object):
self._database = config.get('database', 'postgres')
self._data_dir = config['data_dir']
self._pending_restart = False
self._version_file = os.path.join(self._data_dir, 'PG_VERSION')
self._major_version = self.get_major_version()
self._server_parameters = self.get_server_parameters(config)
self._connect_address = config.get('connect_address')
@@ -89,8 +92,6 @@ class Postgresql(object):
self._need_rewind = False
self._use_slots = config.get('use_slots', True)
self._version_file = os.path.join(self._data_dir, 'PG_VERSION')
self._major_version = self.get_major_version()
self._schedule_load_slots = self.use_slots
self._pgpass = config.get('pgpass') or os.path.join(os.path.expanduser('~'), 'pgpass')
@@ -154,7 +155,8 @@ class Postgresql(object):
parameters = config['parameters'].copy()
listen_addresses, port = (config['listen'] + ':5432').split(':')[:2]
parameters.update({'cluster_name': self.scope, 'listen_addresses': listen_addresses, 'port': port})
return parameters
return {k: v for k, v in parameters.items() if not self._major_version or
self._major_version >= self.CMDLINE_OPTIONS.get(k, (0, 1, 9.1))[2]}
def resolve_connection_addresses(self):
self._local_address = self.get_local_address()
@@ -647,8 +649,7 @@ class Postgresql(object):
f.write('# Do not edit this file manually!\n# It will be overwritten by Patroni!\n')
f.write("include '{0}'\n\n".format(self.config.get('custom_conf') or self._postgresql_base_conf_name))
for name, value in sorted(self._server_parameters.items()):
if name not in self.CMDLINE_OPTIONS:
f.write("{0} = '{1}'\n".format(name, value))
f.write("{0} = '{1}'\n".format(name, value))
def is_healthy(self):
if not self.is_running():