50 lines
1.0 KiB
Go
50 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/jmoiron/sqlx"
|
|
_ "github.com/lib/pq"
|
|
"os"
|
|
)
|
|
|
|
func envMustExist(env string) string {
|
|
if value, exists := os.LookupEnv(env); !exists {
|
|
panic(fmt.Sprintf("env variable '%s' not defined", env))
|
|
} else {
|
|
return value
|
|
}
|
|
}
|
|
|
|
func envOrDefault(env string, defaultValue string) string {
|
|
if value, exists := os.LookupEnv(env); exists {
|
|
return value
|
|
} else {
|
|
return defaultValue
|
|
}
|
|
}
|
|
|
|
func connectToDb() (*sqlx.DB, error) {
|
|
host := envMustExist("PSQL_HOST")
|
|
port := envMustExist("PSQL_PORT")
|
|
user := envMustExist("PSQL_USER")
|
|
password := envMustExist("PSQL_PASSWORD")
|
|
dbname := envMustExist("PSQL_DB")
|
|
sslMode := envOrDefault("PSQL_SSLMODE", "disable")
|
|
schema := envOrDefault("PSQL_SCHEMA", "public")
|
|
|
|
psqlInfo := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s search_path=%s",
|
|
host, port, user, password, dbname, sslMode, schema)
|
|
|
|
db, err := sqlx.Open("postgres", psqlInfo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = db.Ping()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return db, nil
|
|
}
|