diff --git a/README.md b/README.md index e21994b..4ce853d 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ pairing with smart people at Hashrocket. For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186). -_1489 TILs and counting..._ +_1490 TILs and counting..._ --- @@ -212,6 +212,7 @@ _1489 TILs and counting..._ ### Drizzle - [Create bigint Identity Column For Primary Key](drizzle/create-bigint-identity-column-for-primary-key.md) +- [Drizzle Tracks Migrations In A Log Table](drizzle/drizzle-tracks-migrations-in-a-log-table.md) - [Get Fields For Inserted Row](drizzle/get-fields-for-inserted-row.md) ### Elixir diff --git a/drizzle/drizzle-tracks-migrations-in-a-log-table.md b/drizzle/drizzle-tracks-migrations-in-a-log-table.md new file mode 100644 index 0000000..260d051 --- /dev/null +++ b/drizzle/drizzle-tracks-migrations-in-a-log-table.md @@ -0,0 +1,39 @@ +# Drizzle Tracks Migrations In A Log Table + +When I generate (`npx drizzle-kit generate`) and apply (`npx drizzle-kit +migrate`) schema migrations against my database with Drizzle, there are SQL +files that get created and run. + +How does Drizzle know which SQL files have been run and which haven't? + +Like many SQL schema migration tools, it uses a table in the database to record +this metadata. Drizzle defaults to calling this table `__drizzle_migrations` +and puts it in the `drizzle` schema (which is like a database namespace). + +Let's take a look at this table for a project with two migrations: + +```sql +postgres> \d drizzle.__drizzle_migrations + Table "drizzle.__drizzle_migrations" + Column | Type | Collation | Nullable | Default +------------+---------+-----------+----------+---------------------------------------------------------- + id | integer | | not null | nextval('drizzle.__drizzle_migrations_id_seq'::regclass) + hash | text | | not null | + created_at | bigint | | | +Indexes: + "__drizzle_migrations_pkey" PRIMARY KEY, btree (id) + +postgres> select * from drizzle.__drizzle_migrations; + id | hash | created_at +----+------------------------------------------------------------------+--------------- + 1 | 8961353bf66f9b3fe1a715f6ea9d9ef2bc65697bb8a5c2569df939a61e72a318 | 1730219291288 + 2 | b75e61451e2ce37d831608b1bc9231bf3af09e0ab54bf169be117de9d4ff6805 | 1730224013018 +(2 rows) +``` + +Notice that Drizzle stores each migration record as [a SHA256 hash of the +migration +file](https://github.com/drizzle-team/drizzle-orm/blob/526996bd2ea20d5b1a0d65e743b47e23329d441c/drizzle-orm/src/migrator.ts#L52) +and a timestamp of when the migration was run. + +[source](https://orm.drizzle.team/docs/drizzle-kit-migrate#applied-migrations-log-in-the-database)