feat: 从 SQLite 切换到 PostgreSQL
- Prisma provider 改为 postgresql - docker-compose 新增 postgres 服务(带健康检查) - Dockerfile 移除 sqlite3/template.db,改用 npm install prisma 做运行时 schema 同步 - docker-entrypoint.sh 简化为 prisma db push + node server.js
This commit is contained in:
+1
-30
@@ -1,36 +1,7 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
TEMPLATE="/app/template.db"
|
||||
DB="/app/data/prod.db"
|
||||
|
||||
if [ ! -f "$DB" ]; then
|
||||
echo "[db] First run — creating database from template"
|
||||
cp "$TEMPLATE" "$DB"
|
||||
exec node server.js
|
||||
fi
|
||||
|
||||
echo "[db] Syncing schema..."
|
||||
npx prisma db push --skip-generate --accept-data-loss
|
||||
|
||||
# 1) Create any new tables
|
||||
sqlite3 "$TEMPLATE" ".schema" | \
|
||||
sed 's/CREATE TABLE /CREATE TABLE IF NOT EXISTS /g' | \
|
||||
sed 's/CREATE INDEX /CREATE INDEX IF NOT EXISTS /g' | \
|
||||
sed 's/CREATE UNIQUE INDEX /CREATE UNIQUE INDEX IF NOT EXISTS /g' | \
|
||||
sqlite3 "$DB" 2>/dev/null || true
|
||||
|
||||
# 2) Add missing columns to existing tables
|
||||
for table in $(sqlite3 "$TEMPLATE" "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '_prisma%'"); do
|
||||
prod_cols=$(sqlite3 "$DB" "PRAGMA table_info('$table')" 2>/dev/null | cut -d'|' -f2 || echo "")
|
||||
|
||||
sqlite3 "$TEMPLATE" "PRAGMA table_info('$table')" | while IFS='|' read -r _cid name type notnull dflt _pk; do
|
||||
if ! echo "$prod_cols" | grep -qx "$name"; then
|
||||
alter="ALTER TABLE \"$table\" ADD COLUMN \"$name\" $type"
|
||||
[ -n "$dflt" ] && alter="$alter DEFAULT $dflt"
|
||||
sqlite3 "$DB" "$alter" 2>/dev/null && echo "[db] + $table.$name" || true
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
echo "[db] Schema sync complete"
|
||||
exec node server.js
|
||||
|
||||
Reference in New Issue
Block a user