diff --git a/lib/gat/configs/pgbouncer/config.go b/lib/gat/configs/pgbouncer/config.go index 1fb11220bf87ff730aa4776e6449f78f2db8b1bc..6873b34007b9f633a918b9d408a57f57103c8e02 100644 --- a/lib/gat/configs/pgbouncer/config.go +++ b/lib/gat/configs/pgbouncer/config.go @@ -292,6 +292,10 @@ func (T *Config) ListenAndServe(pooler *gat.Pooler) error { continue } + if db.DBName != "" { + dbname = db.DBName + } + var poolMode PoolMode if user.PoolMode != "" { poolMode = user.PoolMode @@ -344,7 +348,7 @@ func (T *Config) ListenAndServe(pooler *gat.Pooler) error { // connect over tcp recipe := gat.TCPRecipe{ - Database: db.DBName, + Database: dbname, Address: address, Credentials: creds, MinConnections: db.MinPoolSize, diff --git a/lib/gat/recipe.go b/lib/gat/recipe.go index 8735fde0517f651c6d5069b49b77acde96744c61..65438046a478e7cd3f06b5f407a4c61830cad925 100644 --- a/lib/gat/recipe.go +++ b/lib/gat/recipe.go @@ -37,8 +37,11 @@ func (T TCPRecipe) Connect() (zap.ReadWriter, map[string]string, error) { rw := zap.WrapIOReadWriter(conn) parameterStatus := maps.Clone(T.StartupParameters) + if parameterStatus == nil { + parameterStatus = make(map[string]string) + } - err = backends.Accept(rw, T.Credentials, T.Database, T.StartupParameters) + err = backends.Accept(rw, T.Credentials, T.Database, parameterStatus) if err != nil { return nil, nil, err } diff --git a/lib/util/maps/clone.go b/lib/util/maps/clone.go index d74c7429cff93dda0a5e395a2687d695950970b1..88e44381dcdb05fa429b6481efa6ac3ccd85c297 100644 --- a/lib/util/maps/clone.go +++ b/lib/util/maps/clone.go @@ -1,6 +1,9 @@ package maps func Clone[K comparable, V any](value map[K]V) map[K]V { + if value == nil { + return nil + } m := make(map[K]V, len(value)) for k, v := range value { m[k] = v