PostgreSQL系统表和信息_schema视图是否已记录在映射之间?
-
16-10-2019 - |
题
如果将PGADMINIII连接到PostgreSQL 9.X服务器,则会在用户界面中发现两个目录:ANSI(信息架构)和PostgreSQL(PG_CATALOG)。
我正在寻找描述映射的文档
- 数据库对象和系统表
- 系统表和信息_schema视图
例如,我希望能够从数据库中获取一个序列名称,并能够快速分辨出序列本身,序列的名称和序列的ACL(来自Grant和Revoke语句)都可以在两者中找到系统表和信息_schema视图中。
在任何地方都记录了记录吗?我已经通过PostgreSQL的在线文档,发现了这两个详细信息 ansi 和 Postgresql 目录,但我还没有找到映射的文档。
更新
看来该信息可能在源文件Information_schema.sql中,但是该文件似乎并不在在线源代码中。 (例如,请参见initdb.c at http://doxygen.postgresql.org/.)
解决方案
系统表是数据库对象的实现。因此,如果您说,请致电函数 foo()
, ,DBMS看 pg_proc
查看是否有功能 foo
以及参数和源代码等等。系统目录的布局和布置仅仅是随着时间的推移实现各种功能的实现者的方式。您已经指出了目录的文档。在许多情况下,函数和 pg_proc
. 。但是在其他情况下,例如索引,它更复杂。您将不得不从文档中挖掘出这些信息,或者可能是系统目录查询的许多示例。
信息模式由SQL标准指定。那里的原理是,如果您输入这些DDL命令,则信息架构的查询应给出这些结果。在许多情况下,对象和信息架构视图之间又有一个简单的映射,但在所有情况下都不是简单的。因此,保留该信息映射的单独文档将很麻烦,并且可能毫无用处。该原理是DDL,信息模式输出,而不是PostgreSQL系统目录中发生的情况。
最终,如果您想知道是否在目录表中找到序列或信息架构视图,则需要查询这些表。现实太复杂了,以至于更简单。 (我认为。如果您有更好的主意,请发送补丁。)
其他提示
由于大多数信息架构都是针对pg_catalog的视图形式 psql
:
psql -U postgres -c "\d information_schema.*" > information_schema.sql