From e2be689a05528893060a5b86cf2bb9c96c4edfae Mon Sep 17 00:00:00 2001 From: Dan Sosedoff Date: Wed, 25 Apr 2018 23:29:18 -0500 Subject: [PATCH] Check if pg_dump is available before running database export --- pkg/api/api.go | 7 +++++++ pkg/client/dump.go | 5 +++++ pkg/client/dump_test.go | 6 +++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/api/api.go b/pkg/api/api.go index ab0f435..dd4017e 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -472,6 +472,13 @@ func DataExport(c *gin.Context) { Table: strings.TrimSpace(c.Request.FormValue("table")), } + // If pg_dump is not available the following code will not show an error in browser. + // This is due to the headers being written first. + if !dump.CanExport() { + c.JSON(400, Error{"pg_dump is not found"}) + return + } + formattedInfo := info.Format()[0] filename := formattedInfo["current_database"].(string) if dump.Table != "" { diff --git a/pkg/client/dump.go b/pkg/client/dump.go index c9bae40..68a3aaa 100644 --- a/pkg/client/dump.go +++ b/pkg/client/dump.go @@ -11,6 +11,11 @@ type Dump struct { Table string } +func (d *Dump) CanExport() bool { + err := exec.Command("pg_dump", "--version").Run() + return err == nil +} + func (d *Dump) Export(url string, writer io.Writer) error { errOutput := bytes.NewBuffer(nil) diff --git a/pkg/client/dump_test.go b/pkg/client/dump_test.go index 95d1c3a..67c2a13 100644 --- a/pkg/client/dump_test.go +++ b/pkg/client/dump_test.go @@ -24,8 +24,12 @@ func test_DumpExport(t *testing.T) { os.Remove(savePath) }() - // Test full db dump dump := Dump{} + + // Test for pg_dump presence + assert.True(t, dump.CanExport()) + + // Test full db dump err = dump.Export(url, saveFile) assert.NoError(t, err)