Skip to content

Commit

Permalink
get pg version revisited
Browse files Browse the repository at this point in the history
  • Loading branch information
vynaloze committed May 22, 2019
1 parent 18b6bf0 commit c6a3c39
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 26 deletions.
9 changes: 3 additions & 6 deletions stat_wal_receiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package pgstats
import (
"database/sql"
"github.com/lib/pq"
"github.com/pkg/errors"
)

// PgStatWalReceiverView represents content of pg_stat_wal_receiver view
Expand Down Expand Up @@ -49,13 +48,11 @@ func (s *PgStats) fetchWalReceiver() (PgStatWalReceiverView, error) {
if err != nil {
return PgStatWalReceiverView{}, err
}
switch version {
case "11":
return s.fetchWalReceiver11()
case "10":
if version < 11 {
return s.fetchWalReceiver10()
} else {
return s.fetchWalReceiver11()
}
return PgStatWalReceiverView{}, errors.New("Unsupported PG version " + version)
}

func (s *PgStats) fetchWalReceiver11() (PgStatWalReceiverView, error) {
Expand Down
28 changes: 16 additions & 12 deletions version.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,32 @@ package pgstats
import (
"github.com/pkg/errors"
"regexp"
"strconv"
)

func (s *PgStats) getPgVersion() (string, error) {
func (s *PgStats) getPgVersion() (float64, error) {
db := s.conn.db
query := "show server_version;"
row := db.QueryRow(query)
version := new(string)
err := row.Scan(&version)
if err != nil {
return "", err
}
v := extractMajorVersion(*version)
if v == "" {
err = errors.New("Regex error")
if err := row.Scan(&version); err != nil {
return 0, err
}
return v, err
return extractMajorVersion(*version)
}

func extractMajorVersion(fullVersion string) string {
func extractMajorVersion(fullVersion string) (float64, error) {
r, err := regexp.Compile(`(^9\.\d)|(^\d\d)`)
if err != nil {
return ""
return 0, errors.New("Regex compile error")
}
strv := r.FindString(fullVersion)
if strv == "" {
return 0, errors.New("Regex parse error")
}
version, err := strconv.ParseFloat(strv, 64)
if err != nil {
return 0, err
}
return r.FindString(fullVersion)
return version, nil
}
19 changes: 11 additions & 8 deletions version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,23 @@ import "testing"

var versionTests = []struct {
input string
output string
output float64
}{
{"11.3", "11"},
{"10.12", "10"},
{"9.6.13", "9.6"},
{"9.5.17", "9.5"},
{"9.4.22", "9.4"},
{"11.3", 11},
{"10.12", 10},
{"9.6.13", 9.6},
{"9.5.17", 9.5},
{"9.4.22", 9.4},
}

func TestExtractMajorVersion(t *testing.T) {
for _, tt := range versionTests {
actual := extractMajorVersion(tt.input)
actual, err := extractMajorVersion(tt.input)
if err != nil {
t.Error(err)
}
if actual != tt.output {
t.Errorf("Expected '%s'; actual '%s'", tt.output, actual)
t.Errorf("Expected '%f'; actual '%f'", tt.output, actual)
}
}
}

0 comments on commit c6a3c39

Please sign in to comment.