【问题标题】:cannot drop type "enum_TableName_column" because other objects depend on it. (PostgreSQL, Sequelize, Node.js)不能删除类型“enum_TableName_column”,因为其他对象依赖于它。 (PostgreSQL、Sequelize、Node.js)
【发布时间】:2013-06-06 08:44:54
【问题描述】:

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

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

【问题讨论】:

  • 听起来好像是按错误的顺序放置东西?类型应该肯定最后被删除。
  • 对我来说很有意义,我发布的一行实际上就是处理它的所有内容,而 sequelize 只是我们正在使用的一个 npm 库,所以也许这是我们需要解决的问题?
  • 是的,听起来像是那个库中的一个错误。我怀疑你可以做些什么来让 Postgres 自动清除对枚举的所有依赖项。

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


【解决方案1】:

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

DROP TYPE IF EXISTS enum_Availabilities_status CASCADE;

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 1970-01-01
      • 2018-09-01
      • 2016-05-22
      • 2020-12-27
      • 1970-01-01
      • 2021-07-22
      • 2023-03-08
      • 2018-12-17
      相关资源
      最近更新 更多