从SQL Server过渡到PostgreSQL:理解模式的差异
从SQL Server过渡到PostgreSQL:理解模式的差异
前言
随着越来越多的企业转向开源技术,商业数据库管理员和开发者也逐渐面临向PostgreSQL迁移的需求。 虽然SQL Server和PostgreSQL共享许多数据库管理系统(RDBMS)的基本概念,但它们在处理某些结构上的差异可能会让人感到困惑,其中最显著的就是模式(Schema)的概念。
在SQL Server中,模式提供了一种灵活的对象组织方式,虽然和PostgreSQL的模式结构有一定相似性,但两者在用户、权限和对象管理的细节上存在一些重要区别。
什么是Schema(模式)?
在我们探讨SQL Server和PostgreSQL之间的区别之前,先简单定义一下“模式”。在数据库系统中,模式是数据库对象(如表、视图、索引、存储过程等)的集合。模式为这些对象提供了一个逻辑命名空间,确保每个对象在该命名空间内是唯一的。 虽然SQL Server和PostgreSQL都使用模式来组织数据库对象,但它们之间的关系以及模式在实际管理中的作用存在一些显著的区别。
SQL Server的模式方法:灵活跟用户松耦合
- 模式作为命名空间
在SQL Server中,模式提供了一种将对象组织在一起的方式,并且独立于用户账户。每个模式都可以由多个用户访问,而不像一些其他的RDBMS那样与用户一一对应紧耦合,例如Oracle。SQL Server中的模式不仅是一个逻辑分组,还通过这种方式为数据库提供了更灵活的权限管理。
例如,SQL Server中默认的dbo(Database Owner)模式就是一个常见的命名空间,几乎所有用户都可以在该模式中创建对象。此外,SQL Server允许数据库管理员为不同的功能或部门创建不同的模式,例如HR.Employees或Sales.Customers,从而使对象在同一个数据库中逻辑分离,方便管理和权限分配。

- 对象的完全限定名
在SQL Server中,表或视图的完全限定名通常使用schema_name.object_name的格式,例如dbo.Employees。这种命名方式允许数据库管理员按功能或业务部门组织数据库对象,而无需将每个模式与用户严格绑定,也就是说模式跟用户不是一对一关系,另外也可以忽略不写模式,而直接写对象名object_name。
PostgreSQL的模式方法:灵活的命名空间模型
- 模式作为命名空间
与SQL Server类似,PostgreSQL中的模式也是命名空间,但与用户账户完全解耦。PostgreSQL中的模式可以包含多个用户创建的对象,而多个模式中的对象也可以被同一用户拥有或访问。它为数据库提供了模块化的结构,让企业能够根据功能、部门或项目来分配模式。
举个例子,如果在PostgreSQL中为HR部门创建了一个模式,hr.employees表的完全限定名将反映该模式和对象的关系,类似SQL Server中的schema_name.object_name结构。不过,PostgreSQL允许更细粒度的权限管理,用户可以根据业务需求被授予对特定模式或对象的权限。

- 解耦用户和模式
在PostgreSQL中,用户和模式之间没有任何强制绑定关系。一个用户可以跨多个模式拥有对象,而多个用户也可以共享同一个模式。这种灵活性极大地提升了PostgreSQL在多用户、多部门协作中的适应能力。
PostgreSQL允许数据库管理员通过设置搜索路径来简化对象访问,避免在查询中必须总是指定模式名称,跟SQL Server一样,可以不必过度依赖用户和模式之间的绑定关系。
SQL Server和PostgreSQL模式的主要区别
- 模式与用户的关系
SQL Server: SQL Server中的模式独立于用户,用户可以跨多个模式拥有或访问对象。模式是命名空间,主要用于逻辑组织和权限控制。
PostgreSQL: PostgreSQL同样解耦了模式与用户的关系,多个用户可以拥有同一模式中的对象。比SQL Server更加灵活,允许更模块化的数据库设计。
- 模式的创建与管理
SQL Server: 在SQL Server中,模式通常是在数据库创建时自动生成(如dbo),管理员可以显式创建新的模式,并分配给不同的对象。
PostgreSQL: 在PostgreSQL中,模式可以通过CREATE SCHEMA命令创建,并允许根据需要在单一数据库中创建多个模式,为对象分组提供灵活性。
- 对象组织方式
SQL Server: SQL Server中,模式用于组织相关对象(如表、视图、存储过程等),这使得管理权限和逻辑分组变得更加简单。模式可以根据业务需求进行自定义命名。
PostgreSQL: PostgreSQL中的模式也是用于组织数据库对象的逻辑分组。
- 访问控制
SQL Server: SQL Server的访问控制通过角色和模式实现。用户可以被授予访问特定模式或数据库对象的权限。
PostgreSQL: PostgreSQL的访问控制也很灵活,支持在模式级别和对象级别进行权限管理。用户可以通过角色拥有跨模式的对象访问权限。
实际操作
- 利用搜索路径
PostgreSQL的搜索路径功能允许简化查询,避免重复指定模式名称。通过正确配置搜索路径,您可以提高工作效率。
- 使用角色进行权限管理
PostgreSQL的角色系统为跨多个模式的权限管理提供了极大的灵活性。您可以根据业务需求创建不同的角色,并将相应的访问权限分配给这些角色。
总结
从SQL Server过渡到PostgreSQL基本上没有太大的差异。在模式在SQL Server和PostgreSQL中都是用于逻辑分组。
PostgreSQL跟SQL Server一样,拥有模式灵活的特性,而且解耦了用户关系,使得数据库的管理和组织更加模块化。
参考文章
https://www.postgresql.org/docs/current/sql-createschema.html
https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-schema?view=sql-server-ver16
https://www.sqlshack.com/a-walkthrough-of-sql-schema/
https://www.tutorialsteacher.com/sqlserver/database-schema
https://www.postgresql.org/docs/current/ddl-schemas.html
https://www.cybertec-postgresql.com/en/what-is-a-schema-in-postgresql/

