6.3 KiB
Drizzle ORM 0.21.0 was released 🎉
- Added support for new migration folder structure and breakpoints feature, described in drizzle-kit release section
- Fix
onUpdateNow()expression generation for default migration statement
Support for PostgreSQL array types
export const salEmp = pgTable('sal_emp', {
name: text('name').notNull(),
payByQuarter: integer('pay_by_quarter').array(),
schedule: text('schedule').array().array(),
});
export const tictactoe = pgTable('tictactoe', {
squares: integer('squares').array(3).array(3),
});
drizzle kit will generate
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
CREATE TABLE tictactoe (
squares integer[3][3]
);
Added composite primary key support to PostgreSQL and MySQL
PostgreSQL
import { primaryKey } from 'drizzle-orm/pg-core';
export const cpkTable = pgTable('table', {
column1: integer('column1').default(10).notNull(),
column2: integer('column2'),
column3: integer('column3'),
}, (table) => ({
cpk: primaryKey(table.column1, table.column2),
}));
MySQL
import { primaryKey } from 'drizzle-orm/mysql-core';
export const cpkTable = mysqlTable('table', {
simple: int('simple'),
columnNotNull: int('column_not_null').notNull(),
columnDefault: int('column_default').default(100),
}, (table) => ({
cpk: primaryKey(table.simple, table.columnDefault),
}));
Drizzle Kit 0.17.0 was released 🎉
Breaking changes
Folder structure was migrated to newer version
Before running any new migrations drizzle-kit will ask you to upgrade in a first place
Migration file structure < 0.17.0
📦 <project root>
└ 📂 migrations
└ 📂 20221207174503
├ 📜 migration.sql
├ 📜 snapshot.json
└ 📂 20230101104503
├ 📜 migration.sql
├ 📜 snapshot.json
Migration file structure >= 0.17.0
📦 <project root>
└ 📂 migrations
└ 📂 meta
├ 📜 _journal.json
├ 📜 0000_snapshot.json
├ 📜 0001_snapshot.json
└ 📜 0000_icy_stranger.sql
└ 📜 0001_strange_avengers.sql
Upgrading to 0.17.0
To easily migrate from previous folder structure to new you need to run up command in drizzle kit. It's a great helper to upgrade your migrations to new format on each drizzle kit major update
drizzle-kit up:<dialect> # dialects: `pg`, `mysql`, `sqlite`
# example for pg
drizzle-kit up:pg
New Features
New drizzle-kit command called drop
In a case you think some of migrations were generated in a wrong way or you have made migration simultaneously with other developers you can easily rollback it by running simple command
Warning
: Make sure you are dropping migrations that were not applied to your database
drizzle-kit drop
This command will show you a list of all migrations you have and you'll need just to choose migration you want to drop. After that drizzle-kit will do all the hard work on deleting migration files
New drizzle-kit option --breakpoints for generate and introspect commands
If particular driver doesn't support running multiple quries in 1 execution you can use --breakpoints.
drizzle-kit will generate current sql
CREATE TABLE `users` (
`id` int PRIMARY KEY NOT NULL,
`full_name` text NOT NULL,
);
--> statement-breakpoint
CREATE TABLE `table` (
`id` int PRIMARY KEY NOT NULL,
`phone` int,
);
Using it drizzle-orm will split all sql files by statements and execute them separately
Add drizzle-kit introspect for MySQL dialect
You can introspect your mysql database using introspect:mysql command
drizzle-kit introspect:mysql --out ./migrations --connectionString mysql://user:password@127.0.0.1:3306/database
Support for glob patterns for schema path
Usage example in cli
drizzle-kit generate:pg --out ./migrations --schema ./core/**/*.ts ./database/schema.ts
Usage example in drizzle.config
{
"out: "./migrations",
"schema": ["./core/**/*.ts", "./database/schema.ts"]
}
Bug Fixes and improvements
Postgres dialect
GitHub issue fixes
- [pg] char is undefined during introspection #9
- when unknown type is detected, would be nice to emit a TODO comment instead of undefined #8
- "post_id" integer DEFAULT currval('posts_id_seq'::regclass) generates invalid TS #7
- "ip" INET NOT NULL is not supported #6
- "id" UUID NOT NULL DEFAULT uuid_generate_v4() type is not supported #5
- array fields end up as "undefined" in the schema #4
- timestamp is not in the import statement in schema.ts #3
- generated enums are not camel cased #2
Introspect improvements
- Add support for composite PK's generation;
- Add support for
cidr,inet,macaddr,macaddr8,smallserial - Add interval fields generation in schema, such as
minute to second,day to hour, etc. - Add default values for
numerics - Add default values for
enums
MySQL dialect
Migration generation improvements
- Add
autoincrementcreate, delete and update handling - Add
on update current_timestamphandling for timestamps - Add data type changing, using
modify - Add
not nullchanging, usingmodify - Add
defaultdrop and create statements - Fix
defaultsgeneration bugs, such as escaping, date strings, expressions, etc
Introspect improvements
- Add
autoincrementto all supported types - Add
fspfor time based data types - Add precision and scale for
double - Make time
{ mode: "string" }by default - Add defaults to
json,decimalandbinarydatatypes - Add
enumdata type generation


