为什么翻译这篇文章,因为本人对于这两种数据库是在熟悉不过了,一个是有10多年的经验,一个也有5-6年的经验,而且这两种数据库在很多部分很相似,所以翻译了此篇。另外前两天有一个同学告知,他们单位SQL SERVER 被替换成 MYSQL ,OMG 这篇文字更的写,明明有 SQL SERVER 表兄弟 POSTGRESQL ,非要找 SQL SERVER 他二舅大伯三姨的儿媳妇 MYSQL 做替换的数据库,做这样决定的人,应该被开除。
问题的部分保留英文,为了部分同学,问题我做了简单注释
——————————————————————————————
正文
PostgreSQL 和 SQL Server(或 MSSQL)是两个广泛使用的关系型数据库。尽管它们共享一些核心特征,但它们之间存在某些差异。在本文中,我们提供详细的 PostgreSQL 和 SQL Server 之间相似和不同的概述。其中最重要的区别之一是,PostgreSQL 是开源的,而 SQL Server 是由 Microsoft 拥有和许可的。此外,您将了解两个系统在许可证和成本、易用性、SQL 语法和兼容性、数据类型、可用功能、一对一的比较。它将特别对那些正在考虑从商业数据库转换到开源数据库的组织有用,但需要更多有关这两个系统的可能权衡和优势的信息。然而,它适用于任何对关系型数据库感兴趣的人。我们得出的结论是,SQL Server 历来受到依赖其他 Microsoft 产品的组织的欢迎,但 PostgreSQL 之所以崛起于行业之巅,不仅是因为开源的优势,而且因为其强大的功能和活跃的用户社区。
What is the difference between PostgreSQL and SQL Server licensing? Comparison of PostgreSQL vs. MSSQL Server licensing model
中文:两种数据库的licensing问题比较
PostgreSQL是一个开源数据库,采用了PostgreSQL License,是一个开源计划的认可许可。使用PostgreSQL进行任何目的,包括商业目的,都是免费的。在PostgreSQL全球开发小组的监督下,PostgreSQL永久以免费和开源软件的形式提供。
Microsoft SQL Server可以通过商业许可证获得,可以按每个核心模型或服务器和客户端访问级别(CAL)模型获得许可。MSSQL提供两个主要版本,企业版和标准版,以满足组织和个人的性能和价格要求。许可证成本从标准版的3586美元到企业版的13748美元(用于两个核心)不等。对于服务器和CAL模型,服务器价格为899美元,每个用户的价格为209美元。学生和开发人员可获得免费版本用于构建和测试。
What are the release update differences between PostgreSQL and SQL Server? Compare the release updates of PostgreSQL and MSSQL
中文:两种数据库的历史
PostgreSQL于1986年在加州大学伯克利分校创建,1989年首次发布。自那时以来,它经历了多次重大更新,在开源许可证下仍保持着定期发布。Postgres的当前版本是版本13,于2019年10月发布,此后会定期发布小版本。以前的主要版本在其初始发布后支持五年。 SQL Server
SQL Server是由Microsoft开发并于1989年首次发布,新版本会定期发布。当前版本Microsoft SQL Server 2019于2019年11月发布。自SQL Server 2012起,以前的版本将继续获得支持。近期版本的扩展支持为10年,并提供高保价付费扩展,可达16年。
Which of PostgreSQL or SQL Server is easier to use? Compare the ease of use of PostgreSQL vs. MSSQL
中文:那个数据库更方便使用
PostgreSQL 是一种先进的面向对象的关系型数据库管理系统,使用了结构化查询语言 (SQL) 以及其自己的过程语言 PL/pgSQL。PostgreSQL 易于使用,具有完整的关系型数据库管理系统(RDBMS)的数据处理功能和能力。它可以轻松安装在 Linux 环境中。
SQL Server 是由 Microsoft 开发和运营的关系型数据库管理系统 (RDBMS),使用了一种名为 T-SQL(Transact-SQL)的结构化查询语言 (SQL) 变种。它可以在具有 Kubernetes 支持的 Linux 操作系统上运行,也可以在 Windows 系统上运行。用户描述它易于使用和可靠,具有强大的 .NET 兼容性。
What are the syntax differences between PostgreSQL and SQL Server? Compare PostgreSQL vs. MSSQL Server Syntax
中文:数据库SQL的一些前缀的比较
What are the data type differences between PostgreSQL and SQL Server? Compare data types in PostgreSQL vs. MSSQL
中文:两种数据库的数据类型的比较
What are the geographic data differences between PostgreSQL and SQL Server? Compare geographic data in PostgreSQL vs. MSSQL PostgreSQL
中文:两种数据库对于地理数据支持
PostgreSQL没有本地支持地理数据类型的数据。开源资源PostGIS提供了对地理对象的支持。
SQL Server
SQL Server具有地理数据类型,可用于存储地理空间数据。
What are the case sensitivity differences between PostgreSQL and SQL Server? Compare index types in PostgreSQL vs. MSSQL
中文:大小写敏感问题比较
PostgreSQL区分大小写来进行字符串比较。LOWER()函数允许用户将字符串转换为全小写以进行比较(还有类似的UPPER()函数)。默认情况下,PostgreSQL将表名和列名转换为小写,除非这些名称放在引号中。citext模块为比较值提供了一个不区分大小写的字符串数据类型citext。
SQL Server在默认情况下不区分大小写。可以通过调整SQL Server的排序设置来更改大小写敏感性。大小写敏感性的排序设置可以在数据库或列级别设置。
What are the index type differences between PostgreSQL and SQL Server? Compare index types in PostgreSQL vs. MSSQL
中文:两种数据库的索引类型比较
PostgreSQL提供多个索引类型选项,包括B-tree、hash、广义搜索树(GiST)、空间划分GiST、广义反向索引(GIN)和区块范围索引(BRIN)。此外,它还支持表达式索引(使用表达式或函数而不是列值创建的索引)和局部索引(表的一部分的索引)。
SQL Server提供聚集索引和非聚集索引。聚集索引根据键值(索引定义中的列)对表或视图中的数据行进行排序。一个表只能有一个聚集索引。非聚集索引存储在表数据之外,每个键值条目都有一个指向数据的指针。当在表列上定义PRIMARY KEY和UNIQUE约束时,MSSQL会自动创建这些索引。UNIQUE约束创建非聚集索引,而PRIMARY KEY则会创建聚集索引,除非已经存在一个。
What are the replication differences between PostgreSQL and SQL Server? Compare replication in PostgreSQL vs. MSSQL
中文:两种数据库的复制功能比较
遵循发布和订阅模型。这种复制方法称为逻辑复制,因为更改基于数据的复制标识符(例如,主键)而不是其物理位置。物理复制处理文件和目录,不考虑这些物理位置中的内容。PostgreSQL本地不提供多主复制,但一些第三方工具提供多主复制解决方案。 SQL Server
SQL Server的复制功能将数据从发布服务器复制到订阅服务器,提供三种复制类型:
事务复制,用于服务器之间的环境,当更改发生时,从发布服务器将更改传送到订阅服务器; 合并复制,用于服务器到客户端的环境或可能发生冲突情况下,数据可以在发布服务器或订阅服务器上更改并跟踪,之后进行同步; 快照复制,用于数据更新不频繁或不需要以增量方式更改的情况,将数据完全复制,就像它在特定时刻一样。
SQL Server中的复制可以是同步提交或异步提交。企业版提供了对等复制,作为多主复制的替代解决方案。
What are the differences in clustering between PostgreSQL and SQL Server? Compare clustering in PostgreSQL vs. MSSQL
中文:服务器实例的比较
PostgreSQL
PostgreSQL允许服务器集群,但不支持本地多主或主-主的集群。例如repmgr等工具可以轻松维护PostgreSQL集群。
SQL Server
SQL Server提供了Windows Server故障转移集群,可配置为主-备和主-主节点。标准版仅支持两个节点的群集; 需要升级到企业版才能添加更多节点。
What are the differences in high availability between PostgreSQL and SQL Server? Compare the high availability in PostgreSQL vs MSSQL
中文:两种数据库高可用的比较
PostgreSQL提供多种解决方案以确保用户的高可用性,包括共享磁盘故障转移、预写日志传输、数据分区和多个复制方法。像EDB Postgres Failover Manager这样的工具通过监测和识别数据库故障来提供自动故障转移,以确保高可用性。
SQL Server的各种版本包括多种高可用性工具,包括复制、日志传输和故障转移集群。其Enterprise版本提供的Always On可用性组在满足特定条件时提供自动故障转移。
What are the “views” differences between PostgreSQL and SQL Server? Compare the “views” in PostgreSQL vs. MSSQL
中文:两种数据库视图比较
PostgreSQL支持视图-即虚拟表格,它们本身不存储数据。可更新的视图受支持,但是除非满足以下条件,否则更新不会自动发生:该视图的查询必须在FROM子句中具有精确的一个部分,这可以是表或另一个可更新的视图。选择列表必须不包含任何窗口函数、聚合函数或任何返回集的函数。该查询不能在顶层包含以下任一子句:HAVING、LIMIT、DISTINCT、WITH、INTERSECT、EXCEPT、OFFSET和LIMIT。使用简单查询创建的视图可以进行更新,使用复杂查询创建的视图则不可以,但是可以使用规则更新复杂视图。还支持材料化视图;可以使用REFRESH MATERIALIZED VIEW语句更新材料化视图中的数据。
SQL Server
SQL Server视图可以用于安全目的,以限制用户对数据的访问。支持用户定义的视图和系统定义的视图。可以使用触发器自动更新视图。当直接引用基础表的一列所做的修改时,视图中的数据可以进行更新。SQL Server中称为索引视图的材料化视图,与其他关系数据库中的材料化视图不同,索引视图已更新到底层数据并因此自动更新。
What are the trigger differences between PostgreSQL and SQL Server? Compare the triggers in PostgreSQL vs. MSSQL
中文:两个数据库的trigger比较
PostgreSQL具有高级触发器。支持的触发事件为AFTER、BEFORE和INSTEAD OF,并可用于INSERT、UPDATE和DELETE事件。函数可用于在触发器被调用时执行复杂的SQL。PostgreSQL可以动态执行这些函数。
SQL Server提供针对不同类型的数据库事件的触发器:
DML触发器:用于数据操作语言(DML)特定事件,例如插入、更新或删除记录。这些触发器无论受影响的行数如何,都会在事件上触发。 DDL触发器:用于数据定义语言(DDL)事件,例如CREATE、DROP或ALTER语句。这些触发器对于防止或审计对数据库架构的更改非常有用。登录触发器:用于登录事件,例如当用户会话建立时。这些触发器在成功身份验证后、建立用户会话之前触发。它们对于审计和控制登录活动非常有用。
What are the stored procedures differences between PostgreSQL and SQL Server? Compare the stored procedures in PostgreSQL vs. MSSQL
中文:两个数据库的存储过程比较
PostgreSQL支持存储过程作为带有RETURN VOID子句的用户定义函数。除了标准SQL语法之外,存储过程还支持多种语言。
SQL Server支持存储过程,适用于受Microsoft .NET框架支持的语言(公共运行时语言或CLR),例如VB、C#或Python。
What are the query differences between PostgreSQL and SQL Server? Compare the query in PostgreSQL vs. MSSQL
中文:两种数据库的查询语句区别
PostgreSQL
PostgreSQL提供PL/pgSQL过程式编程语言。除标准SQL外,PostgreSQL还提供高级类型和用户定义类型、扩展和自定义模块、JSON支持以及触发器和其他功能的附加选项等额外功能。
SQL Server
SQL Server使用T-SQL,其查询语法类似于标准SQL。T-SQL还包括对字符串和数据处理、局部变量以及过程式编程的附加支持。
What are the full-text search differences between PostgreSQL and SQL Server? Compare full-text search in PostgreSQL vs. MSSQL
中文:两种数据库的全文搜索比较
PostgreSQL提供高级的全文搜索功能。它使用全文索引和词典来实现更快的搜索。预处理的文本文档以tsvector数据类型存储,而处理过的查询则以tsquery类型存储。预处理将文本文档解析为称为词元的语言单位,这使您可以查找单词的大小写无关变体。
SQL Server可选地提供全文搜索组件。查询是针对全文索引运行的,搜索可以基于特定的语言规则进行。搜索是在列或文本数据类型(包括char,varchar,nchar,nvarchar,text,ntext,image,xml或varbinary(max)和FILESTREAM)上执行的,使用T-SQL命令CONTAINS来匹配单词和短语,使用FREETEXT来匹配含义。可以使用同义词词库文件来帮助查找搜索词的同义词。SQL Server中的全文搜索不区分大小写。
What are the regular expression differences between PostgreSQL and SQL Server? Compare regular expressions in PostgreSQL vs. MSSQL
中文:两种数据库SQL 语句体系的不同
PostgreSQL提供PL/pgSQL过程式编程语言。除标准SQL外,PostgreSQL还提供高级类型和用户定义类型、扩展和自定义模块、JSON支持以及触发器和其他功能的附加选项等额外功能。
SQL Server使用T-SQL,其查询语法类似于标准SQL。T-SQL还包括对字符串和数据处理、局部变量以及过程式编程的附加支持。
What are the full-text search differences between PostgreSQL and SQL Server? Compare full-text search in PostgreSQL vs. MSSQL
中文:两种数据库的全文索引比较
PostgreSQL支持的高级参数化查询特性是通过使用预处理语句来实现的,这允许查询重用计划和参数,从而提高性能和安全性。预处理查询可以带有参数,这些参数可以保护查询免受SQL注入攻击。
SQL Server也支持参数化查询,它使用sp_executesql存储过程来执行参数化查询。此外,它还支持在创建查询中动态设置查询参数。这样可以避免SQL注入攻击。参数化查询可以优化数据库性能并且更安全。
What are the regular expression differences between PostgreSQL and SQL Server? Compare regular expressions in PostgreSQL vs. MSSQL
中文:模糊查询两种数据库的比较
PostgreSQL提供三种正则表达式评估方法:LIKE、SIMILAR TO和POSIX正则表达式。
SQL Server本身不支持正则表达式评估;可以使用T-SQL函数LIKE、SUBSTRING和PATINDEX来实现类似但有限的结果。
What are the partitioning differences between PostgreSQL and SQL Server? Compare the partitioning in PostgreSQL vs. MSSQL
中文:分区在两种数据库的不同
PostgreSQL
PostgreSQL内置支持范围、列表和哈希分区。范围分区将表分组为由分区键列或一组列定义的范围,例如按日期范围。列表分区将表按显式列出的预定义键值分组,每个分区中都出现这些键值。
SQL Server
SQL Server支持表和索引分区。数据在水平方向上被分区,并将一组行映射到单个分区。单个索引或表的所有分区必须驻留在同一个数据库中,并且表或索引被视为查询和更新的单个实体。
What are the table scalability differences between PostgreSQL and SQL Server? Compare the table scalability in PostgreSQL vs. MSSQL
中文:两种数据表扩展的比较
PostgreSQL提供多种索引和两种分区选项,以提高可扩展表的数据操作和查询性能。表分区和索引可以放置在不同的磁盘文件系统上的不同表空间中,这可以极大地提高表的可扩展性。PostgreSQL不支持水平表分区,但是提供了多种商业开发产品可以实现此功能。
SQL Server包含对内存中优化表的磁盘存储的扩展性增强。当前版本提供了多个并发线程以保存内存中优化的表,多线程恢复和合并操作,以及动态管理视图。在SQL Server中,可以通过分片轻松实现扩展性。
What are the compliance differences between PostgreSQL and SQL Server? Compare the compliance in PostgreSQL vs. MSSQL
中文:
PostgreSQL是一种支持对象关系型数据库管理系统(ORDBMS),其设计注重可扩展性和符合标准。它是符合ACID标准的。
SQL Server是一种关系型数据库管理系统(RDBMS),其注重安全性和性能。它也符合ACID标准。
What are the column differences between PostgreSQL and SQL Server? Compare the columns in PostgreSQL vs. MSSQL
中文:两种数据库列不同的地方与自增
PostgreSQL在版本10中引入了一个名为GENERATED AS IDENTITY的新约束功能。这是SERIAL列的符合SQL标准的变体,允许您自动分配唯一值给一个标识列。
要使SERIAL列具有唯一约束或成为主键,它现在必须像其他数据类型一样指定。唯一标识符列是使用数据类型smallserial、serial和bigserial创建的,类似于其他数据库中的自动递增功能。
SQL Server的identity列属性为表创建一个标识列,用于生成行的关键值。创建时指定两个值:seed(第一行的初始值)和increment(增加值相对于上一行)。默认情况下,seed和增量值都是1. 每个表只能包含一个identity列。除非强制执行PRIMARY KEY或UNIQUE约束,否则不能保证值的唯一性。
What are the computed column differences between PostgreSQL and SQL Server? Compare the computed column differences in PostgreSQL vs. MSSQL
中文:两种数据库在列自主计算上面的不同
PostgreSQL将计算列称为生成列(generated columns)。此功能是在版本12中引入的。当生成列被标记为STORED时,它们可以被物理存储;否则,它们不会被存储,被称为虚拟列(virtual)。
生成列不能具有标识定义,也不能成为分区键的一部分;它们只能引用当前行,不能使用子查询。无法使用INSERT或UPDATE指定值,但可以使用DEFAULT关键字。
SQL Server中的计算列如果未标记为PERSISTED属性,则不会在表中物理存储;只有在值是确定的(或始终返回相同的结果)时,列才能被持久化。
如果计算列是确定性的并且是可接受的数据类型,则可以将其用作PRIMARY KEY或索引,但不能将其用作DEFAULT或FOREIGN KEY约束。无法使用INSERT或UPDATE指定值。
What are the differences of integers between PostgreSQL and SQL Server? Compare the integers in PostgreSQL vs. MSSQL
中文:整形的不同
PostgreSQL有三种整数类型:
- SMALLINT(小整数),占用2个字节,范围为-32,768到32,767。
- INT(整数),占用4个字节,范围为-2,147,483,648到2,147,483,647。
- BIGINT(大整数),占用8个字节,范围为-9223372036854775808到9223372036854775807。
SQL Server支持标准SQL整数数据类型:BIGINT、INT、SMALLINT和TINYINT,它们每个类型的范围和存储大小如下:
What are the NoSQL capability differences between PostgreSQL and SQL Server? Compare the NoSQL capabilities in PostgreSQL vs. MSSQL
中文:NOSQL 在两种数据库上面的支持
PostgreSQL像其他许多关系型数据库一样,已经添加了对JSON数据的支持,这是半结构化数据在NoSQL系统中的最常见格式。但是,因为SQL是与PostgreSQL数据库交互的唯一方式,所以它不应该被视为NoSQL。
SQL Server具有本机的JSON函数,使您能够使用标准SQL语言解析JSON文档。您可以在SQL Server中存储JSON文档并查询该JSON数据,就像在NoSQL数据库中一样。然而,因为SQL Server是一种SQL数据库,所以不应将其视为NoSQL。
What are the security differences between PostgreSQL and SQL server? Compare the security in PostgreSQL vs. MSSQL
中文:两种数据库安全方面的差异
PostgreSQL支持SSL(安全套接字层)连接以加密客户端-服务器通信。您可以通过在postgresql.conf文件中设置ssl参数来启用SSL。
SQL Server提供一系列功能和功能来预防安全威胁,因为每个应用程序在其安全需求上都是独特的。SQL Server安全框架通过身份验证和授权来管理对可安全实体的访问。SQL Server支持加密选项的层次结构,并支持用于加密网络流量的TLS(传输层安全协议)。
What are the performance differences between PostgreSQL and SQL server? Compare the performance of PostgreSQL vs. MSSQL
中文:两种数据库在性能上的差异
PostgreSQL提供在各种数据集大小上的速度和性能,并且通常在在线事务处理(OLTP)和在线分析处理(OLAP)速度方面胜过其他数据库。它提供了多版本并发控制(MVCC),允许同时处理多个事务,比SQL Server死锁更少。PostgreSQL提供了许多工具和参数,可以让用户监视和优化数据库性能。
SQL Server以其分析和事务处理速度而自豪。但是,由于SQL Server用户协议禁止未经Microsoft事先书面批准的基准测试发布,因此与其他数据库系统的直接对比很少见。SQL Server突出的性能和速度优化功能之一是其In-Memory OLTP,它利用内存中的数据表,性能比直接写入磁盘的方式要好。SQL Server标准版在内存、分区、索引和其他需要升级到企业版才能使用的功能方面存在一些性能限制。
What are the concurrency differences between PostgreSQL and SQL Server? Compare concurrency in PostgreSQL vs. MSSQL
中文:两种数据库在MVCC 数据一致性上的不同
PostgreSQL具有成熟的多版本并发控制(MVCC)系统来处理同时进行的多个过程。MVCC提供数据库信息的快照,以避免其他数据库系统中同时进行的事务或数据锁定导致的不一致。它使用Serializable Snapshot Isolation(SSI)来确保事务的隔离性。
SQL Server的多版本并发控制系统相对不是那么完全,且默认依靠对数据的锁定来防止同时进行的事务的错误。它提供了一种乐观的并发功能,认为这种冲突很少会出现;但不是锁定行,而是检查其是否与缓存版本相匹配以检测是否发生变化。
What are the access method differences between PostgreSQL and SQL server? Compare the access methods in PostgreSQL vs. MSSQL
中文:两种数据库访问模式的不同
PostgreSQL支持用于在各种编程语言中使用SQL进行数据库操作的ORM框架,例如Hibernate,Django ORM,Sequilize和Active Record。此外,PostgreSQL还支持异步API(例如asyncpg)和事件驱动架构的库,可以将数据发送到浏览器或任何其他客户端。
SQL Server支持使用Entity Framework进行ORM操作,可以用于各种编程语言,例如C#和VB.NET。此外,它还支持Node.js,Java,PHP和Python等多种语言的连接器。SQL Server还支持异步API,包括Async CTP,ADO.NET Entity Framework和非阻塞TDS。SQL Server还有一个称为StreamInsight的框架,用于分析实时流式数据。
What are the differences about synonyms between PostgreSQL and SQL server? Compare the synonyms in PostgreSQL vs. MSSQL
SQL Server支持同义词。同义词提供抽象层,以保护客户端应用程序不受对基础对象所做的更改的影响。同义词属于一个模式,并且像模式中的其他对象一样,它的名称必须是唯一的。绑定只是根据名称进行的;如果基础对象被修改、删除或替换,那么在运行时将会发现缺失的引用。Postgresql不支持同义词。
What are the table statement differences between PostgreSQL and SQL Server? Compare the table statements in PostgreSQL vs. MSSQL
中文:两种数据库在表操作中的不同
Truncate | 在PostgreSQL中,TRUNCATE命令可以删除一组表中的所有行。与DELETE命令相比,TRUNCATE命令更快,因为不需要先扫描表,并且可以立即释放磁盘空间,而不需要进行后续的VACUUM操作。这在大型表上非常有用。例如:TRUNCATE customers; | 在SQL Server中,TRUNCATE TABLE命令删除表中的所有行或指定分区的行,类似于没有WHERE子句的DELETE语句。TRUNCATE TABLE比DELETE更快,并且使用更少的资源,因为它不记录单个行删除。TRUNCATE TABLE customers WITH (PARTITIONS (2, 4, 6 to 8)); |
Inheritance | PostgreSQL支持面向对象编程功能,包括继承的使用。创建country表的语句如下:CREATE TABLE country ( Name text, area real, population real);现在,如果要在其中创建一个名为capitals的表,并使其继承父表(即country),可以使用以下语句:CREATE TABLE capitals ( city text) INHERITS (country);当INHERITS应用于一个表时,它会继承父表的所有字段和属性,这有助于加快开发速度并提高可读性。 | SQL Server不是面向对象的数据库,不支持表继承。然而,可以通过使用DDL触发器实现类似的结果。 |
Nested | PostgreSQL没有明确支持数据嵌套,但支持任意类型的数组,其效果相当于嵌套数据。例如:CREATE TYPE BeerType AS ( name CHAR(25), kind CHAR(15), percentage NUMERIC(2, 0) );CREATE TABLE BeerDrinkers ( name CHAR(35), address AddrType, beers BeerType[]);上述示例中,BeerDrinkers表中的beers列是一个BeerType类型的数组,可以存储多个BeerType结构的数据。这种方式可以方便地存储和读取嵌套的数据结构。 | 在 SQL Server 中,当两个源表包含定义的关系且其中一个表中的项可以与另一个表中的项相关联时,可以创建嵌套表。这可以是两个表共享的唯一标识符。嵌套表对于分析数据非常有用。 |