本文版权归作者所有,未经作者同意不得转载。
从SQL Server过渡到PostgreSQL:理解模式的差异的更多相关文章
- MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解
判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...
- [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server
一.了解PPAS的迁移方式1.在线迁移和离线迁移使用Migration Studio或Migration Toolkit直接向PPAS数据库进行对象定义和数据表中数据的迁移称为在线迁移,生成要迁移对象 ...
- SQL Server“复杂”概念之理解
用惯了Oracle的人,接触SQL Server中的概念时,会觉得比较难理解,甚至感觉有点“绕”,这是因为Oracle中将某些其他数据库中存在的概念给简化了,这里就拿两个最常见的概念来举例说明:1.s ...
- SQL Server 2000 :选择许可模式及更改
在SQL Server企业版中,有一个许可模式概念,有两种许可模式:“处理器许可证”和“每客户”模式.“处理器许可证”模式表示允许几个CPU运行SQL Server,“每客户”决定的是客户端连接数. ...
- SQL Server执行计划的理解【转】
要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看 ...
- sql server 备份与恢复系列五 完整模式下的备份与还原
一.概述 前面介绍了简单恢复模式和大容量恢复模式,这篇继续写完整恢复模式下的备份与还原.在完整恢复模式里最大的优点是只要能成功备份尾日志,就可以还原到日志备份内包含的任何时点("时点恢复&q ...
- sql server 备份与恢复系列四 大容量模式下的备份与还原
一. 概述 在sql server 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...
- SQL Server 执行计划的理解
要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的. ...
- SQL SERVER数据库 三种 恢复模式
SQL SERVER 2005 以后三种恢复模式: 简单(Sample),完全(Full),大批量(Bulk_Logged) 完全备份模型 完全备份模式是指在出现数据文件毁坏时丢失数据的风险最小.如果 ...
- SQL Server关于AlwaysOn的理解
(一)SQL Server-AlwaysOn 技术:SQL Server AlwaysOn 即“全面的高可用性和灾难恢复解决方案” 1.数据库级可用性-只读副本:SQL Server 2012-4个, ...
随机推荐
- Charles 4.6 小茶杯 网络抓包工具
下载官网: https://www.charlesproxy.com/download 破解网站: Charles破解工具 (zzzmode.com)
- PyCharm设置背景主题
PyCharm修改主题的路径: File->Settings->Appearance &Behavior->Appearance 1. Intellij:白色 2. Dar ...
- RTX显卡 运行TensorFlow=1.14.0 代码 报错 Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
硬件环境: RTX2070super 显卡 软件环境: Ubuntu18.04.5 Tensorflow = 1.14.0 -------------------------------------- ...
- opencv-python报错:fatal error: jpeglib.h: No such file or directory
参考: https://blog.csdn.net/yang_xuexi/article/details/123303777 https://blog.csdn.net/u010835747/arti ...
- vscode下如何把缩进为2个空格的python项目改为4个空格的缩进
最近在看老项目的代码,是python2.7年代的项目,那个时候很多的python项目都是使用2个空格,不过现在估计大多数人写python项目都是使用4个空格的了,而我看这两个空格的项目代码也是感觉十分 ...
- ElementUI.Dialog.props怎么设置全局变量
在main.js中为啥?这个可以 ElementUI.Dialog.props.closeOnClickModal.default = false // 全局关闭点遮罩关闭弹框 为啥这个不可以? El ...
- 1. 从0开始学ARM-安装Keil MDK uVision集成开发环境
关于ARM的一些基本概念,大家可以参考我之前的文章: <到底什么是Cortex.ARMv8.arm架构.ARM指令集.soc?一文帮你梳理基础概念[科普]> 0. 如何学习arm? ARM ...
- ai识图测试
var code = "9392b629-0d84-43ef-9b0f-34740fb024a6"
- WinForm UI 库
WinForm UI库 HZH_Controls HZHControls是基于.Net Framework4.0原生控件开发完全开源的一套控件,你不需要担心有其他控件或版权问题.提供完整的示例代码,方 ...
- 阿里云 CLI 使用
安装 macOS: brew install aliyun-cli Linux: wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-a ...