feedizer/cmd/feedizer/internal/database/database.go

41 lines
994 B
Go
Raw Normal View History

package database
import (
"context"
"fmt"
2022-01-25 23:58:41 +01:00
"log"
"time"
"github.com/jackc/pgx/v4/pgxpool"
)
var LogName string
// ParseConfig parses the database config string and sets LogName.
func ParseConfig(config string) (*pgxpool.Config, error) {
dbConfig, err := pgxpool.ParseConfig(config)
LogName = fmt.Sprintf("%s@%s:%s/%s", dbConfig.ConnConfig.User, dbConfig.ConnConfig.Host, dbConfig.ConnConfig.Port, dbConfig.ConnConfig.Database)
return dbConfig, err
}
2022-01-25 23:58:41 +01:00
func Open(dbConfig *pgxpool.Config) (*pgxpool.Pool, error) {
2022-01-25 23:58:41 +01:00
log.Printf("database: connecting...")
db, err := pgxpool.ConnectConfig(context.Background(), dbConfig)
2022-01-25 23:58:41 +01:00
if err != nil {
return nil, err
}
err = db.Ping(context.Background())
2022-01-25 23:58:41 +01:00
for i := 1; err != nil && i < 10; i++ {
log.Printf("database: connection failed, retrying in %d seconds...", i)
time.Sleep(time.Duration(i) * time.Second)
err = db.Ping(context.Background())
2022-01-25 23:58:41 +01:00
}
if err == nil {
log.Println("database: connection successful")
}
return db, err
}