github.com/matthieudolci/hatcher@v0.2.8/database/sql.go (about) 1 package database 2 3 import ( 4 "database/sql" 5 "fmt" 6 "os" 7 8 _ "github.com/lib/pq" 9 "github.com/pkg/errors" 10 ) 11 12 var DB *sql.DB 13 14 const ( 15 dbhost = "DBHOST" 16 dbport = "DBPORT" 17 dbuser = "DBUSER" 18 dbpass = "DBPASS" 19 dbname = "DBNAME" 20 ) 21 22 func InitDb() { 23 config := dbConfig() 24 var err error 25 psqlInfo := fmt.Sprintf("host=%s port=%s user=%s "+ 26 "password=%s dbname=%s sslmode=disable", 27 config[dbhost], config[dbport], 28 config[dbuser], config[dbpass], config[dbname]) 29 30 if DB, err = sql.Open("postgres", psqlInfo); err != nil { 31 err = errors.Wrapf(err, 32 "Couldn't open connection to postgres database") 33 return 34 } 35 36 if err = DB.Ping(); err != nil { 37 err = errors.Wrapf(err, 38 "Couldn't ping postgres database") 39 return 40 } 41 fmt.Println("Successfully connected to the postgres database!") 42 } 43 44 func dbConfig() map[string]string { 45 conf := make(map[string]string) 46 host, ok := os.LookupEnv(dbhost) 47 if !ok { 48 panic("DB_HOST environment variable required but not set") 49 } 50 port, ok := os.LookupEnv(dbport) 51 if !ok { 52 panic("DB_PORT environment variable required but not set") 53 } 54 user, ok := os.LookupEnv(dbuser) 55 if !ok { 56 panic("DB_USER environment variable required but not set") 57 } 58 password, ok := os.LookupEnv(dbpass) 59 if !ok { 60 panic("DB_PASSWORD environment variable required but not set") 61 } 62 name, ok := os.LookupEnv(dbname) 63 if !ok { 64 panic("DB_NAME environment variable required but not set") 65 } 66 conf[dbhost] = host 67 conf[dbport] = port 68 conf[dbuser] = user 69 conf[dbpass] = password 70 conf[dbname] = name 71 return conf 72 }