首页 > 数据库 >PostgreSQL的系统视图pg_class

PostgreSQL的系统视图pg_class

时间:2024-11-23 14:34:35浏览次数:10  
标签:PostgreSQL -# 视图 查询 pg white WHERE class

在 PostgreSQL 中,pg_class 是一个系统目录表,用于存储所有关系(如表、索引、视图、序列等)的元数据。pg_class数据库系统的重要组成部分,包含了关于每个关系的具体信息。

pg_class 视图字段说明

以下是 pg_class 表中一些主要字段及其说明:

  • oid:对象 ID(每个关系的唯一标识)。
  • relname:关系(表、索引、视图等)的名字。
  • relnamespace:关系所在的命名空间(schema)的 OID。
  • reltype:用来存储此表的行类型的类型 OID。
  • reloftype:如果表是一个类型表的子表,则为类型表的 OID,否则为零。
  • relowner:表所有者的 OID。
  • relam:如果是索引,表示索引的访问方法的 OID。
  • relfilenode:缺省情况下为对象标识符的文件节点号。
  • reltablespace:存储该关系的表空间的 OID。
  • relpages:分配的页面数。仅用统计信息更新。
  • reltuples:估计的元组数。仅用统计信息更新。
  • relallvisible:最后一个确定可见页面的块号。
  • reltoastrelid:与此关系关联的 TOAST 表的 OID(如果有)。
  • reltoastidxid:与此 TOAST 表关联的索引 OID(如果有)。
  • relhasindex:表中是否有索引。
  • relisshared:如果是共享表,则为 true。
  • relpersistence:应该在数据库关闭期间保存哪些对象 (p for permanent, u for unlogged, t for temporary)。
  • relkind:关系的类型(如 r for ordinary table, i for index, S for sequence, v for view, etc)。
  • relnatts:表的列数。
  • relchecks:表的 CHECK 约束的数量。
  • relhasrules:如果表有规则,则为 true。
  • relhastriggers:如果表有触发器,则为 true。
  • relhassubclass:如果表有子表,则为 true。

使用示例

查询所有表信息

可以用以下查询获取所有表的信息:

SELECT * FROM pg_class WHERE relkind = 'r';
  • 1
查询所有索引信息

可以用以下查询获取所有索引的信息:

SELECT * FROM pg_class WHERE relkind = 'i';
  • 1
查询特定表的信息

根据表名查询特定表的信息:

SELECT * FROM pg_class WHERE relname = 't1';
  • 1
查询特定模式下的所有表

可以结合 pg_namespace 表,根据模式过滤表:

SELECT
    c.relname, 
    n.nspname
FROM 
    pg_class c 
JOIN 
    pg_namespace n ON c.relnamespace = n.oid
WHERE 
    c.relkind = 'r'
    AND n.nspname = 'yewu1';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

结果输出

white=# SELECT
white-#     c.relname, 
white-#     n.nspname
white-# FROM 
white-#     pg_class c 
white-# JOIN 
white-#     pg_namespace n ON c.relnamespace = n.oid
white-# WHERE 
white-#     c.relkind = 'r'
white-#     AND n.nspname = 'yewu1';
 relname | nspname 
---------+---------
 t1      | yewu1
 t2      | yewu1
 t4      | yewu1
(3 rows)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
查询表大小、行数等统计信息

可以通过 pg_class 表中的 relpagesreltuples 字段获取表的统计信息:

SELECT 
    relname,
    relpages,
    reltuples
FROM 
    pg_class
WHERE 
    relkind = 'r';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结合其他系统表使用

查询表的所有者信息(结合 pg_roles)

通过结合 pg_roles 表查询表的所有者信息:

SELECT 
    c.relname,
    r.rolname
FROM 
    pg_class c
JOIN 
    pg_roles r ON c.relowner = r.oid
WHERE 
    c.relkind = 'r';
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
查询表的列信息(结合 pg_attribute)

通过结合 pg_attribute 表查询表的列信息:

SELECT 
    a.attname,
    a.atttypid::regtype,
    a.attlen,
    a.attnotnull
FROM 
    pg_class c
JOIN 
    pg_attribute a ON c.oid = a.attrelid
WHERE 
    c.relname = 't1'
    AND a.attnum > 0
    AND NOT a.attisdropped;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果输出

white=# SELECT 
white-#     a.attname,
white-#     a.atttypid::regtype,
white-#     a.attlen,
white-#     a.attnotnull
white-# FROM 
white-#     pg_class c
white-# JOIN 
white-#     pg_attribute a ON c.oid = a.attrelid
white-# WHERE 
white-#     c.relname = 't1'
white-#     AND a.attnum > 0
white-#     AND NOT a.attisdropped;
 attname | atttypid | attlen | attnotnull 
---------+----------+--------+------------
 id      | integer  |      4 | f
(1 row)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
查询表的约束信息(结合 pg_constraint)

通过结合 pg_constraint 表查询表的约束信息:

SELECT 
    conname,
    contype,
    condeferrable,
    condeferred
FROM 
    pg_constraint
