diff --git a/replication.go b/replication.go index 7dd5efe4..8e3a33bf 100644 --- a/replication.go +++ b/replication.go @@ -4,6 +4,7 @@ import ( "context" "encoding/binary" "fmt" + "strings" "time" "github.com/pkg/errors" @@ -401,15 +402,14 @@ func (rc *ReplicationConn) TimelineHistory(timeline int) (r *Rows, err error) { // This function assumes that slotName has already been created. In order to omit the timeline argument // pass a -1 for the timeline to get the server default behavior. func (rc *ReplicationConn) StartReplication(slotName string, startLsn uint64, timeline int64, pluginArguments ...string) (err error) { - var queryString string + queryString := fmt.Sprintf("START_REPLICATION SLOT %s LOGICAL %s", slotName, FormatLSN(startLsn)) if timeline >= 0 { - queryString = fmt.Sprintf("START_REPLICATION SLOT %s LOGICAL %s TIMELINE %d", slotName, FormatLSN(startLsn), timeline) - } else { - queryString = fmt.Sprintf("START_REPLICATION SLOT %s LOGICAL %s", slotName, FormatLSN(startLsn)) + timelineOption := fmt.Sprintf("TIMELINE %d", timeline) + pluginArguments = append(pluginArguments, timelineOption) } - for _, arg := range pluginArguments { - queryString += fmt.Sprintf(" %s", arg) + if len(pluginArguments) > 0 { + queryString += fmt.Sprintf(" ( %s )", strings.Join(pluginArguments, ", ")) } if err = rc.c.sendQuery(queryString); err != nil {