Aak*_*rma 4 postgresql sequelize.js sequelize-cli
我创建了一个迁移文件来添加一个列up,然后将其删除down.
这是迁移文件代码:
module.exports = {
up: (queryInterface, Sequelize) =>
queryInterface.addColumn('Books', 'Rating', {
allowNull: false,
type: Sequelize.ENUM('like', 'dislike'),
}),
down: (queryInterface, Sequelize) => {
queryInterface.removeColumn('Books', 'Rating');
},
};
Run Code Online (Sandbox Code Playgroud)
当我第一次使用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
Run Code Online (Sandbox Code Playgroud)
该问题仍然住在这里.
Sequelize为您定义的每个枚举创建TYPES,您可以在此处找到它
ENUM类型的名称是"enum",表名称和蛇形图中的列名称的串联.(enum_Books_Rating这里)
要为其创建迁移ENUM,您必须修改down函数,如下所示:
module.exports = {
up: (queryInterface, Sequelize) =>
queryInterface.addColumn('Books', 'Rating', {
allowNull: false,
type: Sequelize.ENUM('like', 'dislike')
}),
down: (queryInterface, Sequelize) =>
queryInterface.removeColumn('Books', 'Rating')
.then(() => queryInterface.sequelize.query('DROP TYPE "enum_Books_Rating";'));
};
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.