#!/bin/sh set -eu # ============================================ # 微信营销管理系统 MVP - 数据库初始化 # ============================================ ROOT="$(cd "$(dirname "$0")" && pwd)" BIN="/usr/local/opt/postgresql@17/bin" DATA="$ROOT/data" SOCKET="$ROOT/socket" LOG="$ROOT/postgres.log" DBNAME="wxchat_sales" mkdir -p "$SOCKET" chmod 700 "$SOCKET" # 检查 PostgreSQL 17 是否安装 if [ ! -x "$BIN/pg_ctl" ]; then echo "[ERROR] 未找到 PostgreSQL 17: $BIN/pg_ctl" echo "请安装: brew install postgresql@17" exit 1 fi # 初始化数据目录(仅首次) if [ ! -f "$DATA/PG_VERSION" ]; then echo "[INFO] 初始化 PostgreSQL 数据目录..." "$BIN/initdb" -D "$DATA" --encoding=UTF8 --locale=en_US.UTF-8 \ --auth-local=trust --auth-host=trust fi # 启动 PostgreSQL(端口 5434) if ! "$BIN/pg_ctl" -D "$DATA" status >/dev/null 2>&1; then echo "[INFO] 启动 PostgreSQL (端口 5434)..." "$BIN/pg_ctl" -D "$DATA" -l "$LOG" \ -o "-p 5434 -h '' -k $SOCKET" start # 等待就绪 for i in $(seq 1 10); do if "$BIN/psql" -h "$SOCKET" -p 5434 -d postgres -c "SELECT 1" >/dev/null 2>&1; then break fi sleep 0.5 done fi # 创建数据库(幂等) if ! "$BIN/psql" -h "$SOCKET" -p 5434 -d postgres -c "SELECT 1 FROM pg_database WHERE datname='$DBNAME'" | grep -q 1; then echo "[INFO] 创建数据库: $DBNAME" "$BIN/createdb" -h "$SOCKET" -p 5434 "$DBNAME" fi # 执行建表 SQL echo "[INFO] 执行 schema.sql..." "$BIN/psql" -h "$SOCKET" -p 5434 -d "$DBNAME" -f "$ROOT/schema.sql" # 验证 COUNT=$("$BIN/psql" -h "$SOCKET" -p 5434 -d "$DBNAME" -t -c "SELECT count(*) FROM salesperson") echo "[OK] 数据库就绪,销售人员数量: $COUNT" echo "[OK] 连接方式: $BIN/psql -h $SOCKET -p 5434 -d $DBNAME"