@@ -8,11 +8,15 @@ import (
8
8
"os/exec"
9
9
"path/filepath"
10
10
"runtime"
11
+ "strconv"
12
+ "strings"
11
13
12
14
"github.com/coder/coder/coderd/database/migrations"
13
15
"github.com/coder/coder/coderd/database/postgres"
14
16
)
15
17
18
+ const minimumPostgreSQLVersion = 13
19
+
16
20
func main () {
17
21
connection , closeFn , err := postgres .Open ()
18
22
if err != nil {
@@ -30,12 +34,23 @@ func main() {
30
34
panic (err )
31
35
}
32
36
33
- cmd := exec .Command (
34
- "docker" ,
35
- "run" ,
36
- "--rm" ,
37
- "--network=host" ,
38
- "postgres:13" ,
37
+ hasPGDump := false
38
+ if _ , err = exec .LookPath ("pg_dump" ); err == nil {
39
+ out , err := exec .Command ("pg_dump" , "--version" ).Output ()
40
+ if err == nil {
41
+ // Parse output:
42
+ // pg_dump (PostgreSQL) 14.5 (Ubuntu 14.5-0ubuntu0.22.04.1)
43
+ parts := strings .Split (string (out ), " " )
44
+ if len (parts ) > 2 {
45
+ version , err := strconv .Atoi (strings .Split (parts [2 ], "." )[0 ])
46
+ if err == nil && version >= minimumPostgreSQLVersion {
47
+ hasPGDump = true
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ cmdArgs := []string {
39
54
"pg_dump" ,
40
55
"--schema-only" ,
41
56
connection ,
@@ -45,8 +60,18 @@ func main() {
45
60
// We never want to manually generate
46
61
// queries executing against this table.
47
62
"--exclude-table=schema_migrations" ,
48
- )
63
+ }
49
64
65
+ if ! hasPGDump {
66
+ cmdArgs = append ([]string {
67
+ "docker" ,
68
+ "run" ,
69
+ "--rm" ,
70
+ "--network=host" ,
71
+ fmt .Sprintf ("postgres:%d" , minimumPostgreSQLVersion ),
72
+ }, cmdArgs ... )
73
+ }
74
+ cmd := exec .Command (cmdArgs [0 ], cmdArgs [1 :]... ) //#nosec
50
75
cmd .Env = append (os .Environ (), []string {
51
76
"PGTZ=UTC" ,
52
77
"PGCLIENTENCODING=UTF8" ,
0 commit comments