article/postgresql_and_edb/postgresql系统表.md
2023-03-05 17:53:40 +08:00

149 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

已剪辑自: https://blog.csdn.net/yang_z_1/article/details/112270447
版本11.5
系统表是关系型数据库存放模式元数据的地方比如表和列的信息以及内部统计信息等。PostgreSQL的系统表就是普通表。你可以删除并重建这些表、增加列、插入和更新数值 然后彻底把你的系统搞垮。 通常情况下,我们不应该手工修改系统表,通常有 SQL 命令可以做这些事情。(例如, CREATE DATABASE 向 pg_database 表插入一行 — 并且实际上在磁盘上创建该数据库。)。 有几种特别深奥的操作例外,但是随着时间的流逝其中的很多也可以用 SQL 命令来完成,因此对系统表直接修改的需求也越来越小。
## 一 系统表总览
系统表名用途
| | |
| ----------------------- | ------------------------------------------ |
| pg_aggregate | 聚集函数 |
| pg_am | 索引访问方法 |
| pg_amop | 访问方法操作符 |
| pg_amproc | 访问方法支持过程 |
| pg_attrdef | 列默认值 |
| pg_attribute | 表列 ( “属性” ) |
| pg_authid | 认证标识符(角色) |
| pg_auth_members | 认证标识符成员关系 |
| pg_cast | 转换(数据类型转换) |
| pg_class | 表、索引、序列、视图 (“关系”) |
| pg_collation | 排序规则locale信息 |
| pg_constraint | 检查约束、唯一约束、主键约束、外键约束 |
| pg_conversion | 编码转换信息 |
| pg_database | 本数据库集簇中的数据库 |
| pg_db_role_setting | 每角色和每数据库的设置 |
| pg_default_acl | 对象类型的默认权限 |
| pg_depend | 数据库对象间的依赖 |
| pg_description | 数据库对象上的描述或注释 |
| pg_enum | 枚举标签和值定义 |
| pg_event_trigger | 事件触发器 |
| pg_extension | 已安装扩展 |
| pg_foreign_data_wrapper | 外部数据包装器定义 |
| pg_foreign_server | 外部服务器定义 |
| pg_foreign_table | 外部表信息 |
| pg_index | 索引信息 |
| pg_inherits | 表继承层次 |
| pg_init_privs | 对象初始特权 |
| pg_language | 编写函数的语言 |
| pg_largeobjec | t大对象的数据页 |
| pg_largeobject | _metadata大对象的元数据 |
| pg_namespace | 模式 |
| pg_opclass | 访问方法操作符类 |
| pg_operator | 操作符 |
| pg_opfamily | 访问方法操作符族 |
| pg_partitioned_table | 有关表的分区键的信息 |
| pg_pltemplate | 过程语言的模板数据 |
| pg_policy | 行安全策略 |
| pg_proc | 函数和过程 |
| pg_publication | 逻辑复制的发布 |
| pg_publication_rel | 与发布映射的关系 |
| pg_range | 范围类型的信息 |
| pg_replication_origin | 已注册的复制源 |
| pg_rewrite | 查询重写规则 |
| pg_seclabel | 数据库对象上的安全标签 |
| pg_sequence | 有关序列的信息 |
| pg_shdepend | 共享对象上的依赖 |
| pg_shdescription | 共享对象上的注释 |
| pg_shseclabel | 共享数据库对象上的安全标签 |
| pg_statistic | 规划器统计 |
| pg_statistic_ext | 扩展的规划器统计 |
| pg_subscription | 逻辑复制订阅 |
| pg_subscription_rel | 订阅的关系状态 |
| pg_tablespace | 本数据库集簇内的表空间 |
| pg_transform | 转换(将数据类型转换为过程语言需要的形式) |
| pg_trigger | 触发器 |
| pg_ts_config | 文本搜索配置 |
| pg_ts_config_map | 文本搜索配置的记号映射 |
| pg_ts_dict | 文本搜索字典 |
| pg_ts_parser | 文本搜索分析器 |
| pg_ts_template | 文本搜索模板 |
| pg_type | 数据类型 |
| pg_user_mapping | 将用户映射到外部服务器 |
## 二 常用系统表
### 1.pg_class
**pg_class 记录表和几乎所有具有列或者像表的东西。 这包括索引(但还要参见 pg_index )、序列 pg_sequence )、视图、物化视图、组合类型和 TOAST 表**
名称类型引用描述
| | | | |
| ------------------- | ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| oid | oid | | 行标识符(隐藏属性,必须被显式选择才会显示) |
| relname | name | | 表、索引、视图等的名字 |
| relnamespace | oid | pg_namespace.oid | 包含该关系的名字空间的 OID |
| reltype | oid | pg_type.oid | 可能存在的表行类型所对应数据类型的OID对索引为0索引没有 pg_type 项) |
| reloftype | oid | pg_type.oid | 对于有类型的表为底层组合类型的OID对于其他所有关系为 0 |
| relowner | oid | pg_authid.oid | 关系的拥有者 |
| relam | oid | pg_am.oid | 如果这是一个索引表示索引使用的访问方法B树、哈希等 |
| relfilenode | oid | 该关系的磁盘文件的名字0表示这是一个“映射”关系其磁盘文件名取决于低层状态 | |
| reltablespace | oid | pg_tablespace.oid | 该关系所存储的表空间。如果为0使用数据库的默认表空间。如果关系无磁盘文件时无意义 |
| relpages | int4 | | 该表磁盘表示的尺寸,以页面计(页面尺寸为 |
| reltuples | float4 | | 表中的行数。这只是一个由规划器使用的估计值。它被VACUUM、ANALYZE以及一些DDL命令如CREATEINDEX所更新。 |
| relallvisible | int4 | | 在表的可见性映射表中被标记为全可见的页数。这只是一个由规划器使用的估计值。它被VACUUM、aNALYZE以及一些DDL命令如CREATEINDEX所更新。 |
| reltoastrelid | oid | pg_class.oid | 与该表相关联的TOAST表的OID如果没有则为0。TOAST表将大属性“线系统表外”存储在一个二级表中。 |
| relhasindex | bool | | 如果这是一个表并且其上建有(或最近建有)索引则为真 |
| relisshared | bool | | 如果该表在集簇中的所有数据库间共享则为真。只有某些系统表(如 |
| relpersistence | char | | p=永久表u=无日志表t=临时表 |
| relkind | char | | r=普通表i=索引S=序列t=TOAST表v=视图m=物化视图c=组合类型f=外部表p=分区表 |
| relnatts | int2 | | 关系中用户列的数目(系统列不计算在内)。 |
| relchecks | int2 | | 表上 CHECK 约束的数目, |
| relhasoids | bool | | 如果为关系的每一行生成一个OID则为真 |
| relhaspkey | bool | | 如果表有(或曾有)一个主键则为真 |
| relhasrules | bool | | 如果表有(或曾有)规则则为真, |
| relhastriggers | bool | | 如果表有(或曾有)触发器则为真, |
| relhassubclass | bool | | 如果表有(或曾有)任何继承子女则为真 |
| relrowsecurity | bool | | 如果表上启用了行级安全性则为真, |
| relforcerowsecurity | bool | | 如果行级安全性(启用时)也适用于表拥有者则为真, |
| relispopulated | bool | | 如果表已被填充则为真(对于所有关系该系统表列都为真,但对于某些物化视图却不是) |
| relreplident | char | | 用来为行形成“replicaidentity”的列d=默认(主键,如果存在),n=无,f=所有列i=索引的indisreplident 被设置或者为默认 |
| relispartition | bool | | 如果表是分区,则为真 |
| relfrozenxid | xid | | 在此之前的所有事务ID在表中已经被替换为一个永久的“冻结的” )事务ID。这用于跟踪表是否需要被清理以便阻止事务ID回卷或者允许pg_xact被收缩。如果该关系不是一个表则为0InvalidTransactionId。 |
| relminmxid | xid | | 在此之前的多事务ID在表中已经被替换为一个事务ID。这被用于跟踪表是否需要被清理以阻止多事务ID回卷或者允许pg_multixact被收缩。如果关系不是一个表则为0InvalidMultiXactId。 |
| relacl | aclitem[] | | 访问权限 |
| reloptions | text[] | | 访问方法相关的选项以“keyword=value”字符串形式 |
| relpartbound | pg_node_tree | | 如果表是分区,则是分区绑定的内部表示形式 |
### 2 pg_attribute
**pg_attribute 存储有关表列的信息。数据库中的每一个表的每一个列都恰好在 pg_attribute 中有一行。**
名字类型引用描述
| | | | |
| ------------- | --------- | ---------------- | ------------------------------------------------------------ |
| attrelid | oid | pg_class.oid | 此列所属的表。 |
| attname | name | | 列名。 |
| atttypid | oid | pg_type.oid | 列的数据类型。 |
| attstattarget | int4 | | attstattarget控制ANALYZE为这个列设置的统计细节的级别。零值表示不收集统计信息负数表示使用系统缺省的统计对象。正数值的确切信息是和数据类型相关的。 |
| attlen | int2 | | 该列所属类型的长度。(pg_type.typlen的拷贝) |
| attnum | int2 | | 列的编号普通列是从1开始计数的。系统列如oid是任意的负数。 |
| attndims | int4 | | 如果该列是数组该值表示数组的维数否则是0。 |
| attcacheoff | int4 | | 在磁盘上总是-1但是如果装载入内存中的行描述器中 它可能会被更新为缓冲在行中列的偏移量。 |
| atttypmod | int4 | | 表示数据表在创建时提供的类型相关的数据(比如varchar列的最大长度)。其值对那些不需要atttypmod的类型而言通常为-1。 |
| attbyval | bool | | pg_type.typbyval列值的拷贝。 |
| attstorage | char | | pg_type.typstorage列值的拷贝。 |
| attalign | char | | pg_type.typalign列值的拷贝。 |
| attnotnull | bool | | 如果该列带有非空约束,则为真,否则为假。 |
| atthasdef | bool | | 该列是否存在缺省值此时它对应pg_attrdef表里实际定义此值的记录。 |
| attisdropped | bool | | 该列是否已经被删除。如果被删除该列在物理上仍然存在表中但会被分析器忽略因此不能再通过SQL访问。 |
| attislocal | bool | | 该列是否局部定义在对象中的。 |
| attinhcount | int4 | | 该列所拥有的直接祖先的个数。如果一个列的祖先个数非零,那么它就不能被删除或重命名。 |
| attcollation | oid | pg_collation.oid | 该列被定义的排序规则如果该列不是一个可排序数据类型则为0。 |
| attacl | aclitem[] | | 列级访问权限 |
| attoptions | text[] | | 属性级选项 |
| attfdwoptions | text[] | | 属性级的外部数据包装器选项 |