/
main.go
115 lines (98 loc) · 2.35 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package main
import (
"io/ioutil"
"log"
"github.com/cashwagon/go-pgx"
"gopkg.in/yaml.v2"
)
type Config = struct {
DBName string `yaml:"db_name"`
User string `yaml:"user"`
Password string `yaml:"password"`
Host string `yaml:"host"`
Port uint `yaml:"port"`
SSLMode string `yaml:"ssl_mode"`
ConnectTimeout int `yaml:"connect_timeout"`
SSLCert string `yaml:"ssl_cert"`
SSLKey string `yaml:"ssl_key"`
SSLRootCert string `yaml:"ssl_root_cert"`
}
func main() {
options, err := loadOptions("config/config.yaml")
if err != nil {
log.Fatal(err)
}
log.Println("Creating database...")
err = pgx.Create(options)
if err != nil {
log.Fatal(err)
}
log.Println("Migrating database...")
err = pgx.MigrateUp(options, "db/migrations")
if err != nil {
log.Fatal(err)
}
log.Println("Seeding database...")
err = pgx.SeedUp(options, "db/seeds")
if err != nil {
log.Fatal(err)
}
log.Println("Connecting to database...")
db, err := pgx.Connect(options)
if err != nil {
log.Fatal(err)
}
log.Println("Fetching users count...")
var usersCount int
err = db.Get(&usersCount, "SELECT count(*) FROM users")
if err != nil {
log.Fatal(err)
}
log.Printf("Users count: %d\n", usersCount)
log.Println("Closing database...")
err = db.Close()
if err != nil {
log.Fatal(err)
}
log.Printf("Rollback seeds...")
err = pgx.SeedDown(options, "db/seeds")
if err != nil {
log.Fatal(err)
}
log.Printf("Rollback migrations...")
err = pgx.MigrateDown(options, "db/migrations")
if err != nil {
log.Fatal(err)
}
log.Printf("Dropping database...")
err = pgx.Drop(options)
if err != nil {
log.Fatal(err)
}
}
func loadOptions(filePath string) (*pgx.Options, error) {
cfgFile, err := ioutil.ReadFile(filePath)
if err != nil {
return nil, err
}
var config Config
err = yaml.Unmarshal(cfgFile, &config)
if err != nil {
return nil, err
}
return &pgx.Options{
DBName: config.DBName,
User: config.User,
Password: config.Password,
Host: config.Host,
Port: config.Port,
SSLMode: config.SSLMode,
ConnectTimeout: config.ConnectTimeout,
SSLCert: config.SSLCert,
SSLKey: config.SSLKey,
SSLRootCert: config.SSLRootCert,
ConnMaxLifetime: 0,
MaxOpenConns: 1,
MaxIdleConns: 0,
}, nil
}