Files
shz-backend/.codex/skills/shz-full-development/scripts/execute-test-sql.sh

53 lines
1.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 在 SHZ 测试 HighGo 数据库执行指定 SQL 文件。
# 仅支持测试环境;必须显式设置 CONFIRM_TEST_SQL=yes。
set -Eeuo pipefail
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
PROJECT_DIR="$(cd -- "$SCRIPT_DIR/../../../.." && pwd -P)"
MIGRATION_FILE="${1:-}"
PASSWORD_FILE="${HIGHGO_TEST_PASSWORD_FILE:-${HIGHGO_PASSWORD_FILE:-$PROJECT_DIR/.codex/skills/query-shz-highgo/.password}}"
TEST_SSH_HOST="${HIGHGO_TEST_SSH_HOST:-root@47.111.103.66}"
TEST_SSH_PORT="${HIGHGO_TEST_SSH_PORT:-22}"
TEST_PSQL_PATH="${HIGHGO_TEST_PSQL_PATH:-/opt/HighGo4.5.7-see/bin/psql}"
TEST_DB_HOST="${HIGHGO_TEST_DB_HOST:-127.0.0.1}"
TEST_DB_PORT="${HIGHGO_TEST_DB_PORT:-5866}"
TEST_DB_NAME="${HIGHGO_TEST_DB_NAME:-highgo}"
TEST_DB_USER="${HIGHGO_TEST_DB_USER:-sysdba}"
if [[ "${CONFIRM_TEST_SQL:-}" != "yes" ]]; then
echo '为防止误写测试数据库,请使用 CONFIRM_TEST_SQL=yes 执行。' >&2
exit 2
fi
if [[ -z "$MIGRATION_FILE" ]]; then
echo "用法CONFIRM_TEST_SQL=yes $0 <sql-file>" >&2
exit 2
fi
if [[ ! -r "$MIGRATION_FILE" ]]; then
echo "SQL 文件不可读:$MIGRATION_FILE" >&2
exit 2
fi
if [[ ! -r "$PASSWORD_FILE" ]]; then
echo '测试数据库密码文件不可读。' >&2
exit 2
fi
command -v ssh >/dev/null 2>&1 || {
echo '缺少必要命令ssh' >&2
exit 2
}
printf '执行测试数据库 SQL%s\n' "$(basename "$MIGRATION_FILE")"
{
cat "$PASSWORD_FILE"
printf '\n'
cat "$MIGRATION_FILE"
} | ssh -o BatchMode=yes -o ConnectTimeout=20 -p "$TEST_SSH_PORT" "$TEST_SSH_HOST" \
"IFS= read -r PGPASSWORD; export PGPASSWORD; export PGOPTIONS='-c search_path=shz,public -c statement_timeout=30000'; exec '$TEST_PSQL_PATH' -X --no-psqlrc -h '$TEST_DB_HOST' -p '$TEST_DB_PORT' -U '$TEST_DB_USER' -d '$TEST_DB_NAME' -v ON_ERROR_STOP=1 -f -"
printf '测试数据库 SQL 执行成功:%s\n' "$(basename "$MIGRATION_FILE")"