6 releases (3 breaking)
new 0.5.0 | Mar 13, 2025 |
---|---|
0.4.1 | Mar 6, 2025 |
0.3.0 | Feb 15, 2025 |
0.2.1 | Feb 14, 2025 |
#653 in Database interfaces
672 downloads per month
115KB
3K
SLoC
sql-schema
This crate provides a command line tool for generating schema migrations based on edits to a canonical schema file.
Status
This crate is in an early stage of development and may not work with your schema or have unexpected behaviour—always double check the output.
Usage
# install the cli
cargo install sql-schema
# generate a schema file from existing migrations
sql-schema schema \
--schema-path ./schema/schema.sql \ # this is the default value
--migrations-dir ./schema/migrations # this is the default value
# -> writing ./schema/schema.sql
# generate a migration after editing the schema file
sql-schema migration \
--name my_new_migration \ # default is "generated_migration"
--include-down true \ # default is true if any down migration exists OR if there aren't any
--schema-path ./schema/schema.sql \ # this is the default value
--migrations-dir ./schema/migrations # this is the default value
# -> writing schema/migrations/1739486729_my_new_migration.up.sql
# -> writing schema/migrations/1739486729_my_new_migration.down.sql
Goals
- Time saver: You can generate an up and down migration for the cost of editing a schema.
- Non restrictive: You can edit the generated migrations as needed (e.g. if you need to migrate data along side a schema change).
- Minimal buy-in: You don't have to change anything about your project to start or stop using it (committing the generated schema is optional).
- Works with any SQL dialect.
- Plays nicely with other tools such as sqlc and sqlx.
Assumptions
- You have a dir containing migrations written in SQL using the
.sql
file extension. - The sum of all the migrations is your full database schema.
- The migration file names are sortable and follow a supported naming convention.
Licensing
All code in this repository is licensed under the Apache Software License 2.0.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.
Dependencies
~9MB
~168K SLoC