
Document installation & use of sqlc. Installing sqlc is only necessary to regenerate the database code. Once generated, the code is independent of sqlc.
63 lines
2.0 KiB
Markdown
63 lines
2.0 KiB
Markdown
---
|
|
title: Database
|
|
weight: 50
|
|
---
|
|
|
|
Flamenco Manager and Worker use SQLite as database, and GORM as
|
|
object-relational mapper (but see the note below).
|
|
|
|
Since SQLite has limited support for altering table schemas, migration requires
|
|
copying old data to a temporary table with the new schema, then swap out the
|
|
tables.
|
|
|
|
## SQLC
|
|
|
|
Flamenco mostly uses [GORM](https://gorm.io/) for interfacing with its SQLite database. This
|
|
is gradually being phased out, to be replaced with [SQLC](https://sqlc.dev/).
|
|
|
|
### Installing & using SQLC
|
|
|
|
SQLC can be installed ([installation docs][sqlc-install]) with a `go install`
|
|
command just like any other Go package, but that does depend on a C/C++
|
|
compiler:
|
|
|
|
```sh
|
|
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
|
|
```
|
|
|
|
The [precompiled sqlc binaries][sqlc-precompiled] work just as well, so choose
|
|
whatever works for you.
|
|
|
|
{{< hint type=important >}}
|
|
Installing sqlc itself is only necessary to regenerate the database code. Once
|
|
generated, the code is independent of sqlc.
|
|
|
|
Since installing sqlc via `go install` requires a C/C++ compiler, it is **not** part
|
|
of the `make with-deps` script. Because of this, it is also **not** included in the
|
|
`make generate-go` script.
|
|
{{< /hint >}}
|
|
|
|
[sqlc-install]: https://docs.sqlc.dev/en/latest/overview/install.html
|
|
[sqlc-precompiled]: https://docs.sqlc.dev/en/latest/overview/install.html#downloads
|
|
|
|
### Handling Schema changes
|
|
|
|
Database schema changes are managed with [Goose][goose]. Every change is defined
|
|
in a separate SQL file, and has the queries to make the change and to roll it
|
|
back. Of course the roll-back is only possible when no data was removed.
|
|
|
|
SQLC needs to know the final schema those Goose migrations produced. To generate
|
|
the SQLC schema from the database itself, run:
|
|
```sh
|
|
make db-migrate-up
|
|
go run ./cmd/sqlc-export-schema
|
|
```
|
|
|
|
To generate Go code with SQLC after changing `schema.sql` or `queries.sql`:
|
|
```sh
|
|
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
|
|
sqlc generate
|
|
```
|
|
|
|
[goose]: https://github.com/pressly/goose
|