@@ -254,6 +254,21 @@ def _collect_special_files(self):
254254
255255 return 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+
257272 def init (self , initdb_params = None , ** kwargs ):
258273 """
259274 Perform initdb for this node.
@@ -344,14 +359,11 @@ def get_auth_method(t):
344359 conf .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
357369 if allow_streaming :
@@ -367,8 +379,10 @@ def get_auth_method(t):
367379 wal_keep_segments = 20 # for convenience
368380 conf .write (u"hot_standby = on\n "
369381 u"max_wal_senders = {}\n "
382+ u"max_replication_slots = {}\n "
370383 u"wal_keep_segments = {}\n "
371384 u"wal_level = {}\n " .format (max_wal_senders ,
385+ REPLICATION_SLOTS ,
372386 wal_keep_segments ,
373387 wal_level ))
374388
@@ -863,23 +877,6 @@ def backup(self, **kwargs):
863877
864878 return 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-
883880 def 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+
894894 backup = self .backup (** kwargs )
895895
896896 # transform backup into a replica
0 commit comments