从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模式的主要区别

  1. 模式与用户的关系

SQL Server: SQL Server中的模式独立于用户,用户可以跨多个模式拥有或访问对象。模式是命名空间,主要用于逻辑组织和权限控制。

PostgreSQL: PostgreSQL同样解耦了模式与用户的关系,多个用户可以拥有同一模式中的对象。比SQL Server更加灵活,允许更模块化的数据库设计。

  1. 模式的创建与管理

SQL Server: 在SQL Server中,模式通常是在数据库创建时自动生成(如dbo),管理员可以显式创建新的模式,并分配给不同的对象。

PostgreSQL: 在PostgreSQL中,模式可以通过CREATE SCHEMA命令创建,并允许根据需要在单一数据库中创建多个模式,为对象分组提供灵活性。

  1. 对象组织方式

SQL Server: SQL Server中,模式用于组织相关对象(如表、视图、存储过程等),这使得管理权限和逻辑分组变得更加简单。模式可以根据业务需求进行自定义命名。

PostgreSQL: PostgreSQL中的模式也是用于组织数据库对象的逻辑分组。

  1. 访问控制

SQL Server: SQL Server的访问控制通过角色和模式实现。用户可以被授予访问特定模式或数据库对象的权限。

PostgreSQL: PostgreSQL的访问控制也很灵活,支持在模式级别和对象级别进行权限管理。用户可以通过角色拥有跨模式的对象访问权限。

实际操作

  1. 利用搜索路径

PostgreSQL的搜索路径功能允许简化查询,避免重复指定模式名称。通过正确配置搜索路径,您可以提高工作效率。

  1. 使用角色进行权限管理

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/

 

本文版权归作者所有,未经作者同意不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round)

致敬传奇调题王 HDK A.Meaning Mean给定一个序列 \(a\),每次选择 \(i,j\ (i\neq j)\),使得其缩成一个值为 \(\lfloor\frac{a_i+a_j}{2}\rfloor\) 的数,直至剩余一个数,求最终答案的最大值一开始想的是最小化 \(\lfloor\frac{a_i+a_j}{2}\rfloor\) 的损失,后来发现这点损失…

读数据工程之道:设计和构建健壮的数据系统02数据工程师

数据工程师1. 背景和技能 1.1. 数据工程是一个快速发展的领域,关于如何成为一名数据工程师仍然存在很多问题 1.2. 进入数据工程领域的人在教育、职业和技能方面有着不同的背景1.2.1. 每个进入该领域的人都应该投入大量的时间进行自学1.3. 从一个邻近的领域转到数据工程是最容易…

销售秘籍:故事+观点+结论

在销售的浩瀚宇宙中,隐藏着一个不朽的秘诀——利用人类共有的“错失恐惧”,激发客户内心的渴望与行动。正如村上春树所言,每个故事都深深植根于灵魂,而大仲马则揭示,灵魂之眼所见,比肉眼更为长久铭记。 错失恐惧:销售心理学的隐形推手 作为社会性生物,我们天生害怕错过…

面相快速入门教程5水性

5 水性 在本章中,我将介绍水元素的基本知识,并让你学会如何识别水元素。首先,我们来快速参考一下水元素的特征:能量:黑暗、静止、漂浮、安静、夜晚、冬天、死亡、出生前 特质:睿智、勇敢、恐惧、顽强、果断、任性、独立、坚强、忧郁、固执、神秘、反思、多梦、艺术、神秘…

修改PE入口点方式注入自己编写的DLL——《英雄无敌》1代小回城术修改成大回城术

《英雄无敌》每代都有回城术,而第一代的回城术则是所谓的“小回城术”,就是到达的城堡不能选择。到了《英雄无敌》2代和3代,都有大小回城术了,而大回城术可以使英雄回到己方的任意一座没有自己的英雄所在的城堡,有了这样的魔法,使得英雄能兼顾整个地图,是每个玩家都是首…

Architecture 1001: x86-64 Assembly 汇编

编程语言心法参考:http://www.yinwang.org/blog-cn/2017/07/06/master-pl 英语阅读速成:http://www.yinwang.org/blog-cn/2018/11/23/grammar 前置条件 必须熟悉 C 编程。 https://www.learn-c.org/ https://www.edx.org/certificates/professional-certificate/dartmouth-im…

《机器学习》 学习记录 - 第二章

好多看不懂的高数内容。。。 第2章 模型评估与选择 2.1 经验误差与过拟合错误率(error rate):分类错误的样本数占样本总数的比例。 若在m个样本中有a个样本分类错误,则错误率\(E=a/m\); 而常说的 精度 则等于\(1-a/m\),即 “精度=1-错误率” ,常写为百分比形式。训练误差(…

git push代码失败,鉴权失败

github 无法push 代码 1、确保设置了用户名和邮箱 git config --global user.name "mars" git config --global user.email "mars3603@163.com" 2、修改 .git/config 中的URL,将https的方式修改为 ssh https方式:url = https://github.com/Mars3603/grpc…

织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE

1.算法运行效果图预览 (完整程序运行后无水印)SIFT: surf:kaze: 2.算法运行软件版本 MATLAB2022a3.部分核心程序 (完整版代码包含注释和操作步骤视频)img1 = imread(Images\F1.jpg); img2 = imread(Images\F2.jpg); figure; subplot(121); imshow(img1); title(原始图片1)…

06.OpenFeign接口调用

1.提问 1.1 已经有RestTemplate + LoadBalancer的方式进行服务的调用,为什么还要有OpenFeign? 因为OpenFeign的功能更强大,和使用更便携。 1.2 使用那个? 推荐使用OpenFeign 2.OpenFeign是什么 2.1 官网翻译 https://docs.spring.io/spring-cloud-openfeign/reference/spri…

Hadoop单机模式

1.安装JDK 1.1 下载解压 tar zxf jdk-8u151-linux-x64.tar.gz -C /usr/local/src mv jdk-8u151-linux-x64 java1.2 添加环境变量 export JAVA_HOME=/usr/local/src/java export PATH=$PATH:$JAVA_HOME/binsource /etc/prifile java -version2.安装Hadoop 1.1 下载解压 tar zxf …

mysql读写分离的最佳实践

一. 传统的读写分离方式 在 MySQL 中实现读写分离可以通过以下几种方式来达到目的: 1. 主从复制 使用主从复制(Master-Slave Replication)是实现读写分离的常见方式。主库:处理所有的写入操作(INSERT、UPDATE、DELETE)。 从库:负责处理读操作(SELECT)。步骤:设置主从…