init-db.sh 1.1 KB

123456789101112131415161718192021222324252627
  1. #!/bin/bash
  2. set -e
  3. trap 'echo "An error occurred. Exiting..."; exit 1' ERR
  4. cmd="$@"
  5. echo "Waiting for PostgreSQL to be ready..."
  6. until npx prisma db execute --schema prisma/schema.prisma --stdin <<< "SELECT 1" 2>/dev/null; do
  7. echo "PostgreSQL is unavailable - sleeping 2s..."
  8. sleep 2
  9. done
  10. echo "PostgreSQL is ready!"
  11. echo "Applying database migrations..."
  12. if ! npx prisma migrate deploy 2>/dev/null; then
  13. # P3005: existing DB without migration history (from db push).
  14. # Create empty migration table so migrate deploy can run.
  15. # 0_init is fully idempotent — safe on any DB state.
  16. echo "Existing database detected. Creating migration table..."
  17. npx prisma db execute --schema prisma/schema.prisma --stdin <<< 'CREATE TABLE IF NOT EXISTS "_prisma_migrations" ("id" VARCHAR(36) PRIMARY KEY NOT NULL, "checksum" VARCHAR(64) NOT NULL, "finished_at" TIMESTAMPTZ, "migration_name" VARCHAR(255) NOT NULL, "logs" TEXT, "rolled_back_at" TIMESTAMPTZ, "started_at" TIMESTAMPTZ NOT NULL DEFAULT now(), "applied_steps_count" INTEGER NOT NULL DEFAULT 0)'
  18. npx prisma migrate deploy
  19. fi
  20. echo "Migrations applied successfully!"
  21. echo "Starting application..."
  22. exec $cmd