migrate icon indicating copy to clipboard operation
migrate copied to clipboard

Question: how to use pgx special options

Open m-chrome opened this issue 2 years ago • 0 comments

Problem

pgx v4 has PreferSimpleProtocol option. It disabled by default. If I want to enable it for pgx connection, I have to do following:

  1. 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)
}
  1. 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?

m-chrome avatar Oct 18 '22 15:10 m-chrome