# 5.14.依赖项跟踪
当您创建复杂的数据库结构时,涉及许多带有外键约束、视图、触发器、函数等的表。您隐式地创建了对象之间的依赖关系网。例如,具有外键约束的表取决于它引用的表。
为了确保整个数据库结构的完整性,PostgreSQL确保不能删除其他对象仍然依赖的对象。例如,试图删除我们在中考虑的products表第5.4.5节,而orders表取决于它,将导致如下错误消息:
DROP TABLE products;
ERROR: cannot drop table products because other objects depend on it
DETAIL: constraint orders_product_no_fkey on table orders depends on table products
HINT: Use DROP ... CASCADE to drop the dependent objects too.
错误消息包含一个有用的提示:如果不想单独删除所有依赖对象,可以运行:
DROP TABLE products CASCADE;
所有依赖对象都将被删除,依赖于它们的对象也将被递归删除。在这种情况下,它不会删除orders表,只会删除外键约束。它停在那里,因为没有任何东西依赖于外键约束。(如果你想检查什么滴大量
行,快跑滴
没有大量
并阅读细节
输出。)
几乎全部滴
PostgreSQL中的命令支持指定大量
.当然,可能的依赖关系的性质因对象的类型而异。你也可以写作限制
而不是大量
获取默认行为,即防止删除任何其他对象所依赖的对象。
# 笔记
根据SQL标准,指定限制
或大量
在一个滴
命令没有数据库系统实际执行该规则,但默认行为是否限制
或大量
不同的系统各不相同。
如果滴
命令列出多个对象,大量
仅当指定组之外存在依赖项时才需要。比如说放下桌子tab1,tab2
外键引用的存在表1
从…起表2
不是这个意思大量
这是成功所必需的。
对于用户定义的函数,PostgreSQL跟踪与函数的外部可见属性(如其参数和结果类型)关联的依赖项,但不只有通过检查函数体才能知道的依赖项。作为一个例子,考虑这种情况:
CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow',
'green', 'blue', 'purple');
CREATE TABLE my_colors (color rainbow, note text);
CREATE FUNCTION get_color_note (rainbow) RETURNS text AS
'SELECT note FROM my_colors WHERE color = $1'
LANGUAGE SQL;
(见第38.5节有关SQL语言函数的说明。)PostgreSQL将知道获取颜色注释
功能取决于虹
类型:删除类型将强制删除函数,因为不再定义其参数类型。但PostgreSQL不会考虑获取颜色注释
依靠我的颜色
表,因此在表被删除时不会删除该函数。虽然这种方法有缺点,但也有好处。如果表丢失,函数在某种意义上仍然有效,尽管执行它会导致错误;创建一个同名的新表将允许该函数再次工作。