Managed databases
Added in v1.22.0
sqlc
can create and maintain hosted databases for your project. These
databases are immediately useful for linting queries with sqlc vet
if your lint rules require a connection to a running database. PostgreSQL
support is available today, with MySQL on the way.
This feature is under active development, and we’re interested in supporting other use-cases. Beyond linting queries, you can use sqlc managed databases in your tests to quickly stand up a database per test suite or even per test, providing a real, isolated database for a test run. No cleanup required.
Interested in trying out managed databases? Sign up here or send us an email at hello@sqlc.dev.
Configuring managed databases
To configure sqlc
to use a managed database, remove the uri
key from your
database
configuration and replace it with the managed
key set to true
.
Set the project
key in your cloud
configuration to the value of your
project ID, obtained via the sqlc.dev Dashboard.
version: '2'
cloud:
project: '<PROJECT_ID>'
sql:
- schema: schema.sql
queries: query.sql
engine: postgresql
database:
managed: true
Authentication
sqlc
expects to find a valid auth token in the value of the SQLC_AUTH_TOKEN
environment variable. You can create an auth token via the sqlc.dev Dashboard.
export SQLC_AUTH_TOKEN=sqlc_xxxxxxxx
Linting queries
With managed databases configured, sqlc vet
will create a database with your
package’s schema and use that database when running lint rules that require a
database connection, e.g. any rule relying on EXPLAIN ...
output.
If you don’t yet have any vet rules, the built-in sqlc/db-prepare rule is a good place to start. It prepares each of your queries against the database to ensure the query is valid. Here’s a minimal working configuration:
version: '2'
cloud:
project: '<PROJECT_ID>'
sql:
- schema: schema.sql
queries: query.sql
engine: postgresql
database:
managed: true
rules:
- sqlc/db-prepare