我想在我的数据库中删除我的表。但是,例如,当我使用 DROP TABLE if exists users;
时,我会收到以下消息:
cannot drop table users because other objects depend on it
我发现解决方案是删除所有表。但是,无论如何,如何在不删除全部数据的情况下解决这个问题?
原文由 Vyacheslav 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想在我的数据库中删除我的表。但是,例如,当我使用 DROP TABLE if exists users;
时,我会收到以下消息:
cannot drop table users because other objects depend on it
我发现解决方案是删除所有表。但是,无论如何,如何在不删除全部数据的情况下解决这个问题?
原文由 Vyacheslav 发布,翻译遵循 CC BY-SA 4.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 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
3 回答2.3k 阅读
2 回答947 阅读
使用
cascade
选项:这将删除引用
users
表或使用它的任何视图的任何外键。它不会删除其他 _表_(或从中删除行)。