WHERE 
    conrelid = (SELECT oid FROM pg_class WHERE relname = 't1');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

实际应用场景

  1. 元数据查询:通过查询 pg_class 表,可以轻松获取数据库中有关表、索引、视图等的元数据信息,适用于数据审计和元数据管理。
  2. 统计信息分析:可以结合 relpagesreltuples 字段,对表的大小和数据量进行估算,为数据库性能调优提供参考数据。
  3. 权限管理:结合 pg_roles 表,可以分析和管理数据库对象的所有者信息,确保数据库访问权限的合理分配。
  4. 约束管理:结合 pg_constraint 表,分析和管理表级约束,确保数据完整性。

小结

pg_class 是 PostgreSQL 中用于存储表、索引、视图等关系元数据的重要系统表。通过查询和结合其他系统表,数据库管理员可以获取关于数据库对象的详细信息,进行元数据管理、统计分析、权限管理和约束管理,从而提高数据库管理的效率和安全性。

转自

标签:PostgreSQL,-#,视图,查询,pg,white,WHERE,class
From: https://www.cnblogs.com/quss/p/18564435

相关文章

  • MMORPG技能管线设计经验总结
    导语:表现丰富、机制多变的技能作为MMORPG游戏战斗体验的核心组成部分,是吸引玩家的一大亮点,本文总结了在MMORPG技能系统设计上的一些经验,供大家参考。 1、设计思路 早期的MMORPG手游中,技能的表现相对简单,因此技能流程被分为几个固定的阶段(如准备阶段、攻击阶段、受击阶段),可......
  • PostgreSQL里pg_filenode.map文件的意义
    一、关于pg_filenode.map通常情况下,PostgreSQL中每张表在磁盘上都有与之相关的文件,而这些文件的名字便是relfilenode,我们可以通过pg_class的relfilenode字段去查询。postgres=#selectrelname,oid,relfilenode,reltablespacefrompg_classwhererelnamein('pg_database','p......
  • Postgresql系统表/视图
    Postgresql系统表概述表名称用途pg_aggregate聚集函数pg_am索引访问方法pg_amop访问方法操作符pg_amproc访问方法支持过程pg_attrdef字段缺省值pg_attribute表的列(也称为"属性"或"字段")pg_authid认证标识符(角色)pg_auth_members认证标识符成员关系pg_autovacuum每个关系......
  • FPGA、VHDL 基于RISC-V格式的16位位缩模型机设计
    项目地址:FPGA、VHDL基于RISC-V格式的16位位缩模型机设计设计目的实现基于RISC-V格式的16位MCU设计,参考RISC-V的基本格式,进行位数缩减。实现RISC-V中寄存器加法add,立即数加法addi,半字加载lh,半字存储sh,不等条件跳转bne,相等条件跳转beq,无条件跳转链接jal。实现立即寻址、寄存......
  • 【MySQL】提高篇—理论讲解与案例分析:实践练习:编写复杂查询、创建视图和存储过程
    关系数据库是存储和管理数据的核心工具。随着数据量的不断增加和业务需求的复杂化,开发者和数据分析师需要掌握编写复杂查询、创建视图和存储过程的技能。这些技能不仅能够提高数据操作的效率,还能确保数据处理的准确性和安全性。复杂查询:能够从多个表中提取相关数据,进行联接、......
  • 【深入浅出玩转FPGA】之FPGA配置模式
    FPGA配置模式XilinxUltraScaleFPGA有7种配置模式,由模式输入引脚M[2:0]决定。主串配置模式从串配置模式主并配置模式(8位或16位)从并配置模式(8位、16位或32位)主SPI配置模式主BPI配置模式JTAG/边界扫描配置模式1、主,即配置时钟CCLK由FPGA提供;从,即配置时钟CCLK由外部控制器提......
  • 【重学 MySQL】七十三、灵活操控视图数据,轻松掌握视图删除技巧
    【重学MySQL】七十三、灵活操控视图数据,轻松掌握视图删除技巧更新视图数据:灵活操控,即时反映删除视图:优雅清理,保持数据库整洁深度解析:为何更新和删除视图如此重要?结语在MySQL的数据管理中,视图(View)作为一种虚拟表,为我们提供了极大的便利,它不仅能够简化复......
  • FPGA时序约束基础
    一、时序约束的目的由于实际信号在FPGA内部期间传输时,由于触发器等逻辑期间并非理想期间,因此不可避免地存在传输延时,这种延迟在高速工作频率、高逻辑级数时会造成后级触发器地建立时间和保持时间不满足,造成时序违例。(这也是为什么需要把FPGA设计不能以高级编程语言思想看的原因,设......
  • windows下在Postgresql数据库中扩展postgis功能实现存储空间地理数据
    操作分为以下三步:1.下载 Postgresql数据库(在官网直接下载即可)2.下载安装postgis(需要对应pgadmin版本安装时路径要与pgadmin路径一致)3.在pgadmin中新建数据库扩展postgis(执行语句即可)1.下载 Postgresql数据库(在官网直接下载即可)Download(pgadmin.org)2.下载安装postg......
  • 09视图
    视图......