package main import ( "database/sql" "fmt" "log" "os" "github.com/joho/godotenv" _ "github.com/lib/pq" ) func main() { // Try to load .env, but don't fail if missing (env vars might be set manually) _ = godotenv.Load("../../.env") // Get DB URL from env connStr := os.Getenv("DATABASE_URL") if connStr == "" { log.Fatal("DATABASE_URL is required") } fmt.Println("Connecting to DB...") db, err := sql.Open("postgres", connStr) if err != nil { log.Fatal(err) } defer db.Close() if err := db.Ping(); err != nil { log.Fatalf("Failed to ping DB: %v", err) } fmt.Println("Connected!") queries := []string{ "ALTER TABLE public.profiles ADD COLUMN IF NOT EXISTS is_private BOOLEAN NOT NULL DEFAULT false;", "ALTER TABLE public.profiles ADD COLUMN IF NOT EXISTS is_official BOOLEAN NOT NULL DEFAULT false;", "ALTER TABLE public.follows ADD COLUMN IF NOT EXISTS status TEXT NOT NULL DEFAULT 'accepted';", // Fix constraint if missing `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'follows_status_check') THEN ALTER TABLE public.follows ADD CONSTRAINT follows_status_check CHECK (status IN ('pending', 'accepted')); END IF; END $$;`, } for _, q := range queries { fmt.Printf("Running: %s...\n", q) _, err := db.Exec(q) if err != nil { fmt.Printf("Error (might be okay if exists): %v\n", err) } else { fmt.Println("Success.") } } fmt.Println("Done.") }