PostgreSQL中查询所有的schema

发布于:2025-09-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

在 PostgreSQL 中查询所有的 schema,最常用的是查询 information_schema.schemata 系统视图或 pg_catalog.pg_namespace 系统表。

以下是几种方法:

方法一:使用 information_schema.schemata(标准,最常用)

这是符合标准的方法,可读性好,通常返回最清晰的结果。

SELECT schema_name
FROM information_schema.schemata
ORDER BY schema_name;

结果示例:
schema_name

information_schema
pg_catalog
pg_toast
public
your_custom_schema

方法二:使用 pg_catalog.pg_namespace(PostgreSQL特有)

此方法直接查询 Postgre 的系统目录表,速度可能稍快,并且包含最全的信息。

SELECT nspname AS schema_name
FROM pg_catalog.pg_namespace
ORDER BY nspname;

结果示例:
nspname

information_schema
pg_catalog
pg_toast
public
your_custom_schema

方法三:使用 p 元命令 \dn(命令行工具)

如果你正在使用 p 命令行工具,这是最快、最方便的方法。

\dn

结果示例:
List of schemas
Name | Owner
--------------------±------------------
information_schema | postgres
pg_catalog | postgres
pg_toast | postgres
public | postgres
your_custom_schema | your_username

要获取更详细的信息(如权限和描述),可以使用:
\dn+

方法四:过滤系统Schema

通常我们只关心用户创建的 schema,可以排除 Postgre 的系统 schema。

使用 information_schema.schemata:
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name NOT LIKE ‘pg_%’
AND schema_name != ‘information_schema’
ORDER BY schema_name;

使用 pg_catalog.pg_namespace:
SELECT nspname AS schema_name
FROM pg_catalog.pg_namespace
WHERE nspname NOT LIKE ‘pg_%’
AND nspname != ‘information_schema’
ORDER BY nspname;

各系统Schema的说明

了解这些默认存在的 schema 很有用:
| Schema 名称 | 说明 |
| : | : |
| public | 默认的用户对象schema。如果创建表时不指定 schema,就会放在这里。 |
| pg_catalog | 系统元数据表。包含所有系统表、数据类型、函数等信息(如 pg_class, pg_attribute)。 |
| information_schema | 标准化的系统视图。用符合标准的方式提供数据库元数据信息。 |
| pg_toast | 大对象存储空间。用于透明地存储超过单个数据页大小的大型字段(TOAST表)。 |
| pg_temp_* | 临时schema。用于存储会话的临时表,通常对用户不可见。 |

总结与最佳实践

日常查询:使用 SELECT * FROM information_schema.schemata;,标准且清晰。
脚本或程序中使用:同上,使用 information_schema.schemata。
在 p 命令行中快速查看:使用 \dn 或 \dn+,最快最方便。
需要深入了解系统:使用 pg_catalog.pg_namespace,可以关联其他系统表获取更多信息。


网站公告

今日签到

点亮在社区的每一天
去签到