问题:PostgreSQL:列出依赖行

如何查看哪些条目依赖于使用 PostgreSQL 的给定条目? (从属的意思是“有一个引用条目的外键”)。

基本上,我想检查当我DELETE表的给定条目时哪些条目可能被级联。

解答

要通过 fk 约束查看所有实际的 rows,请使用下面描述的工具识别列。

在使用ON DELETE CASCADE定义外键约束的情况下,将删除相关行(可能将DELETE级联到更多_depending_表)。

在使用ON DELETE SET NULL/ON DELETE SET DEFAULT定义外键约束的情况下,只有列中的值将重置为NULL/ 默认值。

否则,具有依赖行的行上的DELETE将失败并出现异常。

然后在已识别的表/列上运行如下查询:

SELECT f.tbl_fk_id, f.col_fk
FROM   tbl_fk f
JOIN   tbl t ON f.col_fk = t.col
AND    <same condition as DELETE here>;

pgAdmin提供此功能:

家属

在左侧的对象浏览器中选择对象,然后选择右上角的依赖项窗格。

pgAdmin 使用对系统目录的几个查询来组装列表。如果您想自己构建查询,您可以记录发出的命令。

此外,在删除您不完全确定依赖项的对象时,请先尝试简单的DROP(不带CASCADE)。如果存在任何依赖项,您将收到一条错误消息...

最后,但谨慎行事!,您可以start a transaction并发出命令:

BEGIN;
DROP TABLE tbl CASCADE;

然后,如果你喜欢你所看到的:

COMMIT;

如果您不这样做:

ROLLBACK;

就像它从未发生过一样。 ;)

你会看到这样的东西:

NOTICE:  drop cascades to 4 other objects
DETAIL:  drop cascades to constraint tbl1_tbl_id_fkey on table myschema.tbl1
drop cascades to constraint tbl_winner_tbl_id_fkey on table myschema.tbl_foo
drop cascades to constraint bar_tbl_id_fkey on table myschema.bar
drop cascades to constraint tbl1_tbl_id_fkey on table x.tbl1

Query returned successfully with no result in 47 ms.
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