03-rename-system-tables.sql 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. -- Migration: Rename system tables with __sys_ prefix
  2. -- This separates internal platform tables from user-created tables
  3. -- Step 1: Drop foreign key constraints
  4. ALTER TABLE api_keys DROP CONSTRAINT IF EXISTS api_keys_created_by_fkey;
  5. ALTER TABLE applications DROP CONSTRAINT IF EXISTS applications_created_by_fkey;
  6. ALTER TABLE deployments DROP CONSTRAINT IF EXISTS deployments_application_id_fkey;
  7. ALTER TABLE audit_logs DROP CONSTRAINT IF EXISTS audit_logs_user_id_fkey;
  8. ALTER TABLE sessions DROP CONSTRAINT IF EXISTS sessions_user_id_fkey;
  9. -- Step 2: Rename tables
  10. ALTER TABLE users RENAME TO __sys_users;
  11. ALTER TABLE sessions RENAME TO __sys_sessions;
  12. ALTER TABLE api_keys RENAME TO __sys_api_keys;
  13. ALTER TABLE applications RENAME TO __sys_applications;
  14. ALTER TABLE deployments RENAME TO __sys_deployments;
  15. ALTER TABLE audit_logs RENAME TO __sys_audit_logs;
  16. -- Step 3: Recreate foreign key constraints with new table names
  17. ALTER TABLE __sys_api_keys
  18. ADD CONSTRAINT __sys_api_keys_created_by_fkey
  19. FOREIGN KEY (created_by) REFERENCES __sys_users(id) ON DELETE SET NULL;
  20. ALTER TABLE __sys_applications
  21. ADD CONSTRAINT __sys_applications_created_by_fkey
  22. FOREIGN KEY (created_by) REFERENCES __sys_users(id) ON DELETE SET NULL;
  23. ALTER TABLE __sys_deployments
  24. ADD CONSTRAINT __sys_deployments_application_id_fkey
  25. FOREIGN KEY (application_id) REFERENCES __sys_applications(id) ON DELETE CASCADE;
  26. ALTER TABLE __sys_audit_logs
  27. ADD CONSTRAINT __sys_audit_logs_user_id_fkey
  28. FOREIGN KEY (user_id) REFERENCES __sys_users(id) ON DELETE SET NULL;
  29. ALTER TABLE __sys_sessions
  30. ADD CONSTRAINT __sys_sessions_user_id_fkey
  31. FOREIGN KEY (user_id) REFERENCES __sys_users(id) ON DELETE CASCADE;
  32. -- Step 4: Rename indexes
  33. ALTER INDEX IF EXISTS users_pkey RENAME TO __sys_users_pkey;
  34. ALTER INDEX IF EXISTS idx_users_email RENAME TO __sys_idx_users_email;
  35. ALTER INDEX IF EXISTS idx_users_email_verified RENAME TO __sys_idx_users_email_verified;
  36. ALTER INDEX IF EXISTS users_email_key RENAME TO __sys_users_email_key;
  37. ALTER INDEX IF EXISTS sessions_pkey RENAME TO __sys_sessions_pkey;
  38. ALTER INDEX IF EXISTS idx_sessions_user_id RENAME TO __sys_idx_sessions_user_id;
  39. ALTER INDEX IF EXISTS idx_sessions_token_hash RENAME TO __sys_idx_sessions_token_hash;
  40. ALTER INDEX IF EXISTS api_keys_pkey RENAME TO __sys_api_keys_pkey;
  41. ALTER INDEX IF EXISTS api_keys_key_hash_key RENAME TO __sys_api_keys_key_hash_key;
  42. ALTER INDEX IF EXISTS applications_pkey RENAME TO __sys_applications_pkey;
  43. ALTER INDEX IF EXISTS applications_slug_key RENAME TO __sys_applications_slug_key;
  44. ALTER INDEX IF EXISTS idx_applications_status RENAME TO __sys_idx_applications_status;
  45. ALTER INDEX IF EXISTS deployments_pkey RENAME TO __sys_deployments_pkey;
  46. ALTER INDEX IF EXISTS idx_deployments_app_id RENAME TO __sys_idx_deployments_app_id;
  47. ALTER INDEX IF EXISTS audit_logs_pkey RENAME TO __sys_audit_logs_pkey;
  48. ALTER INDEX IF EXISTS idx_audit_logs_user_id RENAME TO __sys_idx_audit_logs_user_id;
  49. ALTER INDEX IF EXISTS idx_audit_logs_created_at RENAME TO __sys_idx_audit_logs_created_at;
  50. -- Step 5: Drop and recreate triggers with new table names
  51. DROP TRIGGER IF EXISTS update_users_updated_at ON __sys_users;
  52. DROP TRIGGER IF EXISTS update_applications_updated_at ON __sys_applications;
  53. CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON __sys_users
  54. FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
  55. CREATE TRIGGER update_applications_updated_at BEFORE UPDATE ON __sys_applications
  56. FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
  57. -- Verification queries (commented out)
  58. -- SELECT tablename FROM pg_tables WHERE schemaname = 'public' ORDER BY tablename;