diff --git a/lib/gat/configs/pgbouncer/config.go b/lib/gat/configs/pgbouncer/config.go index 6873b34007b9f633a918b9d408a57f57103c8e02..3c77e7c57231cb4dd31880a0f127de7ea9bf80dc 100644 --- a/lib/gat/configs/pgbouncer/config.go +++ b/lib/gat/configs/pgbouncer/config.go @@ -160,21 +160,19 @@ type PgBouncer struct { } type Database struct { - DBName string `ini:"dbname"` - Host string `ini:"host"` - Port int `ini:"port"` - User string `ini:"user"` - Password string `ini:"password"` - AuthUser string `ini:"auth_user"` - PoolSize int `ini:"pool_size"` - MinPoolSize int `ini:"min_pool_size"` - ReservePool int `ini:"reserve_pool"` - ConnectQuery string `ini:"connect_query"` - PoolMode PoolMode `ini:"pool_mode"` - MaxDBConnections int `ini:"max_db_connections"` - ClientEncoding string `ini:"client_encoding"` - Datestyle string `ini:"datestyle"` - Timezone string `ini:"timezone"` + DBName string `ini:"dbname"` + Host string `ini:"host"` + Port int `ini:"port"` + User string `ini:"user"` + Password string `ini:"password"` + AuthUser string `ini:"auth_user"` + PoolSize int `ini:"pool_size"` + MinPoolSize int `ini:"min_pool_size"` + ReservePool int `ini:"reserve_pool"` + ConnectQuery string `ini:"connect_query"` + PoolMode PoolMode `ini:"pool_mode"` + MaxDBConnections int `ini:"max_db_connections"` + StartupParameters map[string]string `ini:"*"` } type User struct { @@ -318,17 +316,6 @@ func (T *Config) ListenAndServe(pooler *gat.Pooler) error { p := gat.NewPool(raw, time.Duration(T.PgBouncer.ServerIdleTimeout*float64(time.Second))) u.AddPool(dbname, p) - startupParameters := make(map[string]string) - if db.ClientEncoding != "" { - startupParameters["client_encoding"] = db.ClientEncoding - } - if db.Datestyle != "" { - startupParameters["datestyle"] = db.Datestyle - } - if db.Timezone != "" { - startupParameters["timezone"] = db.Timezone - } - if db.Host == "" { // connect over unix socket // TODO(garet) @@ -353,7 +340,7 @@ func (T *Config) ListenAndServe(pooler *gat.Pooler) error { Credentials: creds, MinConnections: db.MinPoolSize, MaxConnections: db.MaxDBConnections, - StartupParameters: startupParameters, + StartupParameters: db.StartupParameters, } if recipe.MinConnections == 0 { recipe.MinConnections = T.PgBouncer.MinPoolSize diff --git a/lib/util/encoding/ini/unmarshal.go b/lib/util/encoding/ini/unmarshal.go index e6a254f3ae58eb0010e4c5bc09fa3c21c789c278..7f227f60da7b138b478b357ac7635e3d77747e20 100644 --- a/lib/util/encoding/ini/unmarshal.go +++ b/lib/util/encoding/ini/unmarshal.go @@ -37,6 +37,9 @@ outer: if !ok { name = field.Name } + if name == "*" { + return get(rv.Field(i), key, fn) + } if name == key { return fn(rv.Field(i)) } diff --git a/pgbouncer.ini b/pgbouncer.ini index 793026571ec05377406670f32d5adb556b8970e4..c0d71af9d41a708354103529c16aac6fec87c716 100644 --- a/pgbouncer.ini +++ b/pgbouncer.ini @@ -7,5 +7,5 @@ listen_addr = * postgres = [databases] -regression = host=localhost +regression = host=localhost datestyle=Postgres,MDY intervalstyle=postgres_verbose timezone=PST8PDT postgres = host=localhost