github.com/pavlo67/common@v0.5.3/common/sqllib/sqllib_pg/connect.go (about) 1 package sqllib_pg 2 3 import ( 4 "database/sql" 5 "fmt" 6 "strings" 7 8 _ "github.com/lib/pq" 9 "github.com/pkg/errors" 10 11 "github.com/pavlo67/common/common/config" 12 ) 13 14 func AddressPostgres(e config.Access) (string, error) { 15 if e.Host == "" { 16 e.Host = "localhost" 17 } 18 19 if e.Port == 0 { 20 e.Port = 5432 21 } 22 23 return fmt.Sprintf( 24 //"%s:%s@tcp(%s:%s)/%s?parseTime=true", 25 "user=%s password=%s host=%s port=%d dbname=%s %s", 26 e.User, 27 e.Pass, 28 e.Host, 29 e.Port, 30 e.Path, 31 e.Options, 32 ), nil 33 34 } 35 36 func Connect(access config.Access) (*sql.DB, error) { 37 if strings.TrimSpace(access.Path) == "" { 38 return nil, errors.New("no path to Postgres database is defined") 39 } 40 41 address, err := AddressPostgres(access) 42 if err != nil { 43 return nil, err 44 } 45 46 db, err := sql.Open("postgres", address) 47 if err != nil { 48 return nil, errors.Wrapf(err, "wrong db connect (access = %#v)", access) 49 } 50 51 err = db.Ping() 52 if err != nil { 53 return nil, errors.Wrapf(err, "wrong .Ping on db connect (access = %#v)", access) 54 } 55 56 return db, nil 57 }