
想学会更多实用技巧,欢迎加入青学会MOP技术社区(实名社区)。
加入方法:公众号后台回复关键字“加入”获取小助手微信,添加后登记入会。

同时欢迎大家在评论区留言互动交流!社区会不定期举行相关的抽奖、公开分享活动。
如果你有想了解的知识点希望我们发文可以后台私信。
最近联合几个 Oracle ACE技术专家 开通了一个付费微信群,都是具有10多年金融、医疗、制造业10年以上的一线专家,坑位费399/人,无限期,目前群内近150人。加群后会有一些福利(分享各类技术文档,干货资源,问题解答等等),更有特邀嘉宾会定期在群内直播,解读AWR,快问快答等!有问题我们尽量都解答,毕竟399不能都解决所有问题。有兴趣联系微:ywu0613
内部知识库正在筹建中,不止有oracle!

正文开始


在Oracle和PostgreSQL中,Schema是用于组织和管理数据库对象(如表、视图、索引等)的逻辑容器,但两者的实现和用途存在显著差异。以下是详细对比:
Oracle 的 Schema
定义与特点
Schema 与用户绑定:在Oracle中,Schema与数据库用户一一对应。创建用户时,会自动生成一个同名的Schema,该用户拥有的所有对象(如表、视图)默认存储在其Schema中。 对象归属:用户创建的数据库对象属于其对应的Schema,其他用户需通过权限授予或使用 <schema>.<object>
语法访问。权限管理:Schema的权限通过用户权限控制。例如,用户A需要显式授权用户B访问其Schema中的对象。
-- 创建用户(自动生成同名的Schema)
CREATE USER user_a IDENTIFIED BY password;
-- 用户A创建表(属于user_a的Schema)
CREATE TABLE user_a.employees (id NUMBER, name VARCHAR2(50));
-- 授权用户B访问该表
GRANT SELECT ON user_a.employees TO user_b;
-- 用户B查询时需要指定Schema
SELECT * FROM user_a.employees;
PostgreSQL 的 Schema
定义与特点
独立于用户的命名空间:Schema是数据库内部的逻辑容器,与用户无直接绑定。一个数据库可包含多个Schema,默认存在 public
Schema。对象组织:通过Schema可将对象按功能或模块分类(如 hr
、finance
),避免命名冲突。权限管理:需单独授予Schema的 USAGE
权限,以及对具体对象的操作权限(如SELECT
)。
-- 创建Schema
CREATE SCHEMA hr;
-- 在hr Schema中创建表
CREATE TABLE hr.employees (idSERIAL, nameTEXT);
-- 授权用户b访问hr Schema
GRANT USAGE ON SCHEMA hr TO user_b;
GRANT SELECT ON hr.employees TO user_b;
-- 通过search_path简化访问(默认搜索路径)
SET search_path TO hr, public;
SELECT * FROM employees; -- 自动查找hr.employees
核心区别
| 特性 | Oracle | PostgreSQL |
|---|---|---|
| Schema与用户关系 | ||
| 权限管理 | ||
| 默认Schema | publicSchema | |
| 跨Schema访问 | <schema>.<object>语法 | search_path省略Schema前缀 |
| 设计目的 |
** 使用场景**
Oracle Schema:
适用于多租户环境,每个用户(租户)拥有独立的Schema,实现数据和权限隔离。PostgreSQL Schema:
适合单数据库中多模块的数据组织,例如将不同业务单元(HR、财务)的表放在不同Schema中。
** 注意事项**
Oracle:删除用户会级联删除其Schema中的所有对象,需谨慎操作。 PostgreSQL:若未正确设置 search_path
或未授权USAGE
权限,可能导致“Schema不存在”错误。迁移场景:从Oracle迁移到PostgreSQL时,需将用户相关的Schema转换为独立的逻辑Schema,并重新设计权限。
通过理解两者差异,可以更高效地设计数据库结构和权限模型,避免因混淆导致的访问错误或管理混乱。
往期文章回顾
MOP社区新闻
金仓专栏
告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)
KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)
DBA实战小技巧
实战:记一次RAC故障排查
DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
DBA实战运维小技巧存储篇(一)根目录满了如何处理
DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储
MOP社区投稿-内核开发
简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理
简单讨论 PostgreSQL C语言拓展函数返回数据表的方式
简单分析 pg_config 程序的作用与原理
Redis 日志机制简介(一):SlowLog
Redis 日志机制简介(二):AOF 日志
Redis 日志机制简介(三):RDB 日志
pg_cron插件使用介绍
Redis 的指令表实现机制简介
pg几款源码工具介绍
Redis 事务功能简介




