无法删除表用户,因为其他对象依赖于它

新手上路,请多包涵

我想在我的数据库中删除我的表。但是,例如,当我使用 DROP TABLE if exists users; 时,我会收到以下消息:

cannot drop table users because other objects depend on it

我发现解决方案是删除所有表。但是,无论如何,如何在不删除全部数据的情况下解决这个问题?

原文由 Vyacheslav 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 998
2 个回答

使用 cascade 选项:

 DROP TABLE if exists users cascade;

这将删除引用 users 表或使用它的任何视图的任何外键。

它不会删除其他 _表_(或从中删除行)。

原文由 a_horse_with_no_name 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果确实有必要删除该特定表,无论是否重新创建它,然后首先找到依赖于它的对象。

 CREATE OR REPLACE VIEW admin.v_view_dependency AS
SELECT DISTINCT srcobj.oid AS src_oid
  , srcnsp.nspname AS src_schemaname
  , srcobj.relname AS src_objectname
  , tgtobj.oid AS dependent_viewoid
  , tgtnsp.nspname AS dependant_schemaname
  , tgtobj.relname AS dependant_objectname
FROM pg_class srcobj
  JOIN pg_depend srcdep ON srcobj.oid = srcdep.refobjid
  JOIN pg_depend tgtdep ON srcdep.objid = tgtdep.objid
  JOIN pg_class tgtobj ON tgtdep.refobjid = tgtobj.oid AND srcobj.oid <> tgtobj.oid
  LEFT JOIN pg_namespace srcnsp ON srcobj.relnamespace = srcnsp.oid
  LEFT JOIN pg_namespace tgtnsp ON tgtobj.relnamespace = tgtnsp.oid
WHERE tgtdep.deptype = 'i'::"char" AND tgtobj.relkind = 'v'::"char";

然后,

 select top 99 * from admin.v_view_dependency where src_objectname like '%the_table_name_it_complaint_about%';

结果集将在“dependant_objectname”字段中显示依赖对象。

原文由 dat789 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进