获取PostgreSQL中视图/表所依赖的表的列表

时间:2010-11-19 21:19:52

标签: postgresql

在PostgreSQL中,有没有办法根据外键的使用和对给定表的访问来获取视图/表所依赖的所有表?

基本上,我希望能够使用脚本复制视图/表的结构,并希望能够自动获取我还需要复制的表列表,以便所有内容仍能正常工作。

This response似乎朝着正确的方向前进,但没有给出我期望/需要的结果。有什么建议吗?

4 个答案:

答案 0 :(得分:11)

使用Andy Lester的信息,我能够提出以下查询来检索我需要的信息。

获取外键引用的表:

SELECT cl2.relname AS ref_table
FROM pg_constraint as co
JOIN pg_class AS cl1 ON co.conrelid=cl1.oid
JOIN pg_class AS cl2 ON co.confrelid=cl2.oid
WHERE co.contype='f' AND cl1.relname='TABLENAME'
ORDER BY cl2.relname;

获取表格中的视图或规则引用的表:

SELECT cl_d.relname AS ref_table
FROM pg_rewrite AS r
JOIN pg_class AS cl_r ON r.ev_class=cl_r.oid
JOIN pg_depend AS d ON r.oid=d.objid
JOIN pg_class AS cl_d ON d.refobjid=cl_d.oid
WHERE cl_d.relkind IN ('r','v') AND cl_r.relname='TABLENAME'
GROUP BY cl_d.relname
ORDER BY cl_d.relname;

答案 1 :(得分:2)

假设您正确设置了外键,请使用pg_dump转储表定义。

pg_dump -s -t TABLENAME

答案 2 :(得分:1)

我认为这是一个非常糟糕的主意。只需复制整个数据库,我认为应用程序想要拥有所有数据,而不仅仅是来自一个表的数据。 更重要的是,还有一些触发器可能依赖于某些表,但要知道您必须进行不那么容易的代码分析。

答案 3 :(得分:0)

在psql中,将+添加到通常的\d会为您提供“引用者”列表以及表格定义。

\d+ tablename