psql.go
601 bytes
1package db
2
3import (
4 "context"
5 "log/slog"
6 "time"
7
8 "github.com/jackc/pgx/v5/pgxpool"
9)
10
11type postgresDB struct {
12 l *slog.Logger
13 db *pgxpool.Pool
14}
15
16var _ DB = (*postgresDB)(nil)
17
18func NewPostgresDB(log *slog.Logger, dbURI string) (*postgresDB, error) {
19 db, err := pgxpool.New(context.Background(), dbURI)
20 if err != nil {
21 return nil, err
22 }
23
24 ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
25 defer cancel()
26 err = db.Ping(ctx)
27 if err != nil {
28 return nil, err
29 }
30
31 return &postgresDB{
32 l: log,
33 db: db,
34 }, nil
35}
36
37func (db *postgresDB) Close() {
38 db.db.Close()
39}