postgresql 数据库 系统表

postgresql 数据库 系统表

系统表是关系型数据库存放模式元数据的地方,比如表和列的信息,以及内部统计信息等。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[] 属性级的外部数据包装器选项

猜你喜欢

转载自blog.csdn.net/yang_z_1/article/details/112270447