Files
backend_v2/init-db.sh
toom1996 5db90af73a update
2026-10-19 00:33:25 +08:00

46 lines
1.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 首次建库:把导出的 SQL 灌进空的 PostgreSQL 容器
#
# ./init-db.sh /path/to/dump.sql
#
# 前置:在开发机导出最新结构与数据(含 pgvector 扩展):
# go run ./cmd/dbtool dump -with-extension -out db/backups/db_dump.sql
#
# ⚠️ 仓库里 db/backups/db_dump.sql 是 2026-09-21 导出的,比当前代码少了之后两个月
# 的新增迁移(向量表 / 近邻对表 / 品牌重编号 / published_at / image_size 等),
# 直接拿它建库会导致后端启动后字段缺失——所以这里必须显式传入文件路径。
#
# 注意:只在库为空时执行一次;生产库已有数据时重跑会与现有行冲突。
set -euo pipefail
cd "$(dirname "$0")"
[ -f .env ] || { echo "!! 缺少 .env:先 cp .env.example .env 并填写"; exit 1; }
set -a; . ./.env; set +a
DUMP="${1:-}"
if [ -z "$DUMP" ]; then
echo "用法:./init-db.sh <dump.sql>"
echo ""
echo " 请传入一份与当前代码匹配的 SQL(含全部新增迁移)。"
echo " 导出命令:go run ./cmd/dbtool dump -with-extension -out db/backups/db_dump.sql"
exit 1
fi
[ -f "$DUMP" ] || { echo "!! 找不到 dump 文件:$DUMP"; exit 1; }
echo "==> 启动数据库"
docker compose up -d db
echo "==> 等待数据库就绪"
for i in $(seq 1 30); do
if docker compose exec -T db pg_isready -U "${DB_USER:-fashion}" -d "${DB_NAME:-fashion}" >/dev/null 2>&1; then
break
fi
[ "$i" -eq 30 ] && { echo "!! 数据库 60 秒未就绪"; docker compose logs --tail 30 db; exit 1; }
sleep 2
done
echo "==> 导入 $DUMP"
docker compose exec -T db psql -U "${DB_USER:-fashion}" -d "${DB_NAME:-fashion}" -v ON_ERROR_STOP=1 < "$DUMP"
echo "==> 完成。可以执行 ./deploy.sh all 启动全部服务"