sqlx/sqlx-cli
Austin Bonander 37e59f1494
doc(readme): note requirement of offline feature
for `cargo sqlx prepare`
2020-06-17 12:50:56 -07:00
..
src fix(cli): fix core usage in sqlx-cli 2020-05-30 23:12:53 -07:00
.gitignore rename cargo-sqlx -> sqlx-cli 2020-05-30 16:02:37 -07:00
Cargo.toml chore: bump version to 0.4.0-pre 2020-05-30 23:15:52 -07:00
README.md doc(readme): note requirement of offline feature 2020-06-17 12:50:56 -07:00

SQLx CLI

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

Install

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

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

Commands

All commands require DATABASE_URL to be set, either in the environment or in a .env file in the current working directory.

database and migrate subcommands support only Postgres; MySQL and SQLite are TODO.

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

# Postgres
DATABASE_URL=postgres://postgres@localhost/my_database

Create/drop the database at DATABASE_URL

sqlx database create
sqlx database drop

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 migration run

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

Note: Down-Migrations

Down-migrations are currently a non-planned feature as their utility seems dubious but we welcome any contributions (discussions/code) regarding this matter.

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

Note: must be run as cargo sqlx.

cargo sqlx prepare

Saves query data 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.