Some checks failed
CI / Run tests and lints (push) Failing after 29s
CI / Build CLI docs (push) Has been skipped
CI / Run Playwright end-to-end tests (mysql) (push) Failing after 3s
CI / Run Playwright end-to-end tests (postgres) (push) Failing after 2s
CI / Run Playwright end-to-end tests (sqlite) (push) Failing after 3s
CodeQL / Analyze (go) (push) Failing after 4s
CodeQL / Analyze (javascript) (push) Failing after 3s
Docker Image Scanners / scanners (push) Failing after 4s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Run end-to-end tests (postgres) (push) Failing after 19s
CI / Run end-to-end tests (sqlite) (push) Failing after 2s
CI / Run Playwright end-to-end tests (cockroach) (push) Failing after 2s
CI / Draft newsletter (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
46 lines
1.9 KiB
Markdown
46 lines
1.9 KiB
Markdown
# SQL Migrations
|
|
|
|
Migrations consist of one `up` and one `down` file.
|
|
To create these SQL migrations, copy the last migration in `./persistence/sql/migrations/sql` and change the timestamp to the current timestamp and the name to the desired name.
|
|
|
|
If some logic is different for one of the database systems, add the id after the name to the file name.
|
|
The content of that file will override the content of the "general" file for that particular DB system.
|
|
|
|
Example:
|
|
|
|
`20220802103909000000_courier_send_count.up.sql`
|
|
and
|
|
`20220802103909000000_courier_send_count.down.sql`
|
|
|
|
With for example cockroach specific behavior:
|
|
|
|
`20220802103909000000_courier_send_count.cockroach.up.sql`
|
|
and
|
|
`20220802103909000000_courier_send_count.cockroach.down.sql`
|
|
|
|
Replace `cockroach` with `mysql`, `postgres` or `sqlite` if applicable.
|
|
|
|
## Old Way
|
|
|
|
To create SQL migrations, target each database individually and run
|
|
|
|
```
|
|
$ dialect=mysql # or postgres|cockroach|sqlite
|
|
$ name=
|
|
$ ory dev pop migration create -d=$dialect ./persistence/sql/migrations/templates $name
|
|
$ soda generate sql -e mysql -c ./persistence/sql/.soda.yml -p ./persistence/sql/migrations/templates [name]
|
|
$ soda generate sql -e sqlite -c ./persistence/sql/.soda.yml -p ./persistence/sql/migrations/templates [name]
|
|
$ soda generate sql -e postgres -c ./persistence/sql/.soda.yml -p ./persistence/sql/migrations/templates [name]
|
|
$ soda generate sql -e cockroach -c ./persistence/sql/.soda.yml -p ./persistence/sql/migrations/templates [name]
|
|
```
|
|
|
|
and remove the `sqlite` part from the newly generated file to create a SQL migrations that works with all
|
|
aforementioned databases.
|
|
|
|
## Rendering Migrations
|
|
|
|
Because migrations needs to be backwards compatible, and because fizz migrations might change, we render
|
|
fizz migrations to raw SQL statements using `make migrations-render`.
|
|
|
|
The concrete migrations being applied can be found in [`./migrations/sql`](./migrations/sql).
|