Files
Reactive-Resume/scripts/database/reset.ts
T
2026-01-23 01:07:52 +01:00

46 lines
1.3 KiB
TypeScript

import { sql } from "drizzle-orm";
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
import { env } from "@/utils/env";
export async function resetDatabase() {
console.log("⌛ Resetting database...");
const pool = new Pool({ connectionString: env.DATABASE_URL });
const db = drizzle({ client: pool });
// Extract the username from a PostgreSQL connection string like: postgresql://postgres:password@localhost:5432/db
const username = (() => {
try {
const match = env.DATABASE_URL.match(/^postgres(?:ql)?:\/\/([^:]+):[^@]+@/);
return match ? match[1] : undefined;
} catch {
return undefined;
}
})();
console.log("🔑 Username:", username);
try {
await db.transaction(async (tx) => {
await tx.execute(sql`DROP SCHEMA drizzle CASCADE`);
await tx.execute(sql`CREATE SCHEMA drizzle`);
await tx.execute(sql.raw(`GRANT ALL ON SCHEMA drizzle TO ${username}`));
await tx.execute(sql`DROP SCHEMA public CASCADE`);
await tx.execute(sql`CREATE SCHEMA public`);
await tx.execute(sql.raw(`GRANT ALL ON SCHEMA public TO ${username}`));
});
console.log("✅ Database reset completed");
} catch (error) {
console.error("🚨 Database reset failed:", error);
} finally {
await pool.end();
}
}
if (import.meta.main) {
await resetDatabase();
}