99 lines
2.5 KiB
Bash
Executable File
99 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 修复 wang@example.com 用户的成员代数数据
|
|
|
|
SSH_HOST="180.76.240.104-root"
|
|
REMOTE_DIR="/var/www/chinese-family-tree"
|
|
DB_NAME="family_tree"
|
|
|
|
echo "========================================="
|
|
echo "修复 wang@example.com 用户的成员代数数据"
|
|
echo "========================================="
|
|
|
|
# 在服务器上执行 SQL 查询和修复
|
|
ssh $SSH_HOST bash << 'ENDSSH'
|
|
cd /var/www/chinese-family-tree
|
|
|
|
echo ""
|
|
echo "1. 查询当前数据状态..."
|
|
echo ""
|
|
|
|
sudo -u postgres psql -d family_tree << 'SQLEOF'
|
|
-- 查看 wang@example.com 用户信息
|
|
SELECT id, email, name FROM "User" WHERE email = 'wang@example.com';
|
|
|
|
-- 查看该用户的家族树
|
|
SELECT ft.id, ft.name, ft."rootMemberId", ft."ownerId"
|
|
FROM "FamilyTree" ft
|
|
JOIN "User" u ON ft."ownerId" = u.id
|
|
WHERE u.email = 'wang@example.com';
|
|
|
|
-- 查看成员代数分布
|
|
SELECT fm.generation, COUNT(*) as count, STRING_AGG(fm."fullName", ', ' ORDER BY fm."createdAt") as members
|
|
FROM "FamilyMember" fm
|
|
JOIN "FamilyTree" ft ON fm."treeId" = ft.id
|
|
JOIN "User" u ON ft."ownerId" = u.id
|
|
WHERE u.email = 'wang@example.com'
|
|
GROUP BY fm.generation
|
|
ORDER BY fm.generation;
|
|
SQLEOF
|
|
|
|
echo ""
|
|
echo "2. 检查是否需要修复..."
|
|
echo ""
|
|
|
|
# 获取最小代数
|
|
MIN_GEN=$(sudo -u postgres psql -d family_tree -t -A -c "
|
|
SELECT MIN(fm.generation)
|
|
FROM \"FamilyMember\" fm
|
|
JOIN \"FamilyTree\" ft ON fm.\"treeId\" = ft.id
|
|
JOIN \"User\" u ON ft.\"ownerId\" = u.id
|
|
WHERE u.email = 'wang@example.com';
|
|
")
|
|
|
|
echo "当前最小代数: $MIN_GEN"
|
|
|
|
if [ "$MIN_GEN" -gt 1 ]; then
|
|
OFFSET=$((MIN_GEN - 1))
|
|
echo "需要将所有代数减少 $OFFSET"
|
|
echo ""
|
|
echo "3. 执行修复..."
|
|
|
|
sudo -u postgres psql -d family_tree << SQLEOF
|
|
-- 开始事务
|
|
BEGIN;
|
|
|
|
-- 更新所有成员的代数
|
|
UPDATE "FamilyMember" fm
|
|
SET generation = generation - $OFFSET
|
|
FROM "FamilyTree" ft, "User" u
|
|
WHERE fm."treeId" = ft.id
|
|
AND ft."ownerId" = u.id
|
|
AND u.email = 'wang@example.com';
|
|
|
|
-- 查看修复后的结果
|
|
SELECT fm.generation, COUNT(*) as count, STRING_AGG(fm."fullName", ', ' ORDER BY fm."createdAt") as members
|
|
FROM "FamilyMember" fm
|
|
JOIN "FamilyTree" ft ON fm."treeId" = ft.id
|
|
JOIN "User" u ON ft."ownerId" = u.id
|
|
WHERE u.email = 'wang@example.com'
|
|
GROUP BY fm.generation
|
|
ORDER BY fm.generation;
|
|
|
|
-- 提交事务
|
|
COMMIT;
|
|
SQLEOF
|
|
|
|
echo ""
|
|
echo "✅ 修复完成!"
|
|
else
|
|
echo "✅ 代数正常(从第1世开始),无需修复"
|
|
fi
|
|
|
|
ENDSSH
|
|
|
|
echo ""
|
|
echo "========================================="
|
|
echo "修复脚本执行完成"
|
|
echo "========================================="
|