1

I have some strange issue. Try to connect to sql db by pgx driver, but error: can't open db conn: sql: unknown driver "pgx" is occured. I can't find any answer for this issue, maybe I failed in some cfg? Here is code:


import (
    "database/sql"
    "fmt"
    "time"

    "gitlab.wildberries.ru/wbx-team/wbx-authorization/identification/config"
    // Driver for PostgresSQL db.
    _ "github.com/jackc/pgx/v5"
)

type Logger interface {
    Info(args ...interface{})
}

type Provider struct {
    db        *sql.DB
    cs        string
    idlConns  int
    openConns int
    lifetime  time.Duration
    cfg       *config.Config
    logger    Logger
}

func New(cfg *config.Config, logger Logger) *Provider {
    info := fmt.Sprintf(
        "user=%s password=%s host=%s port=%d  dbname=%s  sslmode=disable",
        cfg.SQLDataBase.UserID,
        cfg.SQLDataBase.Password,
        cfg.SQLDataBase.Server,
        cfg.SQLDataBase.Port,
        cfg.SQLDataBase.Database,
    )

    return &Provider{
        cs:        info,
        idlConns:  cfg.SQLDataBase.MaxIdleCons,
        openConns: cfg.SQLDataBase.MaxOpenCons,
        lifetime:  time.Duration(cfg.SQLDataBase.ConnMaxLifetime) * time.Minute,
        cfg:       cfg,
        logger:    logger,
    }
}

func (p *Provider) Open() error {
    var err error

    p.db, err = sql.Open("pgx", p.cs)
    if err != nil {
        return fmt.Errorf("can't open db conn: %w", err)
    }

    p.db.SetMaxIdleConns(p.idlConns)

    p.db.SetMaxOpenConns(p.openConns)

    p.db.SetConnMaxLifetime(p.lifetime)

    err = p.db.Ping()
    if err != nil {
        return fmt.Errorf("can't ping db: %w", err)
    }

    p.logger.Info("pg connection open")

    return nil
}

func (p *Provider) GetConn() *sql.DB {
    return p.db
}

I tried to find any answer for this, but there is no. What should I try?

go.mod is ok, driver is ok, so what is it?

jarlh
  • 42,561
  • 8
  • 45
  • 63
SloVaC
  • 21
  • 2

1 Answers1

0

To use the standard sql package you have to import github.com/jackc/pgx/v5/stdlib, not github.com/jackc/pgx/v5:

package main

import (
    "database/sql"
    "os"

    _ "github.com/jackc/pgx/v5/stdlib"
)

func main() {
    db, err := sql.Open("pgx", os.Getenv("DATABASE_URL"))
    // ...
}

See https://github.com/jackc/pgx/wiki/Getting-started-with-pgx-through-database-sql#hello-world-from-postgresql

Peter
  • 29,454
  • 5
  • 48
  • 60