Bump version for the N:N entry_secrets data model and related MCP/Web changes. Remove superseded SQL migration artifacts; rely on auto-migrate. Add structured errors, taxonomy normalization, and web i18n helpers. Made-with: Cursor
96 lines
2.7 KiB
Bash
Executable File
96 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# 同步测试环境数据到生产环境
|
|
# 用法: ./scripts/sync-test-to-prod.sh
|
|
|
|
set -euo pipefail
|
|
|
|
# PostgreSQL 客户端工具路径 (Homebrew libpq)
|
|
export PATH="/opt/homebrew/opt/libpq/bin:$PATH"
|
|
|
|
# SSL 配置
|
|
export PGSSLMODE=verify-full
|
|
export PGSSLROOTCERT=/etc/ssl/cert.pem
|
|
|
|
# 测试环境
|
|
TEST_DB="postgres://postgres:Voson_2026_Pg18!@db.refining.ltd:5432/secrets-nn-test"
|
|
|
|
# 生产环境
|
|
PROD_DB="postgres://postgres:Voson_2026_Pg18!@db.refining.ltd:5432/secrets-nn-prod"
|
|
|
|
echo "========================================="
|
|
echo " 测试环境 -> 生产环境 数据同步"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# 确认操作
|
|
read -p "⚠️ 此操作将覆盖生产环境数据,确认继续? (yes/no): " confirm
|
|
if [ "$confirm" != "yes" ]; then
|
|
echo "已取消"
|
|
exit 0
|
|
fi
|
|
|
|
echo ""
|
|
echo "步骤 1/4: 导出测试环境数据..."
|
|
TEMP_DIR=$(mktemp -d)
|
|
trap "rm -rf $TEMP_DIR" EXIT
|
|
|
|
# 导出测试环境数据(不含审计日志和历史记录)
|
|
pg_dump "$TEST_DB" \
|
|
--table=entries \
|
|
--table=secrets \
|
|
--table=entry_secrets \
|
|
--table=users \
|
|
--table=oauth_accounts \
|
|
--data-only \
|
|
--column-inserts \
|
|
--no-owner \
|
|
--no-privileges \
|
|
> "$TEMP_DIR/test_data.sql"
|
|
|
|
echo "✓ 测试数据已导出到临时文件"
|
|
echo " 文件大小: $(du -h "$TEMP_DIR/test_data.sql" | cut -f1)"
|
|
|
|
echo ""
|
|
echo "步骤 2/4: 备份当前生产数据..."
|
|
pg_dump "$PROD_DB" \
|
|
--table=entries \
|
|
--table=secrets \
|
|
--table=entry_secrets \
|
|
--table=users \
|
|
--table=oauth_accounts \
|
|
--data-only \
|
|
--column-inserts \
|
|
--no-owner \
|
|
--no-privileges \
|
|
> "$TEMP_DIR/prod_backup_$(date +%Y%m%d_%H%M%S).sql"
|
|
|
|
echo "✓ 生产数据已备份"
|
|
|
|
echo ""
|
|
echo "步骤 3/4: 清空生产环境目标表..."
|
|
psql "$PROD_DB" <<'SQL'
|
|
TRUNCATE TABLE entry_secrets CASCADE;
|
|
TRUNCATE TABLE secrets CASCADE;
|
|
TRUNCATE TABLE entries CASCADE;
|
|
SQL
|
|
|
|
echo "✓ 生产环境目标表已清空"
|
|
|
|
echo ""
|
|
echo "步骤 4/4: 导入测试数据到生产环境..."
|
|
psql "$PROD_DB" -f "$TEMP_DIR/test_data.sql" 2>&1 | tail -20
|
|
|
|
echo ""
|
|
echo "验证数据..."
|
|
echo "生产环境数据统计:"
|
|
psql "$PROD_DB" -c "SELECT 'users' as table_name, count(*) FROM users UNION ALL SELECT 'entries', count(*) FROM entries UNION ALL SELECT 'secrets', count(*) FROM secrets UNION ALL SELECT 'entry_secrets', count(*) FROM entry_secrets UNION ALL SELECT 'oauth_accounts', count(*) FROM oauth_accounts ORDER BY table_name;"
|
|
|
|
echo ""
|
|
echo "========================================="
|
|
echo " ✓ 数据同步完成!"
|
|
echo "========================================="
|
|
echo ""
|
|
echo "提示:"
|
|
echo " - 生产数据备份已保存在临时目录"
|
|
echo " - 临时文件将在脚本退出后自动删除"
|