31 lines
839 B
Go
31 lines
839 B
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/jackc/pgx/v5"
|
|
"github.com/jackc/pgx/v5/pgconn"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
"log/slog"
|
|
"os"
|
|
)
|
|
|
|
type Client interface {
|
|
Exec(ctx context.Context, sql string, args ...interface{}) (pgconn.CommandTag, error)
|
|
Query(ctx context.Context, sql string, args ...interface{}) (pgx.Rows, error)
|
|
QueryRow(ctx context.Context, sql string, args ...interface{}) pgx.Row
|
|
Begin(ctx context.Context) (pgx.Tx, error)
|
|
Ping(ctx context.Context) error
|
|
}
|
|
|
|
func NewClient(ctx context.Context, connUrl string, logger *slog.Logger) (*pgxpool.Pool, error) {
|
|
pool, err := pgxpool.New(ctx, connUrl)
|
|
if err != nil {
|
|
fmt.Println(fmt.Fprintf(os.Stderr, "Unable to create connection pool: %v\n", err))
|
|
logger.Error("Unable to create connection pool: ", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
return pool, nil
|
|
}
|