MCPcopy Create free account
hub / github.com/bytebase/bytebase / getPGConnectionConfig

Function getPGConnectionConfig

backend/plugin/db/pg/pg.go:172–228  ·  view source on GitHub ↗
(config db.ConnectionConfig)

Source from the content-addressed store, hash-verified

170}
171
172func getPGConnectionConfig(config db.ConnectionConfig) (*pgx.ConnConfig, error) {
173 if config.DataSource.Username == "" {
174 return nil, errors.Errorf("user must be set")
175 }
176
177 if config.DataSource.Host == "" {
178 return nil, errors.Errorf("host must be set")
179 }
180
181 if config.DataSource.Port == "" {
182 return nil, errors.Errorf("port must be set")
183 }
184
185 if (config.DataSource.GetSslCert() == "" && config.DataSource.GetSslKey() != "") ||
186 (config.DataSource.GetSslCert() != "" && config.DataSource.GetSslKey() == "") {
187 return nil, errors.Errorf("ssl-cert and ssl-key must be both set or unset")
188 }
189
190 connStr := fmt.Sprintf("host=%s port=%s", config.DataSource.Host, config.DataSource.Port)
191 if config.DataSource.GetUseSsl() {
192 connStr += fmt.Sprintf(" sslmode=%s", util.GetPGSSLMode(config.DataSource))
193 }
194
195 // Add target_session_attrs=read-write if specified in ExtraConnectionParameters
196 for key, value := range config.DataSource.GetExtraConnectionParameters() {
197 connStr += fmt.Sprintf(" %s=%s", key, value)
198 }
199
200 connConfig, err := pgx.ParseConfig(connStr)
201 if err != nil {
202 return nil, err
203 }
204 connConfig.User = config.DataSource.Username
205 connConfig.Password = config.Password
206 connConfig.Database = config.ConnectionContext.DatabaseName
207
208 tlscfg, err := util.GetTLSConfig(config.DataSource)
209 if err != nil {
210 return nil, err
211 }
212 if tlscfg != nil {
213 connConfig.TLSConfig = tlscfg
214 util.ApplyPGTLSConfig(tlscfg, connConfig.Host, connConfig.Fallbacks)
215 }
216
217 // Apply pgbouncer-safe defaults unless the user has explicitly configured
218 // them via ExtraConnectionParameters (preserves escape hatches such as
219 // default_query_exec_mode=simple_protocol for non-PostgreSQL-compatible proxies).
220 extraParams := config.DataSource.GetExtraConnectionParameters()
221 if _, ok := extraParams["default_query_exec_mode"]; !ok {
222 connConfig.DefaultQueryExecMode = pgx.QueryExecModeExec
223 }
224 if _, ok := extraParams["statement_cache_capacity"]; !ok {
225 connConfig.StatementCacheCapacity = 0
226 }
227 return connConfig, nil
228}
229

Calls 8

GetPGSSLModeFunction · 0.92
GetTLSConfigFunction · 0.92
ApplyPGTLSConfigFunction · 0.92
ErrorfMethod · 0.80
GetSslCertMethod · 0.45
GetSslKeyMethod · 0.45
GetUseSslMethod · 0.45