Generate Django Database Migrations Commands Generate migrations automatically based on model changes: sentry django makemigrations For a specific app: sentry django makemigrations < app_name
Generate an empty migration (for data migrations or custom work): sentry django makemigrations < app_name
--empty After Generating If you added a new model, ensure it's imported in the app's init.py Review the generated migration for correctness Run sentry django sqlmigrate
to verify the SQL Guidelines Adding Columns Use db_default= instead of default= for columns with defaults Nullable columns: use null=True Not null columns: must have db_default set Adding Indexes For large tables, set is_post_deployment = True on the migration as index creation may exceed the 5s timeout. Deleting Columns Make column nullable ( null=True ) if not already Remove all code references Replace RemoveField with SafeRemoveField(..., deletion_action=DeletionAction.MOVE_TO_PENDING) Deploy, then create second migration with SafeRemoveField(..., deletion_action=DeletionAction.DELETE) Deleting Tables Remove all code references Replace DeleteModel with SafeDeleteModel(..., deletion_action=DeletionAction.MOVE_TO_PENDING) Deploy, then create second migration with SafeDeleteModel(..., deletion_action=DeletionAction.DELETE) Renaming Columns/Tables Don't rename in Postgres. Use db_column or Meta.db_table to keep the old name. Resolving Merge Conflicts If migrations_lockfile.txt conflicts: bin/update-migration < migration_name This renames your migration, updates dependencies, and fixes the lockfile.