home / skills / nilecui / skillsbase / create-database-migration
This skill guides you through creating and applying Ghost MySQL migrations using slimer, ensuring schema changes are consistent and testable.
npx playbooks add skill nilecui/skillsbase --skill create-database-migrationReview the files below or copy the command above to add this skill to your agents.
---
name: Create database migration
description: Create a database migration to add a table, add columns to an existing table, add a setting, or otherwise change the schema of Ghost's MySQL database.
---
# Create Database Migration
## Instructions
1. Change directories into `ghost/core`: `cd ghost/core`
2. Create a new, empty migration file using slimer: `slimer migration <name-of-database-migration>`. IMPORTANT: do not create the migration file manually; always use slimer to create the initial empty migration file.
3. The above command will create a new directory in `ghost/core/core/server/data/migrations/versions` if needed, and create the empty migration file with the appropriate name.
4. Update the migration file with the changes you want to make in the database, following the existing patterns in the codebase. Where appropriate, prefer to use the utility functions in `ghost/core/core/server/data/migrations/utils/*`.
5. Update the schema definition file in `ghost/core/core/server/data/schema/schema.js`, and make sure it aligns with the latest changes from the migration.
6. Test the migration manually: `yarn knex-migrator migrate --v {version directory} --force`
7. If adding or dropping a table, update `ghost/core/core/server/data/exporter/table-lists.js` as appropriate.
8. Run the schema integrity test, and update the hash: `yarn test:single test/unit/server/data/schema/integrity.test.js`
9. Run unit tests in Ghost core, and iterate until they pass: `cd ghost/core && yarn test:unit`
## Examples
See [examples.md](examples.md) for example migrations.
## Rules
See [rules.md](rules.md) for rules that should always be followed when creating database migrations.This skill creates a Ghost MySQL database migration to add tables, modify existing tables, add settings, or otherwise change the schema. It guides you through using the slimer command to generate a migration skeleton, updating migration code and schema definitions, and validating changes with tests. The workflow enforces existing patterns and utilities to keep migrations consistent and safe.
Use slimer to generate an empty migration file in the correct versions directory, then implement schema changes by editing that migration and the project's schema definition. Leverage provided migration utilities and follow existing code patterns. Validate changes by running the migrator, updating the schema integrity hash, and executing unit tests until everything passes.
What command creates the initial migration file?
Run slimer migration <name-of-database-migration> from ghost/core; slimer generates the empty file in the correct versions directory.
Can I create the migration file manually?
No. Always use slimer to ensure correct naming and placement of the migration file.
How do I test the migration locally?
Run yarn knex-migrator migrate --v {version-directory} --force to apply the migration, then run the schema integrity test and unit tests (yarn test:unit) until they pass.
What else must I update when adding or dropping a table?
Update the exporter table-lists.js and the schema.js file, then update the integrity hash and run tests.