不能删除“enum_TableName_column”类型,因为其他对象依赖于它。 (PostgreSQL,Sequelize,Node.js)

时间:2013-06-10 16:06:50

标签: node.js postgresql orm dependencies sequelize.js

使用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 })

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

2 个答案:

答案 0 :(得分:2)

我无法告诉你ORM是如何做的,但是你可以通过删除SQL并发出以下内容来强制执行此操作:

DROP TYPE IF EXISTS enum_Availabilities_status CASCADE;

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

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

答案 1 :(得分:1)

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

await queryInterface.dropTable('Attachments');
await queryInterface.sequelize.query('DROP TYPE "enum_Attachments_parent_type";');