use*_*675 5 postgresql inheritance
我是 PostgreSQL 的新手。我遇到的情况是有人创建了一个从父表继承的子表。并丢弃了子表。但是父表上仍然有“向下箭头”标志。
我检查过,父表上没有其他链接/关系。这真的是个问题吗?
有人告诉我,父表仍处于“已继承”状态并导致性能问题。如何解决这个问题?通过从父表中删除“已继承”状态?
Erw*_*ter 12
除了@Josh 已经澄清的内容之外,手册中的这句话应该回答标题中的问题:
[...]一个继承链可以使用的一个孩子取出
NO INHERIT
的变种ALTER TABLE
。
ALTER TABLE child NO INHERIT parent;
Run Code Online (Sandbox Code Playgroud)
要么就是删除child
表。
此外,您可以在使用CASCADE
关键字删除父表时包括所有继承表:
不能删除父表,而其任何子表仍保留。[...] 如果您希望删除一个表及其所有子表,一种简单的方法是使用该
CASCADE
选项删除父表。
您可以反转它以利用该行为并调试您的情况。启动事务并尝试删除父表:
BEGIN;
DROP TABLE a;
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ERROR: cannot drop table a because other objects depend on it DETAIL: table b depends on table a HINT: Use DROP ... CASCADE to drop the dependent objects too.
错误消息列出了阻止DROP
命令的继承表。
除非出现错误(自动中止事务),ROLLBACK
如果您实际上不想删除表,请确保发出 a :
ROLLBACK;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是最新版本的 PostgreSQL(即 9.1 或更高版本),请执行以下操作:
... 其中 <tablename> 是您的父表的名称。这将为您提供从输出底部的父表继承的表列表。
没有所谓的“被继承”状态。表要么有继承子项,要么没有。
归档时间: |
|
查看次数: |
10692 次 |
最近记录: |