#!/bin/bash set -eu # ============================================ # 远程服务器端部署脚本(由 deploy.sh 调用) # 在远程服务器上执行数据库迁移和数据预置 # ============================================ DEMO_DIR="/opt/wxsales/demo" # 查找 psql 路径 PSQL="" for p in /usr/bin/psql /usr/local/bin/psql /usr/pgsql-17/bin/psql /usr/local/pg17/bin/psql; do if [ -x "$p" ]; then PSQL="$p"; break; fi done if [ -z "$PSQL" ]; then echo "[ERROR] 未找到 psql" exit 1 fi # 远程环境:PG 15 端口 5432,用 postgres 用户连接 PSQL_CMD="$PSQL -h 127.0.0.1 -p 5432 -U postgres -d wxchat_sales" # 检查连接方式:优先 su postgres,其次直连 PG_CONN_OK=0 su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c 'SELECT 1'" >/dev/null 2>&1 && PG_CONN_OK=1 if [ "$PG_CONN_OK" -eq 0 ]; then echo "[WARN] postgres 用户连接失败,尝试 root 直连..." PSQL_CMD="$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales" fi echo "[INFO] 使用 psql: $PSQL" echo "[INFO] 执行 schema.sql..." # 执行 schema.sql(幂等,包含迁移语句) if [ "$PG_CONN_OK" -eq 1 ]; then su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -f $DEMO_DIR/db/schema.sql" 2>&1 || { echo "[WARN] schema.sql 执行有警告,尝试继续..." } else $PSQL_CMD -f "$DEMO_DIR/db/schema.sql" 2>&1 || { echo "[WARN] schema.sql 执行有警告,尝试继续..." } fi # 重置序列 if [ "$PG_CONN_OK" -eq 1 ]; then su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c \"SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);\"" 2>/dev/null || true su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -c \"SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);\"" 2>/dev/null || true else $PSQL_CMD -c "SELECT setval('product_id_seq', COALESCE((SELECT max(id) FROM product), 1), true);" 2>/dev/null || true $PSQL_CMD -c "SELECT setval('salesperson_id_seq', COALESCE((SELECT max(id) FROM salesperson), 1), true);" 2>/dev/null || true fi # 验证 if [ "$PG_CONN_OK" -eq 1 ]; then PRODUCT_COUNT=$(su - postgres -c "$PSQL -h 127.0.0.1 -p 5432 -d wxchat_sales -t -c 'SELECT count(*) FROM product;'" 2>/dev/null | xargs || echo "0") else PRODUCT_COUNT=$($PSQL_CMD -t -c "SELECT count(*) FROM product;" 2>/dev/null | xargs || echo "0") fi echo "[OK] 产品数量: $PRODUCT_COUNT" echo "[OK] 数据库迁移完成"