MCPcopy
hub / github.com/sqldef/sqldef / postgresBuildDSN

Function postgresBuildDSN

database/postgres/database.go:1008–1045  ·  view source on GitHub ↗
(config database.Config)

Source from the content-addressed store, hash-verified

1006}
1007
1008func postgresBuildDSN(config database.Config) string {
1009 dsn := &url.URL{
1010 Scheme: "postgres",
1011 User: url.UserPassword(config.User, config.Password),
1012 Path: "/" + config.DbName,
1013 }
1014
1015 options := url.Values{}
1016
1017 if config.Socket == "" {
1018 dsn.Host = fmt.Sprintf("%s:%d", config.Host, config.Port)
1019 } else {
1020 // Socket connection uses the host query parameter
1021 options.Set("host", config.Socket)
1022 }
1023
1024 // Use config.SslMode if set, otherwise check environment variable
1025 if config.SslMode != "" {
1026 options.Set("sslmode", config.SslMode)
1027 } else if sslmode, ok := os.LookupEnv("PGSSLMODE"); ok {
1028 options.Set("sslmode", sslmode)
1029 }
1030
1031 // TODO: Add SslRootCert, SslCert, SslKey fields to database.Config for consistency with SslMode,
1032 // or allow passing a raw DSN string to avoid field-by-field mapping entirely.
1033 if sslrootcert, ok := os.LookupEnv("PGSSLROOTCERT"); ok {
1034 options.Set("sslrootcert", sslrootcert)
1035 }
1036 if sslcert, ok := os.LookupEnv("PGSSLCERT"); ok {
1037 options.Set("sslcert", sslcert)
1038 }
1039 if sslkey, ok := os.LookupEnv("PGSSLKEY"); ok {
1040 options.Set("sslkey", sslkey)
1041 }
1042
1043 dsn.RawQuery = options.Encode()
1044 return dsn.String()
1045}
1046
1047func forceQuoteIdentifier(name string) string {
1048 return fmt.Sprintf("\"%s\"", name)

Callers 1

NewDatabaseFunction · 0.85

Calls 1

StringMethod · 0.45

Tested by

no test coverage detected