diff --git a/patroni/api.py b/patroni/api.py index b09d4185..eb410c91 100644 --- a/patroni/api.py +++ b/patroni/api.py @@ -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, diff --git a/patroni/postgresql.py b/patroni/postgresql.py index 7264d371..852faa8b 100644 --- a/patroni/postgresql.py +++ b/patroni/postgresql.py @@ -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():