pg入门5—pg有哪些系统schema
在 PostgreSQL 中,除了用户创建的 schema 之外,系统还自动创建了一些系统 schema,用于管理数据库的元数据、系统信息以及维护操作。以下是 PostgreSQL 中的常见系统 schema:
1. pg_catalog
- 用途:
pg_catalog
是 PostgreSQL 中最重要的系统 schema,存储数据库中的系统表、视图和元数据。所有关于数据库对象(如表、列、索引、权限、角色等)的信息都在这里。 - 典型表:
pg_database
:列出所有数据库的信息。pg_tables
:列出所有表的信息。pg_roles
:列出所有用户和角色的信息。pg_class
:存储所有数据库对象的元数据(如表、索引、视图)。pg_index
:存储索引的元数据。
- 访问方式:系统表在
pg_catalog
中,但默认不需要显式指定 schema。例如:SELECT * FROM pg_tables;
2. information_schema
- 用途:这是一个标准 SQL 定义的 schema,用于提供数据库元数据的信息视图,这些视图可以用来查询数据库结构(例如表、列、权限、数据类型等),是一个跨数据库标准的元数据查询接口。
- 典型视图:
tables
:列出所有表的信息。columns
:列出所有列的信息。views
:列出所有视图的信息。schemata
:列出所有 schema 的信息。
- 区别:与
pg_catalog
不同,information_schema
提供的是标准化的元数据接口,方便跨数据库使用。
3. pg_toast
- 用途:
pg_toast
是一个特殊的 schema,专门用于存储大对象(如大型文本字段、二进制数据等)。当一个表中的某列的数据超过了 PostgreSQL 的存储限制(大约 8 KB),这些超大数据会存储在pg_toast
表中。 - 自动管理:
pg_toast
是 PostgreSQL 自动管理的 schema,用户通常不需要直接操作它。 - 典型表:
pg_toast_<oid>
:这些表存储超大字段的数据,名称以pg_toast_
开头,后跟关联表的 OID。
- 注意:用户不会直接操作这些表,但 PostgreSQL 在处理大对象时会自动使用它们。
4. pg_temp
- 用途:
pg_temp
是用于存储临时对象(如临时表、临时视图等)的 schema。每当会话创建临时对象时,PostgreSQL 会为该会话分配一个专用的临时 schema,通常以pg_temp_
为前缀。 - 自动管理:
pg_temp
schema 仅在会话期间存在,会话结束后自动删除。 - 典型表:临时表和临时对象存储在该 schema 中,但这些对象只在当前会话中可见。
5. pg_toast_temp
- 用途:
pg_toast_temp
用于存储临时大对象的数据。类似于pg_toast
,但它专门用于临时表或临时对象的数据超限时的存储。 - 自动管理:它与
pg_temp
一样,只在会话期间存在,处理与会话相关的超大字段。
6. pg_internal
(仅内部使用)
- 用途:这个 schema 用于存储 PostgreSQL 内部使用的对象和函数。用户通常不会直接访问或操作
pg_internal
中的对象。
系统 schema 的作用与管理
这些系统 schema 是 PostgreSQL 内部功能和操作的基础,它们存储系统表、系统视图、临时数据和内部对象。用户可以通过 pg_catalog
和 information_schema
获取数据库结构和元数据信息,但不应该直接操作 pg_toast
或 pg_temp
等系统表或 schema。
如何查看数据库中的所有 schema:
可以使用以下查询查看当前数据库中的所有 schema,包括系统 schema 和用户定义的 schema:
SELECT schema_name FROM information_schema.schemata;
总结:
PostgreSQL 中的主要系统 schema 包括:
pg_catalog
:存储数据库的系统表和元数据。information_schema
:标准 SQL 定义的元数据查询接口。pg_toast
:用于存储大对象数据。pg_temp
:用于存储会话中的临时对象。pg_toast_temp
:用于存储临时大对象数据。