【问题标题】:Migration does not add column if not exists postgresql node如果不存在 postgresql 节点,迁移不会添加列
【发布时间】:2020-11-18 15:31:41
【问题描述】:

我在节点中更改了我的模型,并且在启动应用程序时,迁移不会更改 postgresql 表。我可以看到查询CREATE TABLE IF NOT EXISTS 在表上运行,但我猜它不会检查是否已添加/删除列。如何通过节点执行此操作,以便我的应用程序自动处理和迁移此类更改?目前我正在调用sync() 函数进行迁移。

let membres = await Membership.sync();

【问题讨论】:

  • 你在用sequelize吗?
  • @RohitAmbre 是的,我是!很抱歉没有指定它。我正在接手一个由其他人启动的项目,并且对 dbs 或迁移不熟悉!

标签: node.js postgresql migration


【解决方案1】:

在 sequelize 中,您必须为每个数据库结构更改创建迁移。

当您添加新列时,您需要使用 sequelize-cli 创建迁移以更改您的表。现在,无论谁开始处理您的项目,都只需运行这些迁移,所有数据库更改都将由 sequelize 处理。

查看此post 以了解迁移。或查看续集docs here

【讨论】:

  • 谢谢。为清楚起见,目前我的 migrate() 函数只是对所有表执行 sync() 操作。并且 migrate() 在应用程序启动时被调用。我是否应该单独处理表更改,一个只添加修改的文件,然后在当前 migrate() 函数运行后调用它?
  • 您必须按照我分享的 stackoverflow 帖子中的说明进行操作。它将创建一个单独的文件,您将在其中编写列及其类型,然后您将使用migrate 命令运行它。
  • 我得到了ERROR: Please install mysql2 package manually,尽管我在运行命令npx sequelize db:migrate 时使用的是Postgresql。我认为这与不在开发环境中运行有关。
  • 在数据库配置中设置为dialect 的内容是什么?
  • 是的,这就是问题所在。非常感谢。您最初的回答也解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2018-08-26
  • 2014-03-17
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
相关资源
最近更新 更多