如何使用新的枚举类型迁移Postgresql列?

时间:2017-01-08 16:43:56

标签: postgresql migration sequelize.js

我使用Sequelize编写我的架构,并且File模型的file_type列定义为:

file_type: {
  type: Sequelize.ENUM(
    'image/jpeg',
    'image/png',
    'image/gif',
    'audio/mpeg3',
    'audio/wav',
    'application/pdf',
    'application/msword',
    'application/x-compressed',
  ),
  allowNull: false,
},

我需要更改此枚举以使用新的 mimeTypesEnum ,其中还包含一些当前使用的值:

queryInterface.changeColumn('files', 'file_type', {
  type: mimeTypesEnum,
  allowNull: false,
}),

当然,这不起作用,因为它试图重新定义 enum_files_file_type

我似乎有几个选择:

  1. 遍历 mimeTypesEnum 中的所有新类型,并在 enum_files_file_type 类型上运行ADD VALUE查询。
  2. 删除file_type列以及 enum_files_file_type 类型,上述 changeColumn 功能将起作用。
  3. 选项 1 我觉得会变得不必要地复杂化,不得不迭代旧的和新的类型,找出哪些已经存在,哪些要添加BEFORE或AFTER等等...而且它不是un -doable所以我不能写 down 函数。

    选项 2 我将丢失当前file_type列中的所有数据,因为它是allowNull: false我还必须提供defaultValue我不希望这个专栏有。

    是否有一种简单,干净的方法可以在保留当前数据的同时迁移此列?

0 个答案:

没有答案