PostgreSQL中是否可以在Catalogs下创建自定义schema?
PostgreSQL 自定义schema归入Catalogs分类实现方案
实现目标
- 将自定义的工具函数、视图存储到独立schema,与普通用户业务schema隔离
- 该schema自动归入pgAdmin等工具的
Catalogs分类,不显示在普通Schemas列表中
操作步骤
1. 创建独立隔离的自定义schema
首先创建专属schema,同时回收公开权限实现访问隔离:
-- 替换为你要使用的schema名,例如custom_sys CREATE SCHEMA custom_sys; -- 收回public角色的默认访问权限,避免普通用户随意访问 REVOKE ALL ON SCHEMA custom_sys FROM public; -- 按需给管理员角色授权访问 GRANT USAGE, CREATE ON SCHEMA custom_sys TO postgres;
后续你所有要收纳的工具函数、视图都可以创建到该schema下。
2. 配置为系统级schema归入Catalogs分类
pgAdmin等客户端判断schema是否属于Catalogs分类的核心依据是该schema是否被标记为系统schema,PostgreSQL提供了官方配置方式无需修改系统表:
-- 替换custom_sys为你的自定义schema名,永久生效到当前数据库 ALTER DATABASE 你的数据库名 SET system_schemas = 'pg_catalog, information_schema, custom_sys'; -- 如果是模板数据库要全局生效,执行以下语句,后续所有从模板创建的数据库都会继承配置 ALTER DATABASE template1 SET system_schemas = 'pg_catalog, information_schema, custom_sys';
配置完成后执行重载生效:
SELECT pg_reload_conf();
效果验证
重启pgAdmin并刷新对应数据库节点,展开Catalogs分类即可看到你的自定义schema,普通Schemas列表不会显示该schema,完全符合隔离需求。
注意事项
- 仅需给业务用户授予对应函数/视图的访问权限即可,无需给用户开放schema的
USAGE权限,进一步保证环境整洁 - 不要直接修改
pg_namespace等系统表的内置属性,通过system_schemas参数配置是官方支持的安全方案
内容的提问来源于stack exchange,提问作者Reinsbrain
相关产品推荐
相关产品推荐

