dev-pod-api-build/vendor/github.com/fergusstrange/embedded-postgres/config.go
2026-04-16 04:16:36 +00:00

166 lines
4.8 KiB
Go

package embeddedpostgres
import (
"fmt"
"io"
"os"
"time"
)
// Config maintains the runtime configuration for the Postgres process to be created.
type Config struct {
version PostgresVersion
port uint32
database string
username string
password string
cachePath string
runtimePath string
dataPath string
binariesPath string
locale string
encoding string
startParameters map[string]string
binaryRepositoryURL string
startTimeout time.Duration
logger io.Writer
}
// DefaultConfig provides a default set of configuration to be used "as is" or modified using the provided builders.
// The following can be assumed as defaults:
// Version: 16
// Port: 5432
// Database: postgres
// Username: postgres
// Password: postgres
// StartTimeout: 15 Seconds
func DefaultConfig() Config {
return Config{
version: V18,
port: 5432,
database: "postgres",
username: "postgres",
password: "postgres",
startTimeout: 15 * time.Second,
logger: os.Stdout,
binaryRepositoryURL: "https://repo1.maven.org/maven2",
}
}
// Version will set the Postgres binary version.
func (c Config) Version(version PostgresVersion) Config {
c.version = version
return c
}
// Port sets the runtime port that Postgres can be accessed on.
func (c Config) Port(port uint32) Config {
c.port = port
return c
}
// Database sets the database name that will be created.
func (c Config) Database(database string) Config {
c.database = database
return c
}
// Username sets the username that will be used to connect.
func (c Config) Username(username string) Config {
c.username = username
return c
}
// Password sets the password that will be used to connect.
func (c Config) Password(password string) Config {
c.password = password
return c
}
// RuntimePath sets the path that will be used for the extracted Postgres runtime directory.
// If Postgres data directory is not set with DataPath(), this directory is also used as data directory.
func (c Config) RuntimePath(path string) Config {
c.runtimePath = path
return c
}
// CachePath sets the path that will be used for storing Postgres binaries archive.
// If this option is not set, ~/.go-embedded-postgres will be used.
func (c Config) CachePath(path string) Config {
c.cachePath = path
return c
}
// DataPath sets the path that will be used for the Postgres data directory.
// If this option is set, a previously initialized data directory will be reused if possible.
func (c Config) DataPath(path string) Config {
c.dataPath = path
return c
}
// BinariesPath sets the path of the pre-downloaded postgres binaries.
// If this option is left unset, the binaries will be downloaded.
func (c Config) BinariesPath(path string) Config {
c.binariesPath = path
return c
}
// Locale sets the default locale for initdb
func (c Config) Locale(locale string) Config {
c.locale = locale
return c
}
// Encoding sets the default character set for initdb
func (c Config) Encoding(encoding string) Config {
c.encoding = encoding
return c
}
// StartParameters sets run-time parameters when starting Postgres (passed to Postgres via "-c").
//
// These parameters can be used to override the default configuration values in postgres.conf such
// as max_connections=100. See https://www.postgresql.org/docs/current/runtime-config.html
func (c Config) StartParameters(parameters map[string]string) Config {
c.startParameters = parameters
return c
}
// StartTimeout sets the max timeout that will be used when starting the Postgres process and creating the initial database.
func (c Config) StartTimeout(timeout time.Duration) Config {
c.startTimeout = timeout
return c
}
// Logger sets the logger for postgres output
func (c Config) Logger(logger io.Writer) Config {
c.logger = logger
return c
}
// BinaryRepositoryURL set BinaryRepositoryURL to fetch PG Binary in case of Maven proxy
func (c Config) BinaryRepositoryURL(binaryRepositoryURL string) Config {
c.binaryRepositoryURL = binaryRepositoryURL
return c
}
func (c Config) GetConnectionURL() string {
return fmt.Sprintf("postgresql://%s:%s@%s:%d/%s", c.username, c.password, "localhost", c.port, c.database)
}
// PostgresVersion represents the semantic version used to fetch and run the Postgres process.
type PostgresVersion string
// Predefined supported Postgres versions.
const (
V18 = PostgresVersion("18.3.0")
V17 = PostgresVersion("17.5.0")
V16 = PostgresVersion("16.9.0")
V15 = PostgresVersion("15.13.0")
V14 = PostgresVersion("14.18.0")
V13 = PostgresVersion("13.21.0")
V12 = PostgresVersion("12.22.0")
V11 = PostgresVersion("11.22.0")
V10 = PostgresVersion("10.23.0")
V9 = PostgresVersion("9.6.24")
)