前段时间,有人在 PostgreSQL 邮件列表上询问是否有 PostgreSQL 系统目录图。当时没有。类似的内容曾经包含在 PostgreSQL 文档中,但从未更新,因此最终被删除。
我喜欢一个叫做 postgresql_autodoc可以通过查询目录信息自动创建模式图的工具。我在想为什么我们也不能在系统目录上使用它。
问题是系统目录没有定义真正的约束,因此像这样的工具postgresql_autodoc无法弄清楚表之间的关联。但我们不能解决这个问题吗?
首先,我开始向系统目录添加主键 和唯一约束。在此之前,它们只有唯一的索引,它们实际上做同样的事情,但它们不是意图声明。所以现在,几乎所有的系统目录都定义了一个真正的主键约束。这也应该有助于那些想要浏览和更新表但如果没有定义主键会感到不安的 GUI 工具。
我最初也想稍后添加外键约束,但结果有点复杂。所以其他人设计了一个解决方法:我们没有声明完整的约束,但是有一个系统函数 ( pg_get_catalog_foreign_keys),您可以从中获取外键关系。
有了所有必要的元数据,您现在可以查询它。我刚刚编写了自己的小程序 来生成Graphviz源文件。你可以在这里看到结果:https ://petere.github.io/pgcatviz/ 。如您所见,结果非常庞大且笨拙。也许有人想稍微玩一下 Graphviz 格式化选项。(请随意发送拉取请求。)但无论如何,所有信息现在都在那里。
原文标题:PostgreSQL system catalogs schema diagrams
原文作者:Peter Eisentraut
原文链接:http://peter.eisentraut.org/blog/2022/10/11/postgresql-system-catalog-schema-diagrams




