migrate
migrate copied to clipboard
Question: how to use pgx special options
Problem
pgx v4 has PreferSimpleProtocol option. It disabled by default. If I want to enable it for pgx connection, I have to do following:
- Parse url and register global pgx connection config, then return patched version of Pgx driver (see impl in step 2):
func newDriver(url string) (database.Driver, error) {
connCfg, err := pgx.ParseConfig(url)
if err != nil {
return nil, err
}
connCfg.PreferSimpleProtocol = true
url = stdlib.RegisterConnConfig(connCfg)
driver := PgxDriver{}
return driver.Open(url)
}
- Patch pgx driver, because pgx.RegisterConnConfig return url like
registeredConnConfig0
, next way:
type PgxDriver struct {
pgxMigrate.Postgres
}
func (p *PgxDriver) Open(url string) (database.Driver, error) {
purl, err := nurl.Parse(url)
if err != nil {
return nil, err
}
db, err := sql.Open("pgx", migrate.FilterCustomQuery(purl).String())
if err != nil {
return nil, err
}
...
After that pgx will use connection with enabled PreferSimpleProtocol.
This way is not obvious and complicated. Are any better ways for enabling this and other options?