#database #postgres #database-management #migration

bin+lib sqlx-models-cli

Command-line utility for SQLx, the Rust SQL toolkit

3 unstable releases

0.1.1 Sep 22, 2021
0.1.0 Sep 15, 2021
0.0.1 Sep 6, 2021

#1729 in Database interfaces


963 lines

SQLx Models CLI

SQLx's associated command-line utility for managing databases, migrations, and enabling "offline" mode with sqlx::query!() and friends.


With Rust toolchain

# supports all databases supported by SQLx
$ cargo install sqlx-models-cli

# only for postgres
$ cargo install sqlx-modles-cli --no-default-features --features postgres


All commands require that a database url is provided. This can be done either with the --database-url command line option or by setting DATABASE_URL, either in the environment or in a .env file in the current working directory.

For more details, run sqlx <command> --help.

# Postgres

Create/drop the database at DATABASE_URL

$ sqlx database create
$ sqlx database drop

Generate automated migrations

You can automatically generate migrations with the following command:

$ sqlx migrate generate

You may also use the shortcut:

$ sqlx mig gen

This will generate one sql table for each model in your application using the sqlx-models crate.

Create and run migrations

$ sqlx migrate add <name>

Creates a new file in migrations/<timestamp>_<name>.sql. Add your database schema changes to this new file.

$ sqlx migrate run

Compares the migration history of the running database against the migrations/ folder and runs any scripts that are still pending.

Enable building in "offline mode" with query!()

Note: must be run as cargo sqlx.

cargo sqlx prepare

Saves query metadata to sqlx-data.json in the current directory; check this file into version control and an active database connection will no longer be needed to build your project.

Has no effect unless the offline feature of sqlx is enabled in your project. Omitting that feature is the most likely cause if you get a sqlx-data.json file that looks like this:

    "database": "PostgreSQL"

cargo sqlx prepare --check

Exits with a nonzero exit status if the data in sqlx-data.json is out of date with the current database schema and queries in the project. Intended for use in Continuous Integration.

Force building in offline mode

To make sure an accidentally-present DATABASE_URL environment variable or .env file does not result in cargo build (trying to) access the database, you can set the SQLX_OFFLINE environment variable to true.

If you want to make this the default, just add it to your .env file. cargo sqlx prepare will still do the right thing and connect to the database.


~493K SLoC