46 lines
1.7 KiB
Bash
46 lines
1.7 KiB
Bash
#!/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 启动全部服务"
|