已剪辑自: 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被收缩。如果该关系不是一个表则为0(InvalidTransactionId)。 | | relminmxid | xid | | 在此之前的多事务ID在表中已经被替换为一个事务ID。这被用于跟踪表是否需要被清理,以阻止多事务ID回卷或者允许pg_multixact被收缩。如果关系不是一个表则为0(InvalidMultiXactId)。 | | 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[] | | 属性级的外部数据包装器选项 |