v3.5.0
===================================================================== --- Changes ------------------------------ - AWS (the cli wrapper) now checks for it's required variables *on run*. This accomodates scwrypts which may need to run in multiple regions, but make the downstream scwrypt responsible for adding AWS_REGION to the REQUIRED_ENV list! - Got rid of all kinds of hackiness surrounding postgres password evals between both the postgres library and the rds library --- Bug Fixes ---------------------------- - scwrypts --update now pulls tags for proper versioning
This commit is contained in:
@ -4,7 +4,6 @@ DEPENDENCIES+=(
|
||||
pg_dump
|
||||
pg_restore
|
||||
psql
|
||||
pgcli
|
||||
)
|
||||
|
||||
REQUIRED_ENV+=()
|
||||
@ -12,22 +11,22 @@ REQUIRED_ENV+=()
|
||||
#####################################################################
|
||||
|
||||
PSQL() {
|
||||
[[ ${#ARGS[@]} -eq 0 ]] && POSTGRES__SET_LOGIN_ARGS $@
|
||||
|
||||
eval PGPASSWORD=$_PASS psql ${_ARGS[@]}
|
||||
POSTGRES__SET_LOGIN_ARGS $@
|
||||
eval PGPASSWORD=$(printf '%q ' "$DB_PASS") psql ${PSQL_ARGS[@]}
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
||||
PG_DUMP() {
|
||||
local _HOST _NAME _PORT _USER _FILE
|
||||
local DATA_DIR _PASS _ARGS=()
|
||||
local DATA_DIR
|
||||
POSTGRES__SET_LOGIN_ARGS --verbose $@
|
||||
|
||||
local OUTPUT_FILE="$DATA_DIR/backup.$(date '+%Y-%m-%d.%H-%M')"
|
||||
|
||||
|
||||
|
||||
STATUS "
|
||||
making backup of : $_USER@$_HOST:$_PORT/$_NAME
|
||||
making backup of : $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME
|
||||
|
||||
(compressed) : '$OUTPUT_FILE.dump'
|
||||
(safe-raw) : '$OUTPUT_FILE.sql'
|
||||
@ -36,23 +35,33 @@ PG_DUMP() {
|
||||
|
||||
: \
|
||||
&& STATUS "creating compressed backup..." \
|
||||
&& eval PGPASSWORD=$_PASS pg_dump ${_ARGS[@]} --format custom --file "$OUTPUT_FILE.dump" \
|
||||
&& eval PGPASSWORD=$(printf '%q ' "$DB_PASS") psql ${PSQL_ARGS[@]} \
|
||||
--format custom \
|
||||
--file "$OUTPUT_FILE.dump" \
|
||||
--verbose \
|
||||
&& SUCCESS "completed compressed backup" \
|
||||
&& STATUS "creating raw backup..." \
|
||||
&& eval PGPASSWORD=$_PASS pg_dump ${_ARGS[@]} > "$OUTPUT_FILE.raw.sql" \
|
||||
&& pg_restore -f "$OUTPUT_FILE.raw.sql" "$OUTPUT_FILE.dump" \
|
||||
&& SUCCESS "completed raw backup" \
|
||||
&& STATUS "creating single-transaction raw backup..." \
|
||||
&& { echo "BEGIN;"; cat "$OUTPUT_FILE.raw.sql"; echo "END;" } > "$OUTPUT_FILE.sql" \
|
||||
&& { echo "BEGIN;\n"; cat "$OUTPUT_FILE.raw.sql"; echo "\nEND;" } > "$OUTPUT_FILE.sql" \
|
||||
&& SUCCESS "completed single-transaction raw backup" \
|
||||
|| { ERROR "error creating backup for '$_HOST/$_NAME' (see above)"; return 1; }
|
||||
|| { ERROR "error creating backup for '$DB_HOST/$DB_NAME' (see above)"; return 1; }
|
||||
|
||||
SUCCESS "
|
||||
completed backup : $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME
|
||||
|
||||
(compressed) : '$OUTPUT_FILE.dump'
|
||||
(safe-raw) : '$OUTPUT_FILE.sql'
|
||||
(raw) : '$OUTPUT_FILE.raw.sql'
|
||||
"
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
||||
PG_RESTORE() {
|
||||
local _HOST _NAME _PORT _USER
|
||||
local _PASS _ARGS=()
|
||||
local _FILE
|
||||
local _ARGS=()
|
||||
local FILE
|
||||
POSTGRES__SET_LOGIN_ARGS $@
|
||||
|
||||
local INPUT_FILE=$(find "$DATA_DIR"/backup.* -type f | FZF 'select database file to restore')
|
||||
@ -72,7 +81,7 @@ PG_RESTORE() {
|
||||
[[ $INPUT_FILE =~ \\.dump$ ]] && RAW=0
|
||||
|
||||
STATUS "
|
||||
loading backup for : $_USER@$_HOST:$_PORT/$_NAME
|
||||
loading backup for : $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME
|
||||
|
||||
file : '$INPUT_FILE'
|
||||
"
|
||||
@ -92,7 +101,7 @@ PG_RESTORE() {
|
||||
}
|
||||
|
||||
[[ $RAW -eq 0 ]] && {
|
||||
PGPASSWORD="$_PASS" pg_restore ${_ARGS[@]} \
|
||||
eval PGPASSWORD=$(printf '%q ' "$DB_PASS") pg_restore ${PSQL_ARGS[@]} \
|
||||
--verbose \
|
||||
--format custom \
|
||||
--single-transaction \
|
||||
@ -101,8 +110,8 @@ PG_RESTORE() {
|
||||
}
|
||||
|
||||
[[ $EXIT_CODE -eq 0 ]] \
|
||||
&& SUCCESS "finished restoring backup for '$_HOST/$_NAME'" \
|
||||
|| ERROR "error restoring backup for '$_HOST/$_NAME' (see above)" \
|
||||
&& SUCCESS "finished restoring backup for '$DB_HOST/$DB_NAME'" \
|
||||
|| ERROR "error restoring backup for '$DB_HOST/$DB_NAME' (see above)" \
|
||||
;
|
||||
|
||||
return $EXIT_CODE
|
||||
@ -111,48 +120,70 @@ PG_RESTORE() {
|
||||
#####################################################################
|
||||
|
||||
POSTGRES__LOGIN_INTERACTIVE() {
|
||||
local _PASS _ARGS=()
|
||||
DEPENDENCIES=(pgcli) CHECK_ENVIRONMENT --optional \
|
||||
&& COMMAND=pgcli || COMMAND=psql
|
||||
|
||||
[[ $COMMAND =~ psql ]] && WARNING "using 'psql' instead"
|
||||
|
||||
POSTGRES__SET_LOGIN_ARGS $@
|
||||
|
||||
STATUS "performing login : $_USER@$_HOST:$_PORT/$_NAME"
|
||||
STATUS "working directory : $DATA_DIR"
|
||||
STATUS "
|
||||
performing login : $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME
|
||||
working directory : $DATA_DIR
|
||||
"
|
||||
|
||||
eval PGPASSWORD=$_PASS pgcli ${_ARGS[@]}
|
||||
eval PGPASSWORD=$(printf '%q ' "$DB_PASS") $COMMAND ${PSQL_ARGS[@]}
|
||||
}
|
||||
|
||||
#####################################################################
|
||||
|
||||
POSTGRES__SET_LOGIN_ARGS() {
|
||||
# allow for manual override with PSQL_ARGS
|
||||
[[ ${#PSQL_ARGS[@]} -gt 0 ]] && return 0
|
||||
|
||||
local DATA_DIR_PREFIX
|
||||
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case $1 in
|
||||
--host ) _ARGS+=(-h $2); _HOST="$2"; shift 1 ;;
|
||||
--name ) _ARGS+=(-d $2); _NAME="$2"; shift 1 ;;
|
||||
--port ) _ARGS+=(-p $2); _PORT="$2"; shift 1 ;;
|
||||
--user ) _ARGS+=(-U $2); _USER="$2"; shift 1 ;;
|
||||
-h | --host ) DB_HOST="$2"; shift 1 ;;
|
||||
-p | --port ) DB_PORT="$2"; shift 1 ;;
|
||||
-d | --name ) DB_NAME="$2"; shift 1 ;;
|
||||
-U | --user ) DB_USER="$2"; shift 1 ;;
|
||||
-P | --pass ) DB_PASS="$2"; shift 1 ;;
|
||||
|
||||
--pass ) _PASS="$2"; shift 1 ;;
|
||||
--file ) PSQL_FILE="$2"; shift 1 ;;
|
||||
|
||||
--file ) _FILE="$2"; shift 1 ;;
|
||||
--data-dir-prefix ) DATA_DIR_PREFIX="$2"; shift 1 ;;
|
||||
|
||||
* ) _ARGS+=($1) ;;
|
||||
* ) PSQL_ARGS+=($1) ;;
|
||||
esac
|
||||
shift 1
|
||||
done
|
||||
|
||||
[ $_FILE ] && [ ! -f "$_FILE" ] && {
|
||||
ERROR "no such file '$_FILE'"
|
||||
exit 1
|
||||
[ $PSQL_FILE ] && [ ! -f "$PSQL_FILE" ] \
|
||||
&& ERROR "no such file available:\n'$PSQL_FILE'"
|
||||
|
||||
CHECK_ERRORS
|
||||
|
||||
##########################################
|
||||
|
||||
[ $DATA_DIR_PREFIX ] && {
|
||||
DATA_DIR="$SCWRYPTS_DATA_PATH/$DATA_DIR_PREFIX"
|
||||
} || {
|
||||
[ $DB_HOST ] && [ $DB_NAME ] \
|
||||
&& DATA_DIR="$SCWRYPTS_DATA_PATH/db/$DB_HOST/$DB_NAME" \
|
||||
|| DATA_DIR="$EXECUTION_DIR/temp-db" \
|
||||
;
|
||||
}
|
||||
|
||||
[ $_HOST ] && [ $_NAME ] \
|
||||
&& DATA_DIR="$SCWRYPTS_DATA_PATH/db/$_HOST/$_NAME" \
|
||||
|| DATA_DIR="$EXECUTION_DIR/temp-db" \
|
||||
;
|
||||
|
||||
[ ! -d "$DATA_DIR" ] && mkdir -p "$DATA_DIR"
|
||||
mkdir -p "$DATA_DIR"
|
||||
cd "$DATA_DIR"
|
||||
|
||||
return 0
|
||||
}
|
||||
[ $DB_HOST ] || DB_HOST=127.0.0.1
|
||||
[ $DB_PORT ] || DB_PORT=5432
|
||||
[ $DB_NAME ] || DB_NAME=postgres
|
||||
[ $DB_USER ] || DB_USER=postgres
|
||||
|
||||
PSQL_ARGS+=(-h $DB_HOST -p $DB_PORT -d $DB_NAME -U $DB_USER)
|
||||
}
|
||||
|
Reference in New Issue
Block a user