微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – Sequelize migration queryInterface.removeColum无法正常工作

我创建了一个迁移文件,将列添加为up,然后将其删除.

这是迁移文件代码

module.exports = {
  up: (queryInterface,Sequelize) =>
    queryInterface.addColumn('Books','rating',{
      allowNull: false,type: Sequelize.ENUM('like','dislike'),}),down: (queryInterface,Sequelize) => {
    queryInterface.removeColumn('Books','rating');
  },};

当我第一次使用db:migrate运行它时,它成功添加了列,但是当我执行db:migrate:undo:all然后再次运行迁移时,它向我抛出了一个错误sqying

======= 20180211100937-AddedratingIntoBooks: migrating 
======= 2018-02-11 15:42:46.076 IST 
[64531] ERROR:  type "enum_Books_rating" already exists 2018-02-11 15:42:46.076 IST 
[64531] STATEMENT:  CREATE TYPE "public"."enum_Books_rating" AS ENUM('like','dislike');
ALTER TABLE "public"."Boo ks" ADD COLUMN "rating" "public"."enum_Books_rating";

    ERROR: type "enum_Books_rating" already exists

这个问题仍然存在here.

解决方法

Sequelize为您定义的每个枚举创建TYPES,您可以找到 here

ENUM类型的名称是“enum”,表名称和蛇形图中的列名称的串联. (enum_Books_rating here)

要为ENUM创建迁移,您必须修改down函数,如下所示:

module.exports = {
  up: (queryInterface,'dislike')
  }),Sequelize) =>  
    queryInterface.removeColumn('Books','rating')
      .then(() => queryInterface.sequelize.query('DROP TYPE "enum_Books_rating";'));
  };

希望这可以帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