我需要把一张旧桌子换成一张 struct 不同的新桌子.但在此之前,我需要更改使用旧表的所有视图.有没有办法在PostgreSQL中找到表的所有依赖项. 我使用了下面的脚本(源代码https://www.cybertec-postgresql.com/en/tracking-view-dependencies-in-postgresql/),它似乎可以工作,但唯一的问题是,尽管由于某些原因与表连接的视图是22个,该脚本仍返回44个视图(每个视图都是重复的).

SELECT v.oid::regclass AS view
FROM pg_depend AS d      -- objects that depend on the table
   JOIN pg_rewrite AS r  -- rules depending on the table
      ON r.oid = d.objid
   JOIN pg_class AS v    -- views for the rules
      ON v.oid = r.ev_class
WHERE v.relkind = 'v'    -- only interested in views
  -- dependency must be a rule depending on a relation
  AND d.classid = 'pg_rewrite'::regclass
  AND d.refclassid = 'pg_class'::regclass
  AND d.deptype = 'n'    -- normal dependency
  AND d.refobjid = 'schema.table'::regclass;

任何 idea 都将是有用的. 提前谢谢!

推荐答案

pg_depend可以包含单个表的多个条目(所涉及的每列一个条目).使用DISTINCT仅获取一个条目:

SELECT DISTINCT v.oid::regclass AS view
FROM pg_depend AS d      -- objects that depend on the table
   JOIN pg_rewrite AS r  -- rules depending on the table
      ON r.oid = d.objid
   JOIN pg_class AS v    -- views for the rules
      ON v.oid = r.ev_class
WHERE v.relkind = 'v'    -- only interested in views
  AND d.classid = 'pg_rewrite'::regclass
  AND d.refclassid = 'pg_class'::regclass
  AND d.deptype = 'n'    -- normal dependency
  AND d.refobjid = 'schema.table'::regclass;

Postgresql相关问答推荐

当通过PostgreSQL FDW中的视图使用时,年龄函数的计算方式不同

带有regex表达式的Postgres SQL

为什么在PostgreSQL中CPU_INDEX_TUPLE_COST与CPU_TUPLE_COST不同

SQLX::Query!带有UUID::UUID的宏在Rust中编译失败

INSERT 语句返回策略违规(USING 表达式)

Postgres 视图定义 (pgAdmin) 被删除了 comments ?

查找行中的最小值

如何包装 record_out() 函数?

有对(type_id,element_id),如(1,1),(1,2),..(5,3).如果我需要获取没有 element_id 1 的类型 ID,如何从结果中排除 type_id?

sql:转换参数 $1 类型:不支持的类型 []int,in 的一部分

PostgreSQL 在 mySQL 中的 date_trunc

从 Postgres 数据库中删除所有函数

是否可以在 PostgreSQL 中部分刷新materialized视图?

postgresql:致命:password authentication failed for user "douglas"

NOT LIKE 带有 NULL 值的行为

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

PostgreSQL 中跨多个表的索引

在 PGAdmin 中搜索所有功能的文本

在 PostgreSQL 中 Select 进入临时表?

使用 cte (postgresql) 的结果更新