PostgreSQL:列出依赖行
·
问题: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.
更多推荐
所有评论(0)