...

Source file src/edge-infra.dev/pkg/lib/db/postgres/options.go

Documentation: edge-infra.dev/pkg/lib/db/postgres

     1  package postgres
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  )
     7  
     8  const (
     9  	defaultUser     string = "postgres"
    10  	defaultDatabase string = "postgres"
    11  )
    12  
    13  type SSLMode string
    14  
    15  const (
    16  	Prefer     SSLMode = "prefer"
    17  	Disable    SSLMode = "disable"
    18  	Require    SSLMode = "require"
    19  	VerifyCA   SSLMode = "verify-ca"
    20  	VerifyFull SSLMode = "verify-full"
    21  )
    22  
    23  func (m SSLMode) String() string {
    24  	switch m {
    25  	case Prefer:
    26  		return "prefer"
    27  	case Disable:
    28  		return "disable"
    29  	case Require:
    30  		return "require"
    31  	case VerifyCA:
    32  		return "verify-ca"
    33  	case VerifyFull:
    34  		return "verify-full"
    35  	}
    36  	return ""
    37  }
    38  
    39  // TODO(help_wanted) - should probably expose max conns at least
    40  
    41  // DSNOptions ...
    42  // list of all connection string parameters https://pkg.go.dev/github.com/lib/pq#hdr-Connection_String_Parameters
    43  type DSNOptions struct {
    44  	Host     string
    45  	Port     int
    46  	DBName   string
    47  	User     string
    48  	Password string
    49  	SSLMode  SSLMode // underlying pgx lib defaults to "prefer"
    50  }
    51  
    52  func (dsn *DSNOptions) ToString() string {
    53  	var parts []string
    54  
    55  	if dsn.Host != "" {
    56  		parts = append(parts, fmt.Sprintf("host=%s", dsn.Host))
    57  	}
    58  	if dsn.Port != 0 {
    59  		parts = append(parts, fmt.Sprintf("port=%d", dsn.Port))
    60  	}
    61  	if dsn.DBName != "" {
    62  		// dbname && database both work - https://github.com/jackc/pgconn/blob/15f8e6323e113feb44678e5cb16cfbeba4630bf6/config.go#L495-L497
    63  		parts = append(parts, fmt.Sprintf("database=%s", dsn.DBName))
    64  	} else {
    65  		// default to postgres default value
    66  		parts = append(parts, fmt.Sprintf("database=%s", defaultDatabase))
    67  	}
    68  	if dsn.User != "" {
    69  		parts = append(parts, fmt.Sprintf("user=%s", dsn.User))
    70  	} else {
    71  		// default to postgres default and not pgx value of user.Current(), "os/user" pgconn/defaults.go
    72  		parts = append(parts, fmt.Sprintf("user=%s", defaultUser))
    73  	}
    74  	if dsn.Password != "" {
    75  		parts = append(parts, fmt.Sprintf("password=%s", dsn.Password))
    76  	}
    77  	if dsn.SSLMode != "" {
    78  		parts = append(parts, fmt.Sprintf("sslmode=%s", dsn.SSLMode.String()))
    79  	}
    80  
    81  	return strings.Join(parts[:], " ")
    82  }
    83  

View as plain text