MCPcopy Create free account
hub / github.com/go-pg/pg / ParseURL

Function ParseURL

options.go:194–277  ·  view source on GitHub ↗

ParseURL parses an URL into options that can be used to connect to PostgreSQL.

(sURL string)

Source from the content-addressed store, hash-verified

192
193// ParseURL parses an URL into options that can be used to connect to PostgreSQL.
194func ParseURL(sURL string) (*Options, error) {
195 parsedURL, err := url.Parse(sURL)
196 if err != nil {
197 return nil, err
198 }
199
200 // scheme
201 if parsedURL.Scheme != "postgres" && parsedURL.Scheme != "postgresql" {
202 return nil, errors.New("pg: invalid scheme: " + parsedURL.Scheme)
203 }
204
205 // host and port
206 options := &Options{
207 Addr: parsedURL.Host,
208 }
209 if !strings.Contains(options.Addr, ":") {
210 options.Addr += ":5432"
211 }
212
213 // username and password
214 if parsedURL.User != nil {
215 options.User = parsedURL.User.Username()
216
217 if password, ok := parsedURL.User.Password(); ok {
218 options.Password = password
219 }
220 }
221
222 if options.User == "" {
223 options.User = "postgres"
224 }
225
226 // database
227 if len(strings.Trim(parsedURL.Path, "/")) > 0 {
228 options.Database = parsedURL.Path[1:]
229 } else {
230 return nil, errors.New("pg: database name not provided")
231 }
232
233 // ssl mode
234 query, err := url.ParseQuery(parsedURL.RawQuery)
235 if err != nil {
236 return nil, err
237 }
238
239 if sslMode, ok := query["sslmode"]; ok && len(sslMode) > 0 {
240 switch sslMode[0] {
241 case "verify-ca", "verify-full":
242 options.TLSConfig = &tls.Config{}
243 case "allow", "prefer", "require":
244 options.TLSConfig = &tls.Config{InsecureSkipVerify: true} //nolint
245 case "disable":
246 options.TLSConfig = nil
247 default:
248 return nil, fmt.Errorf("pg: sslmode '%v' is not supported", sslMode[0])
249 }
250 } else {
251 options.TLSConfig = &tls.Config{InsecureSkipVerify: true} //nolint

Callers 3

TestParseURLFunction · 0.85
TestOptions_ToURLFunction · 0.85

Calls 1

NewMethod · 0.45

Tested by 3

TestParseURLFunction · 0.68
TestOptions_ToURLFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…