Go-Back-Skeleton/database/postgres.go

55 lines
1.1 KiB
Go

// Package database implements postgres connection and queries.
package database
import (
"log"
"github.com/spf13/viper"
"github.com/go-pg/pg"
)
// DBConn returns a postgres connection pool.
func DBConn() (*pg.DB, error) {
viper.SetDefault("db_network", "tcp")
viper.SetDefault("db_addr", "localhost:5432")
viper.SetDefault("db_user", "postgres")
viper.SetDefault("db_password", "postgres")
viper.SetDefault("db_database", "gobase")
db := pg.Connect(&pg.Options{
Network: viper.GetString("db_network"),
Addr: viper.GetString("db_addr"),
User: viper.GetString("db_user"),
Password: viper.GetString("db_password"),
Database: viper.GetString("db_database"),
})
if err := checkConn(db); err != nil {
return nil, err
}
if viper.GetBool("db_debug") {
db.AddQueryHook(&logSQL{})
}
return db, nil
}
type logSQL struct{}
func (l *logSQL) BeforeQuery(e *pg.QueryEvent) {}
func (l *logSQL) AfterQuery(e *pg.QueryEvent) {
query, err := e.FormattedQuery()
if err != nil {
panic(err)
}
log.Println(query)
}
func checkConn(db *pg.DB) error {
var n int
_, err := db.QueryOne(pg.Scan(&n), "SELECT 1")
return err
}