80 lines
2.0 KiB
Markdown
80 lines
2.0 KiB
Markdown
## Drizzle Kit
|
|
|
|
DrizzleKit - is a CLI migrator tool for DrizzleORM. It is probably one and only tool that lets you completely automatically generate SQL migrations and covers ~95% of the common cases like deletions and renames by prompting user input.
|
|
<https://github.com/drizzle-team/drizzle-kit-mirror> - is a mirror repository for issues.
|
|
|
|
## Documentation
|
|
|
|
Check the full documenation on [the website](https://orm.drizzle.team/kit-docs/overview)
|
|
|
|
### How it works
|
|
|
|
`drizzle-kit` will traverse `schema folder` or `schema file`, generate schema snapshot and compare it to the previous version, if there's one.
|
|
Based on the difference it will generate all needed SQL migrations and if there are any `automatically unresolvable` cases like `renames` it will prompt user for input.
|
|
|
|
For schema file:
|
|
|
|
```typescript
|
|
// ./src/db/schema.ts
|
|
|
|
import { integer, pgTable, serial, text, varchar } from "drizzle-orm/pg-core";
|
|
|
|
const users = pgTable("users", {
|
|
id: serial("id").primaryKey(),
|
|
fullName: varchar("full_name", { length: 256 }),
|
|
}, (table) => ({
|
|
nameIdx: index("name_idx", table.fullName),
|
|
})
|
|
);
|
|
|
|
export const authOtp = pgTable("auth_otp", {
|
|
id: serial("id").primaryKey(),
|
|
phone: varchar("phone", { length: 256 }),
|
|
userId: integer("user_id").references(() => users.id),
|
|
});
|
|
```
|
|
|
|
It will generate:
|
|
|
|
```SQL
|
|
CREATE TABLE IF NOT EXISTS auth_otp (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"phone" character varying(256),
|
|
"user_id" INT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
"id" SERIAL PRIMARY KEY,
|
|
"full_name" character varying(256)
|
|
);
|
|
|
|
DO $$ BEGIN
|
|
ALTER TABLE auth_otp ADD CONSTRAINT auth_otp_user_id_fkey FOREIGN KEY ("user_id") REFERENCES users(id);
|
|
EXCEPTION
|
|
WHEN duplicate_object THEN null;
|
|
END $$;
|
|
|
|
CREATE INDEX IF NOT EXISTS users_full_name_index ON users (full_name);
|
|
```
|
|
|
|
### Installation & configuration
|
|
|
|
```shell
|
|
npm install -D drizzle-kit
|
|
```
|
|
|
|
Running with CLI options
|
|
|
|
```jsonc
|
|
// package.json
|
|
{
|
|
"scripts": {
|
|
"generate": "drizzle-kit generate --out migrations-folder --schema src/db/schema.ts"
|
|
}
|
|
}
|
|
```
|
|
|
|
```shell
|
|
npm run generate
|
|
```
|