← Cloudflare D1 / d1 / reference
Migrace
Migrace databáze jsou způsob verzování vaší databáze. Každá migrace se ukládá jako .sql soubor v migrations složka. migrations složka se v adresáři vašeho projektu vytvoří při vytvoření první migrace. Díky tomu můžete ukládat a sledovat změny v průběhu vývoje databáze.
Funkce
Systém migrací je v současnosti navržen tak, aby byl jednoduchý, ale zároveň efektivní. Se současnou implementací můžete:
Každý soubor migrace v migrations složka má v názvu souboru uvedené číslo verze. Soubory jsou uvedeny v pořadí za sebou. Každý migrační soubor je SQL soubor, ve kterém můžete zadat dotazy, jež se mají spustit.
Přizpůsobení Wrangleru
Ve výchozím nastavení se migrace vytvářejí ve migrations/ složka v adresáři vašeho projektu Worker. Vytváření migrací povede záznam o aplikovaných migracích v d1_migrations tabulka nalezená ve vaší databázi.
Toto umístění a název tabulky lze upravit v souboru Wrangler, uvnitř bindingu D1.
{
"d1_databases": [
{
"binding": "<BINDING_NAME>", // i.e. if you set this to "DB", it will be available in your Worker at `env.DB`
"database_name": "<DATABASE_NAME>",
"database_id": "<UUID>",
"preview_database_id": "<UUID>",
"migrations_table": "<d1_migrations>", // Customize this value to change your applied migrations table name
"migrations_dir": "<FOLDER_NAME>", // Specify your custom migration directory
"migrations_pattern": "<GLOB>" // Optional: discover migrations using a glob pattern (see below)
}
]
}[[d1_databases]]
binding = "<BINDING_NAME>"
database_name = "<DATABASE_NAME>"
database_id = "<UUID>"
preview_database_id = "<UUID>"
migrations_table = "<d1_migrations>"
migrations_dir = "<FOLDER_NAME>"
migrations_pattern = "<GLOB>"Vnořené uspořádání migrací
Standardně wrangler d1 migrations apply hledá soubory na nejvyšší úrovni .sql soubory uvnitř migrations_dir. Pokud používáte ORM, například Drizzle ↗ která zapisuje každou migraci do vlastního podadresáře (například migrations/0001_init/migration.sql) nastavte migrations_pattern glob vzoru, který odpovídá vašemu rozvržení:
{
"d1_databases": [
{
"binding": "DB",
"database_name": "my-database",
"database_id": "<UUID>",
"migrations_dir": "migrations",
"migrations_pattern": "migrations/*/migration.sql"
}
]
}[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "<UUID>"
migrations_dir = "migrations"
migrations_pattern = "migrations/*/migration.sql"Pravidla pro migrations_pattern:
- Pokud je nastaveno,
migrations_dirmusí být také nastaven. - Vzor musí začínat tím, co
migrations_dirje nastaven na. - Název každé migrace se zaznamenává do tabulky migrací jako cesta relativní k
migrations_dir(například0001_init/migration.sql). Díky tomu zůstává tabulka přenositelná mezi stroji.
Vzor je standardní glob: * odpovídá jednomu segmentu cesty, ** odpovídá libovolnému počtu segmentů. migrations/**/*.sql zohlední libovolně hluboko vnořené .sql soubory.
wrangler d1 migrations create zapisuje pouze soubory na nejvyšší úrovni uvnitř migrations_dir, takže pokud váš migrations_pattern odpovídá pouze vnořeným souborům (jako u rozvržení Drizzle); nové migrace vygenerujte příkazem vašeho ORM nástroje (například drizzle-kit generate) místo toho.
Omezení cizího klíče
Při aplikaci migrace možná budete muset dočasně vypnout omezení cizích klíčů. Za tímto účelem zavolejte PRAGMA defer_foreign_keys = true před provedením změn, které by porušily cizí klíče.
Viz dokumentace k cizím klíčům a dozvíte se více o práci s cizími klíči a D1.