{ await queryInterf-6ren">
gpt4 book ai didi

sql - 列 ""的 Sequelize 迁移默认值无法自动转换为类型 "enum"

转载 作者:行者123 更新时间:2023-12-03 22:25:19 26 4
gpt4 key购买 nike

我正在尝试编写迁移以向 psql 数据库中的枚举添加/删除值,如下所示:

up : async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('Messages', 'status', {
type : Sequelize.STRING
});

await queryInterface.sequelize.query('DROP TYPE IF EXISTS "enum_Messages_status"');

await queryInterface.changeColumn('Messages', 'status', {
type : Sequelize.ENUM('unread', 'opened', 'expired', 'blocked', 'refused'),
defaultValue : 'unread'
});
},

down : async (queryInterface, Sequelize) => {
await queryInterface.changeColumn('Messages', 'status', {
type : Sequelize.STRING
});

await queryInterface.sequelize.query('DROP TYPE IF EXISTS "enum_Messages_status"');

await queryInterface.changeColumn('Messages', 'status', {
type : Sequelize.ENUM('unread', 'opened', 'expired', 'blocked'),
defaultValue : 'unread'
});
}
不幸的是 down 方法返回: ERROR: default for column "status" cannot be cast automatically to type "enum_Messages_status"
如果我尝试将 down 更改为:
await queryInterface.changeColumn('Messages', 'status', {
type : 'ENUM USING CAST("status" as ENUM)',
values : [
'unread',
'opened',
'expired',
'blocked'
],
defaultValue : 'unread'
});
我收到另一个错误: ERROR: type "enum" does not exist
我能在这里做什么?谢谢!

最佳答案

看来您无法在同一命令中强制转换和定义枚举。此外,您的 Actor 阵容需要符合您的特定类型。
您可以做的是将枚举定义和列更改拆分为两个命令:

// Manually define the new type
await queryInterface.sequelize.query(`CREATE TYPE "enum_Messages_status" AS ENUM('unread', 'opened', 'expired', 'blocked')`);

// Use it to perform the cast
await queryInterface.changeColumn('Messages', 'status', {
type: `"enum_Messages_status" USING CAST("status" as "enum_Messages_status")`,
});

对于相反的迁移,您需要颠倒顺序并删除类型。

关于sql - 列 ""的 Sequelize 迁移默认值无法自动转换为类型 "enum",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63690235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com