fix(deploy): 修复迁移执行和数据库测试问题

1. 迁移执行:使用 cat + pipe 替代 stdin 重定向,解决远程文件读取问题
2. 数据库表检测:修复 SQL 引号嵌套问题,使用正确的 psql 语法
This commit is contained in:
2026-04-19 17:53:29 +08:00
parent 58e52ce1c1
commit 778bf0e9e7

View File

@@ -761,9 +761,9 @@ test_database_connection() {
log_info " 测试表存在..."
local tables_result
tables_result=$(ssh "${REMOTE_USER}@${REMOTE_HOST}" \
"docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -c 'SELECT tablename FROM pg_tables WHERE schemaname = 'public' LIMIT 5;' 2>/dev/null" || echo "failed")
"docker exec ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME} -t -c 'SELECT tablename FROM pg_tables WHERE schemaname = '\''public'\'' LIMIT 5;' 2>/dev/null" || echo "failed")
if [[ ! "$tables_result" =~ "users" ]]; then
log_warn " users 表不存在"
log_warn " users 表不存在或查询失败: ${tables_result}"
return 1
fi
log_info " users 表存在"
@@ -1152,7 +1152,7 @@ run_migrations() {
fi
log_info " 执行迁移: $filename"
if ssh "${REMOTE_USER}@${REMOTE_HOST}" "docker exec -i ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME}" < "$sql_file"; then
if ssh "${REMOTE_USER}@${REMOTE_HOST}" "cat \"${sql_file}\" | docker exec -i ${DB_CONTAINER} psql -U ${DB_USER} -d ${DB_NAME}"; then
log_info " 完成: $filename"
else
log_warn " 迁移可能已执行或失败,继续"