常见问题与故障排除

我应该使用 generate 还是 push

它们在逻辑上是两个不同的命令。generate 用于创建一个 sql 文件以及 drizzle-kit(或任何其他迁移工具)所需的附加信息。

生成这些迁移后,它们不会被应用到数据库中。 你需要在下一步中进行操作。你可以在 这里 阅读更多相关信息

另一方面,push 不需要生成任何迁移。它将简单地同步你的模式与数据库模式。请小心使用它; 我们仅推荐在本地开发和本地数据库中使用它。要了解更多相关信息,请查看 drizzle-kit push

PostgreSQL 索引的 pushgenerate 如何工作

限制

  1. 如果你至少在一个表达式上有一个索引,你应该手动为你的索引指定一个名称

示例

index().on(table.id, table.email) // 将正常工作,名称将自动生成
index('my_name').on(table.id, table.email) // 将正常工作

// 但是

index().on(sql`lower(${table.email})`) // 错误
index('my_name').on(sql`lower(${table.email})`) // 将正常工作
  1. 如果这些字段(列表如下)在现有索引中被更改,Push 不会生成语句:
  • .on().using() 内的表达式
  • .where() 语句
  • 列上的运算符类 .op()

如果你正在使用 push 工作流程,并希望在索引中更改这些字段,你将需要:

  1. 注释掉索引
  2. 推送
  3. 取消注释索引并更改这些字段
  4. 再次推送

对于 generate 命令,drizzle-kit 将由新 drizzle 索引 API 中的索引的任何属性更改触发,因此这里没有限制。

Become a Gold Sponsor