2

使用Sequelize.js、Node.js 和 PostgreSQL。

在尝试强制将模型同步到数据库 ( drop everything, create everything) 时,我收到为任何枚举字段创建的类型的错误。

例子:

{ 
    [error: cannot drop type "enum_Availabilities_status" because other objects depend on it]
    length: 304,
    name: 'error',
    severity: 'ERROR',
    code: '2BP01',
    detail: 'table "Availabilities" column status depends on type "enum_Availabilities_status"',
    hint: 'Use DROP ... CASCADE to drop the dependent objects too.',
    position: undefined,
    internalPosition: undefined,
    internalQuery: undefined,
    where: undefined,
    file: 'src\\backend\\catalog\\dependency.c',
    line: '951',
    routine: 'reportDependentObjects' 
}

执行后出现:

sequelize.sync({ force: true })

关于如何解决这个问题的任何建议?

4

2 回答 2

4

我无法告诉你 ORM 是如何做事的,但你可以先使用 SQL 并发出以下命令来强制执行此操作:

DROP TYPE IF EXISTS enum_Availabilities_status CASCADE;

我的猜测是 SQL 调用中缺少 CASCADE。然后重新同步。

请先在您的数据库副本上尝试此操作。如果您在列中已经有一个类型,我不能 100% 确定会发生什么。

于 2013-10-25T04:18:35.307 回答
2

我找到了解决方案。首先删除所有使用枚举的表。然后删除枚举。

await queryInterface.dropTable('Attachments');
await queryInterface.sequelize.query('DROP TYPE "enum_Attachments_parent_type";');
于 2019-06-29T18:41:42.653 回答