Multi-DB Schemas
Create and share a single schema across multiple databases.
Turso allows you to create a single schema and share it across multiple databases. This is useful for creating a multi-tenant application where each tenant has their own database.
This feature is currently in beta. Join us in Discord to provide feedback and report any issues.
Try the Turso Per User Starter to get started with a multi-tenant application using Next.js, Drizzle, Clerk, libSQL, and Turso Multi-DB Schemas.
How it works
- You create a database that is used as the parent schema database.
- You create one or more databases that are used as the child databases.
- You apply schema changes to the parent database, child databases are automatically updated with the new schema.
Usage
You can create and manage parent or child databases using the Turso CLI, and Platform API.
Turso CLI
Make sure you have the Turso CLI installed, and logged in.
Create Parent Database
Create a single database using the --type
flag set to schema
:
turso db create parent-db --type schema
Create Schema
Connect to your database using the shell to CREATE TABLE
, CREATE TRIGGER
, CREATE VIEW
, and anything else to setup your schema:
turso db shell parent-db
Create Child Database(s)
Create one or more child databases using the --schema
flag with the name of the parent database:
turso db create child-db --schema parent-db
Apply Additional Schema Changes
You can now apply additional schema changes to the parent database, and the child databases will be automatically updated:
turso db shell parent-db "CREATE TABLE users (id INT PRIMARY KEY, name TEXT);"
Platform API
Make sure you have an API Token, and know your Organization name:
Create Parent Database
Create a database and set the is_schema
field to true
:
curl -L -X POST 'https://api.turso.tech/v1/organizations/{organizationName}/databases' \
-H 'Authorization: Bearer TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "parent-db",
"group": "default",
"is_schema": true
}'
Create Schema
Connect to your database using the shell, SDK, or migration script to CREATE TABLE
, CREATE TRIGGER
, CREATE VIEW
, and anything else to setup your schema:
turso db shell parent-db
Create Child Database(s)
Create one or more child databases and pass the schema
field the name of your parent database:
curl -L -X POST 'https://api.turso.tech/v1/organizations/{organizationName}/databases' \
-H 'Authorization: Bearer TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "child-db",
"group": "default",
"schema": "parent-db"
}'
Apply Additional Schema Changes
You can now apply additional schema changes to the parent database, and the child databases will be automatically updated:
turso db shell parent-db "CREATE TABLE users (id INT PRIMARY KEY, name TEXT);"
Things to know
- Schema databases cannot be shared across groups or globally via an organization/account.
- You can (but not recommended)
INSERT
rows into the parent database that can be queried by the child database(s).- Be aware of any constraints that may conflict with the child database(s).
- You can’t delete a parent database if it has one or more child databases.
- When a migration is applied to the schema database:
- It’s first run as a dry-run on the schema and all other associated databases.
- If successful, a migration job is created.
- Tasks are created for each database that references this schema.
- The migration is then applied to each referencing database.
- Finally, if all tasks succeed, the migration is applied to the schema database itself.
- You can’t create or delete a database if there are any migrations running.
- During a migration, all databases are locked to write operations.
- Make sure any application querying the child databases handle any databases not yet updated with the schema.
- You cannot apply schema changes to a child database directly. You must use the parent (schema) database.
Was this page helpful?