重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 818|回复: 1
打印 上一主题 下一主题

pg_class 表中的 relkind字段各代表什么类型的对象

[复制链接]
跳转到指定楼层
楼主
发表于 2024-8-31 09:55:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
`pg_class` 是 PostgreSQL 系统目录中的一个重要表,用于存储数据库中的所有表、索引、视图、序列、复合类型等的元数据信息。`pg_class` 表中的 `relkind` 列用于表示每个对象的类型。

`relkind` 的可能取值及其含义如下:

- **`r`**: 常规表 (ordinary table)
- **`i`**: 索引 (index)
- **`S`**: 序列 (sequence)
- **`v`**: 视图 (view)
- **`m`**: 物化视图 (materialized view)
- **`c`**: 复合类型 (composite type)
- **`t`**: TOAST 表 (TOAST table), 用于存储非常大的数据值
- **`f`**: 外部表 (foreign table)
- **`p`**: 分区表 (partitioned table)
- **`I`**: 分区索引 (partitioned index)

这些标识符帮助你区分不同类型的对象,并在查询元数据时确定对象的性质。
具体可以参见官方文档:https://www.postgresql.org/docs/16/catalog-pg-class.html


**示例查询**:

如果你想查看当前数据库中的所有常规表,可以执行以下 SQL 语句:

```sql
SELECT relname
FROM pg_class
WHERE relkind = 'r';
```
看所有类型:

我这里以PG16.4为例:

postgres=# select version();
                                                   version                                                   
--------------------------------------------------------------------------------------------------------------
PostgreSQL 16.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20231218 (Red Hat 11.4.1-3.0.1), 64-bit
(1 row)

postgres=# select distinct relkind from pg_class order by 1;
relkind
---------
S
c
i
r
t
v
(6 rows)

这将返回所有常规表的名称。类似地,可以使用其他的 `relkind` 值来查询不同类型的数据库对象。

postgres=# select relname,
            CASE c.relkind
                WHEN 'r' THEN 'table'
                WHEN 'i' THEN 'index'
                WHEN 'S' THEN 'sequence'
                WHEN 't' THEN 'TOAST table'
                WHEN 'v' THEN 'view'
                WHEN 'm' THEN 'materialized view'
                WHEN 'c' THEN 'composite type'
                WHEN 'f' THEN 'foreign table'
                WHEN 'P' THEN 'partitioned table'
                WHEN 'I' THEN 'partitioned index'
            END as "Type"
from pg_class c
order by 2 desc
;
                    relname                     |      Type      
------------------------------------------------+----------------
pg_stat_sys_tables                             | view
pg_stat_xact_all_tables                        | view
pg_stat_all_tables                             | view
pg_timezone_names                              | view
pg_timezone_abbrevs                            | view
pg_seclabels                                   | view
pg_prepared_statements                         | view
pg_stat_progress_vacuum                        | view
pg_stat_progress_analyze                       | view
pg_stat_wal                                    | view
pg_stat_io                                     | view
pg_shadow                                      | view
pg_roles                                       | view
pg_hba_file_rules                              | view
pg_settings                                    | view
pg_file_settings                               | view
pg_backend_memory_contexts                     | view
pg_ident_file_mappings                         | view
pg_config                                      | view


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

沙发
 楼主| 发表于 2024-8-31 10:06:20 | 只看该作者
postgres=# select oid,nspname from pg_namespace;
  oid  |      nspname      
-------+--------------------
    99 | pg_toast
    11 | pg_catalog
  2200 | public
13238 | information_schema
32910 | squeeze
33042 | pg_toast_temp_3
33935 | pg_temp_3
(7 rows)

postgres=# select relname,
            CASE c.relkind
                WHEN 'r' THEN 'table'
                WHEN 'i' THEN 'index'
                WHEN 'S' THEN 'sequence'
                WHEN 't' THEN 'TOAST table'
                WHEN 'v' THEN 'view'
                WHEN 'm' THEN 'materialized view'
                WHEN 'c' THEN 'composite type'
                WHEN 'f' THEN 'foreign table'
                WHEN 'P' THEN 'partitioned table'
                WHEN 'I' THEN 'partitioned index'
            END as "Type",relnamespace
from pg_class c where relnamespace not in (11,13238,99,32910)
order by 2 desc
;
         relname         | Type  | relnamespace
-------------------------+-------+--------------
pg_stat_statements      | view  |         2200
pg_stat_statements_info | view  |         2200
t                       | table |         2200
tbl_article             | table |         2200
dept                    | table |         2200
emp                     | table |         2200
stu                     | table |         2200
item                    | table |         2200
t1                      | table |         2200
test1                   | table |         2200
t_n                     | index |         2200
(11 rows)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-24 22:24 , Processed in 0.121319 second(s), 18 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表