@@ -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,24 @@ 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
+ fmt .Fprintln (os .Stderr , "yahhoo" )
40
+ out , err := exec .Command ("pg_dump" , "--version" ).Output ()
41
+ if err == nil {
42
+ // Parse output:
43
+ // pg_dump (PostgreSQL) 14.5 (Ubuntu 14.5-0ubuntu0.22.04.1)
44
+ parts := strings .Split (string (out ), " " )
45
+ if len (parts ) > 2 {
46
+ version , err := strconv .Atoi (strings .Split (parts [2 ], "." )[0 ])
47
+ if err == nil && version >= minimumPostgreSQLVersion {
48
+ hasPGDump = true
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ cmdArgs := []string {
39
55
"pg_dump" ,
40
56
"--schema-only" ,
41
57
connection ,
@@ -45,8 +61,18 @@ func main() {
45
61
// We never want to manually generate
46
62
// queries executing against this table.
47
63
"--exclude-table=schema_migrations" ,
48
- )
64
+ }
49
65
66
+ if ! hasPGDump {
67
+ cmdArgs = append ([]string {
68
+ "docker" ,
69
+ "run" ,
70
+ "--rm" ,
71
+ "--network=host" ,
72
+ fmt .Sprintf ("postgres:%d" , minimumPostgreSQLVersion ),
73
+ }, cmdArgs ... )
74
+ }
75
+ cmd := exec .Command (cmdArgs [0 ], cmdArgs [1 :]... ) //#nosec
50
76
cmd .Env = append (os .Environ (), []string {
51
77
"PGTZ=UTC" ,
52
78
"PGCLIENTENCODING=UTF8" ,
0 commit comments