视图列从Postgres哪里来?

问题描述 投票:0回答:1

假设我有一个PostgreSQL数据库,并且有一个看起来像这样的视图:

select foo.id as id, bar.id as bar_id, ...
from foo join bar on foo.bar_id = bar.id;

哪个查询可以告诉我视图的哪些列来自哪些基础表/列组合?

我最近来的是查询information_schema.view_column_usage。这给了我一切,除了定义了视图中的哪一列。因此,我可以说,例如,视图中同时使用了foo.idbar.id。但是我不知道id列是来自foo还是bar

(是的,我可以手动解析SQL。但是,我正在尝试自动分析具有许多视图,许多列以及视图中各列的非明显重命名的系统。)

database postgresql information-schema
1个回答
0
投票

正如JGH在他的评论中所说,很容易提出视图,其中视图列依赖于多个基础对象之一。

视图定义本身以语法分析树的形式存储在相应ev_action条目的pg_rewrite列中,因此您必须编写C代码并深入PostgreSQL的内部结构来进行处理。但请注意:试图解析文本表示形式会更加困难。

© www.soinside.com 2019 - 2024. All rights reserved.