@@ -254,6 +254,21 @@ def _collect_special_files(self):
254254
255255return result
256256
257+ def _create_replication_slot (self ,slot_name ,dbname = None ,username = None ):
258+ """
259+ Create a physical replication slot.
260+
261+ Args:
262+ slot_name: slot name
263+ dbname: database name
264+ username: database user name
265+ """
266+ query = (
267+ "select pg_create_physical_replication_slot('{}')"
268+ ).format (slot_name )
269+
270+ self .execute (query = query ,dbname = dbname ,username = username )
271+
257272def init (self ,initdb_params = None ,** kwargs ):
258273"""
259274 Perform initdb for this node.
@@ -344,14 +359,11 @@ def get_auth_method(t):
344359conf .write (u"fsync = off\n " )
345360
346361# yapf: disable
347- conf .write (
348- u"log_statement = {}\n "
349- u"listen_addresses = '{}'\n "
350- u"port = {}\n "
351- u"max_replication_slots = {}\n " .format (log_statement ,
352- self .host ,
353- self .port ,
354- REPLICATION_SLOTS ))
362+ conf .write (u"log_statement = {}\n "
363+ u"listen_addresses = '{}'\n "
364+ u"port = {}\n " .format (log_statement ,
365+ self .host ,
366+ self .port ))
355367
356368# replication-related settings
357369if allow_streaming :
@@ -367,8 +379,10 @@ def get_auth_method(t):
367379wal_keep_segments = 20 # for convenience
368380conf .write (u"hot_standby = on\n "
369381u"max_wal_senders = {}\n "
382+ u"max_replication_slots = {}\n "
370383u"wal_keep_segments = {}\n "
371384u"wal_level = {}\n " .format (max_wal_senders ,
385+ REPLICATION_SLOTS ,
372386wal_keep_segments ,
373387wal_level ))
374388
@@ -863,23 +877,6 @@ def backup(self, **kwargs):
863877
864878return NodeBackup (node = self ,** kwargs )
865879
866- def create_replication_slot (self ,slot_name ,dbname = None ,username = None ):
867- """
868- Create a physical replication slot.
869-
870- Args:
871- slot_name: slot name
872- dbname: database name
873- username: database user name
874- """
875- query = (
876- "select pg_create_physical_replication_slot('{}')"
877- ).format (slot_name )
878-
879- self .execute (query = query ,
880- dbname = dbname or default_dbname (),
881- username = username or default_username ())
882-
883880def replicate (self ,name = None ,slot_name = None ,** kwargs ):
884881"""
885882 Create a binary replica of this node.
@@ -891,6 +888,9 @@ def replicate(self, name=None, slot_name=None, **kwargs):
891888 base_dir: the base directory for data files and logs
892889 """
893890
891+ if slot_name :
892+ self ._create_replication_slot (slot_name ,** kwargs )
893+
894894backup = self .backup (** kwargs )
895895
896896# transform backup into a replica