diff --git a/patroni/postgresql.py b/patroni/postgresql.py index fba9a22e..5ea2b97c 100644 --- a/patroni/postgresql.py +++ b/patroni/postgresql.py @@ -342,13 +342,13 @@ class Postgresql: ret and not block_callbacks and self.call_nowait(ACTION_ON_START) return ret - def checkpoint(self): + def checkpoint(self, connstring=None): try: - r = parseurl('postgres://{}/postgres'.format(self.local_address)) - r['options'] = '-c statement_timeout=0' - with psycopg2.connect(**r) as conn: + connstring = connstring or 'postgres://{}/postgres'.format(self.local_address) + with psycopg2.connect(connstring) as conn: conn.autocommit = True with conn.cursor() as cur: + cur.execute("SET statement_timeout = 0") cur.execute('CHECKPOINT') except: logging.exception('Exception during CHECKPOINT') @@ -454,6 +454,9 @@ recovery_target_timeline = 'latest' r['user'] = r['username'] env = self.write_pgpass(r) pc = "user={user} host={host} port={port} dbname=postgres sslmode=prefer sslcompression=1".format(**r) + # first run a checkpoint on a promoted master in order + # to make it store the new timeline (5540277D.8020309@iki.fi) + self.checkpoint(pc) logger.info("running pg_rewind from {}".format(pc)) pg_rewind = ['pg_rewind', '-D', self.data_dir, '--source-server', pc] try: diff --git a/postgres0.yml b/postgres0.yml index 84c74acd..36018ad5 100644 --- a/postgres0.yml +++ b/postgres0.yml @@ -82,10 +82,12 @@ postgresql: #use_iam: 1 #recovery_conf: #restore_command: envdir /etc/wal-e.d/env wal-e wal-fetch "%f" "%p" -p 1 + recovery_conf: + restore_command: cp ../wal_archive/%f %p parameters: archive_mode: "on" wal_level: hot_standby - archive_command: mkdir -p ../wal_archive && cp %p ../wal_archive/%f + archive_command: mkdir -p ../wal_archive && test ! -f ../wal_archive/%f && cp %p ../wal_archive/%f max_wal_senders: 5 wal_keep_segments: 8 archive_timeout: 1800s diff --git a/postgres1.yml b/postgres1.yml index 32919843..e1b61b3b 100644 --- a/postgres1.yml +++ b/postgres1.yml @@ -82,10 +82,12 @@ postgresql: #use_iam: 1 #recovery_conf: #restore_command: envdir /etc/wal-e.d/env wal-e wal-fetch "%f" "%p" -p 1 + recovery_conf: + restore_command: cp ../wal_archive/%f %p parameters: archive_mode: "on" wal_level: hot_standby - archive_command: mkdir -p ../wal_archive && cp %p ../wal_archive/%f + archive_command: mkdir -p ../wal_archive && test ! -f ../wal_archive/%f && cp %p ../wal_archive/%f max_wal_senders: 5 wal_keep_segments: 8 archive_timeout: 1800s