如果将 pgadminIII 连接到 PostgreSQL 9.x 服务器,您会发现用户界面中公开了两个目录:ANSI(信息模式)和 PostgreSQL(pg_catalog)。
我正在寻找描述之间映射的文档
- 数据库对象和系统表
- 系统表和 information_schema 视图
例如,我希望能够从数据库中获取序列名称,并且能够快速判断序列本身、序列名称和序列的 ACL(来自 GRANT 和 REVOKE 语句)在两者中的位置系统表和 information_schema 视图中。
这在任何地方都有记录吗?我浏览了 PostgreSQL 的在线文档,找到了ANSI和PostgreSQL目录的详细信息,但我没有找到映射的文档。
更新
看起来信息可能在源文件 information_schema.sql 中,但该文件似乎不在在线源代码中。(例如,参见http://doxygen.postgresql.org/上的 initdb.c 。)
系统表是数据库对象的实现。因此,如果您调用一个函数
foo()
,DBMSpg_proc
会查看是否有函数foo
以及参数和源代码等是什么。系统目录的布局和排列只是各种功能的实现者随着时间的推移制作它们的方式。您已经指出了目录的文档。在许多情况下,有一个简单的映射,例如,函数和pg_proc
. 但在其他情况下,例如对于索引,它有点复杂。您将不得不从文档中挖掘这些信息,或者可能是从四处飞来的系统目录查询的许多示例中挖掘出来。信息模式由 SQL 标准指定。原则是,如果您输入这些 DDL 命令,那么信息模式的查询应该会给出这些结果。在许多情况下,对象和信息模式视图之间仍然存在简单的映射,但并非在所有情况下都直截了当。因此,维护此信息映射的单独文档将很麻烦并且可能无用。原则是 DDL 输入,信息模式输出,而不是 PostgreSQL 系统目录中发生的事情。
最终,如果您想知道是否会在目录表或信息模式视图中找到序列,则需要查询这些表。现实太复杂了,不能再简单了。(我想。如果您有更好的想法,请发送补丁。)
由于大多数信息模式都是针对 pg_catalog 的视图形式,因此您可以使用以下方法获得大部分信息
psql
: