INTEGRITY Dokumentace

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:

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.