从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/

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

从SQL Server过渡到PostgreSQL:理解模式的差异的更多相关文章

  1. MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解

    判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...

  2. [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server

    一.了解PPAS的迁移方式1.在线迁移和离线迁移使用Migration Studio或Migration Toolkit直接向PPAS数据库进行对象定义和数据表中数据的迁移称为在线迁移,生成要迁移对象 ...

  3. SQL Server“复杂”概念之理解

    用惯了Oracle的人,接触SQL Server中的概念时,会觉得比较难理解,甚至感觉有点“绕”,这是因为Oracle中将某些其他数据库中存在的概念给简化了,这里就拿两个最常见的概念来举例说明:1.s ...

  4. SQL Server 2000 :选择许可模式及更改

    在SQL Server企业版中,有一个许可模式概念,有两种许可模式:“处理器许可证”和“每客户”模式.“处理器许可证”模式表示允许几个CPU运行SQL Server,“每客户”决定的是客户端连接数. ...

  5. SQL Server执行计划的理解【转】

      要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看 ...

  6. sql server 备份与恢复系列五 完整模式下的备份与还原

    一.概述 前面介绍了简单恢复模式和大容量恢复模式,这篇继续写完整恢复模式下的备份与还原.在完整恢复模式里最大的优点是只要能成功备份尾日志,就可以还原到日志备份内包含的任何时点("时点恢复&q ...

  7. sql server 备份与恢复系列四 大容量模式下的备份与还原

    一. 概述 在sql server 备份与恢复系列的第一篇里,有讲到大容量模式下备份与还原的相关知识.这篇重点来演示在大容量模式下常用的备份与还原模式“完整备份+差异备份+日志备份”. 在大容量恢复模 ...

  8. SQL Server 执行计划的理解

    要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的. ...

  9. SQL SERVER数据库 三种 恢复模式

    SQL SERVER 2005 以后三种恢复模式: 简单(Sample),完全(Full),大批量(Bulk_Logged) 完全备份模型 完全备份模式是指在出现数据文件毁坏时丢失数据的风险最小.如果 ...

  10. SQL Server关于AlwaysOn的理解

    (一)SQL Server-AlwaysOn 技术:SQL Server AlwaysOn 即“全面的高可用性和灾难恢复解决方案” 1.数据库级可用性-只读副本:SQL Server 2012-4个, ...

随机推荐

  1. vscode添加python文件头模板

    pycharm可以自动生成python的文件头模板,但是vscode目前还不可以(不支持python,c的似乎有插件支持了).琢磨了一下,可以通过用户代码片段来实现. 1. 什么是用户代码片段 参考文 ...

  2. ChatGPT的作用(附示例)

    ChatGPT介绍(内容由ChatGPT生成) ChatGPT是一款基于GPT(生成式预测网络)的聊天机器人,它可以根据用户输入自动生成相应的回复. GPT是由OpenAI开发的一种预测网络模型,其中 ...

  3. 【MongoDB】Re05 分片集群(Win平台搭建)

    分片副本集1 (3实例)  主1 从1 裁1 分片副本集2 (3实例)  主1 从1 裁1 配置副本集(3实例) 主1 从2 路由(2配置) 用Windows平台搭建 配置目录设置: ├─config ...

  4. 【Mybatis】08 ResultMap、Association、分步查询、懒加载

    ResultMap自定义结果集 可以把查询返回的结果集封装成复杂的JavaBean对象 原来的ResultType属性,只能把查询到的结果集转换为简单的JavaBean 什么是简单的JavaBean对 ...

  5. 【DataBase】MySQL 05 基础查询

    MySQL数据库 05 基础查询 视频参考自:P18 - P27 https://www.bilibili.com/video/BV1xW411u7ax 配套的SQL脚本:https://shimo. ...

  6. 从.net开发做到云原生运维(七)——服务网格Istio

    1. 前言 上篇文章我们讲了dapr,dapr作为开发阶段使用的组件,需要开发人员知道怎么使用,到此篇文章之前,开发人员的开发任务已经完成了,剩下的就是一些运维相关的事情了.假设我们的服务已经开发完成 ...

  7. 一个域名可以对应多个IP吗,一个IP可以对应多个域名吗?

    本文谈两个问题:一个域名可以对应多个IP吗,一个IP可以对应多个域名吗? 问题1:一个IP可以对应多个域名吗? 因为域名都是由各个域名供应商提供的,我们可以在不同的域名供应商那里买不同的域名,然后把这 ...

  8. 最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法

    看代码过程中发现了一个很奇怪的概念,叫做"最小二乘法的矩阵正则化",这个词汇十分的陌生,虽然最小二乘法是知道的,但是用了矩阵正则化的最小二乘法是个什么东西呢? 相关代码见: 强化学 ...

  9. ReentrantLock之Condition源码解读

    1.背景 阅读该源码的前提是,已经阅读了reentrantLock的源码! 2.await源码解读 condition代码理解的核心,其实就是理解到: 线程节点如何从sync双向链表队列到指定的条件队 ...

  10. spring5的新特性

    1.背景 2.依赖环境的变化 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方 法在代码库中删除 3.自带了通用的日志封装 3.1.日志的简单使用 Spr ...