Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DumpCommand ¶
DumpCommand generates a pg_dump invocation that can be used for on-prem-to-Cloud migrations.
func FilterInvalidLines ¶
FilterInvalidLines copies the initial lines of the pg_dump-created .sql files, from src to dst (the GCS bucket), until it hits a line prefixed with a filterEndMarker, while commenting out the linesToFilter which cause `gcloud sql import` to error out. It then resets src to the position of the last contents written to dst.
Filtering requires reading entire lines into memory, this can be a very expensive operation, so when filtering is complete, the more efficient io.Copy is used to perform the remainder of the copy in the calling funciton
pg_dump writes these .sql files based on its own version, not based on the Postgres version of either the source or destination database; so self-hosted customers' diverse database environments have inserted a variety of statements into the .sql files which cause the import to fail For details, see https://cloud.google.com/sql/docs/postgres/import-export/import-export-dmp
func RestoreCommand ¶
RestoreCommand generates a psql invocation that can be used for migrations.
Types ¶
type Command ¶
type Command struct {
// Env holds additional environment variables in "KEY=value" form.
Env []string
// Args is the argv to execute; Args[0] is the executable.
Args []string
// InputFile, if set, is opened and connected to the command's stdin.
InputFile string
// OutputFile, if set, receives the command's stdout. When empty, stdout is
// discarded (matching the original "1>/dev/null" behaviour for restores).
OutputFile string
}
Command represents a command to run as an argv array rather than a shell string. Values that originate from user-controlled targets are always passed as discrete arguments (or safely shell-quoted when they must be embedded in a nested shell command), never interpolated into a string that is handed to "bash -c". This prevents shell injection via malicious targets files.
func BuildCommands ¶
func BuildCommands(outDir string, commandBuilder CommandBuilder, targets Targets, dump bool) ([]Command, error)
BuildCommands generates commands that output Postgres dumps and sends them to predefined files for each target database.
type CommandBuilder ¶
type PGCommand ¶
PGCommand generates the argv and environment for a base Postgres command (pg_dump or psql) targeting the given Target.
type Target ¶
type Target struct {
// Target is the DSN of the database deployment:
//
// - in docker, the name of the database container, e.g. pgsql, codeintel-db, codeinsights-db
// - in k8s, the name of the deployment or statefulset, e.g. deploy/pgsql, sts/pgsql
// - in plain pg_dump, the server host or socket directory
Target string `yaml:"target"`
DBName string `yaml:"dbname"`
Username string `yaml:"username"`
// Only include password if non-sensitive
Password string `yaml:"password"`
}
Target represents a database for pg_dump to export.