numerus/pkg/db.go

40 lines
973 B
Go
Raw Normal View History

package pkg
import (
"context"
"log"
"github.com/jackc/pgx/v4"
"github.com/jackc/pgx/v4/pgxpool"
)
func ConnectToDatabase(ctx context.Context, connString string) (*pgxpool.Pool, error) {
config, err := pgxpool.ParseConfig(connString)
if err != nil {
log.Fatal(err)
}
config.AfterConnect = func(ctx context.Context, conn *pgx.Conn) error {
_, err := conn.Exec(context.Background(), "SET search_path TO numerus, public")
return err
}
config.BeforeAcquire = func(ctx context.Context, conn *pgx.Conn) bool {
if _, err := conn.Exec(ctx, "select set_config('role', $1, false)", "guest"); err != nil {
log.Printf("ERROR - Failed to set role: %v", err)
return false
}
return true
}
config.AfterRelease = func(conn *pgx.Conn) bool {
if _, err := conn.Exec(context.Background(), "RESET ROLE"); err != nil {
log.Printf("ERROR - Failed to reset role: %v", err)
return false
}
return true
}
return pgxpool.ConnectConfig(ctx, config)
}