You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL查找表依赖:脚本返回重复视图结果的问题求助

PostgreSQL查找表依赖视图的重复结果解决办法

你的脚本返回重复结果的原因是:每个视图在pg_rewrite系统表中会对应多条记录(通常是2条),关联查询后每个视图会被匹配多次,导致结果翻倍。

解决思路1:给原脚本添加去重

在SELECT后加上DISTINCT关键字即可得到唯一的视图列表,修改后的脚本如下:

SELECT DISTINCT v.oid::regclass AS view
FROM pg_depend AS d      -- 依赖目标表的对象
   JOIN pg_rewrite AS r  -- 依赖目标表的规则
      ON r.oid = d.objid
   JOIN pg_class AS v    -- 规则对应的视图
      ON v.oid = r.ev_class
WHERE v.relkind = 'v'    -- 仅筛选视图
  AND d.classid = 'pg_rewrite'::regclass
  AND d.refclassid = 'pg_class'::regclass
  AND d.deptype = 'n'    -- 正常依赖关系
  AND d.refobjid = 'schema.table'::regclass; -- 替换为你的目标表(schema.表名)

解决思路2:使用更简洁的查询方式

可以跳过pg_rewrite的关联,直接通过pg_depend匹配依赖视图:

SELECT DISTINCT c.oid::regclass AS view
FROM pg_depend d
JOIN pg_class c ON d.objid = c.oid
WHERE c.relkind = 'v'
  AND d.refclassid = 'pg_class'::regclass
  AND d.refobjid = 'schema.table'::regclass
  AND d.deptype = 'n';

思路3:使用information_schema视图(更直观)

如果只需要直接依赖该表的视图,也可以用information_schema中的视图来查询,语法更易懂:

SELECT DISTINCT table_name AS view_name
FROM information_schema.view_table_usage
WHERE table_schema = 'your_schema' -- 替换为表所在的schema
  AND table_name = 'your_old_table'; -- 替换为你的旧表名

以上三种方法都能得到不重复的依赖视图列表,你可以根据习惯选择使用。

内容的提问来源于stack exchange,提问作者Haris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:16:10