[BUG]: `drizzle-kit generate` 在另一个表的列类型发生变化时会默默地删除新创建的唯一索引

作者: sukalov创建于 2026年9月17日更新于 2026年9月17日
标签bug

创建 drizzle.config.ts:

typescript
import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  dialect: 'turso',
  schema: './schema.ts',
  out: './drizzle',
});

创建 schema.ts:

typescript
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';

export const player = sqliteTable('player', {
  id: text('id').primaryKey(),
  rd: integer('rd').notNull().default(350),
});

生成初始迁移:

bash
node node_modules/drizzle-kit/bin.cjs generate --name=initial

仅更改 schema.ts 为:

typescript
import { real, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';

export const player = sqliteTable('player', {
  id: text('id').primaryKey(),
  rd: real('rd').notNull().default(350),
});

export const ratingEvent = sqliteTable('rating_event', {
  id: text('id').primaryKey(),
  playerId: text('player_id').notNull().references(() => player.id),
}, (table) => [uniqueIndex('rating_event_player_unique').on(table.playerId)]);

生成更改迁移:

bash
node node_modules/drizzle-kit/bin.cjs generate --name=change

未经手动修改的生成的 drizzle/0001_change.sql 为:

内容来源: drizzle-team/drizzle-orm