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  }