From cba88a4b7d0b6a614b6a1de5f1f7477922961393 Mon Sep 17 00:00:00 2001 From: steampunkcoder Date: Mon, 5 Feb 2018 10:36:43 -0800 Subject: [PATCH] Fix syntax error in replication protocol message issued by StartReplication() According to https://www.postgresql.org/docs/9.6/static/protocol-replication.html pluginArguments should be separated by commas and surrounded by parantheses. --- replication.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 {