分享到

概述

如果关系模型最能代表您的数据,那么有许多关系数据库管理系统 (RDBMS) 可供选择。 PostgreSQL 是世界上最受欢迎和备受推崇的开源关系数据库之一。

本文将介绍许多开发人员选择 PostgreSQL 来满足其数据管理需求的一些主要原因。 这些原因包括功能可用性、标准合规性、社区支持和项目治理。

强大的功能集

选择使用 PostgreSQL 的主要原因之一是其庞大的功能列表。 PostgreSQL 拥有大量与性能、安全性、编程扩展和配置等相关的功能。

PostgreSQL 提供的一些功能包括

  • 支持使用以下语言编写数据库函数:
  • 支持大量的数据类型,包括
    • 常见的数据库原语,如数值、字符串、布尔和日期时间类型:这些在大多数数据库中都能找到,并且在 PostgreSQL 中得到了很好的支持。
    • 网络地址:PostgreSQL 支持各种与网络相关的类型,如 CIDR 地址、带子网掩码的地址和 MAC 地址,包括 IPv4 和 IPv6。
    • 几何类型:多种类型可帮助您定义二维对象。 这些包括点、线和线段,以及完整的形状,如框、多边形和圆形。
    • 货币类型:PostgreSQL 的 money 类型以固定的分数精度存储货币。 该类型具有区域设置意识,并包括自动输出格式化。
    • 范围:范围允许您本地处理值范围,例如,用于调度的日期和时间范围。
    • JSONB:PostgreSQL 对存储和操作 JSON 对象的原生支持可以帮助您在同一系统中处理关系数据和非关系数据。
    • hstorehstore 类型允许您本地处理键值对。
    • 多维数组:数组对于存储多部分值非常有用,这些值在其特定上下文之外没有太多意义。
  • 定义 您自己的复杂类型 的能力:定义您自己的类型有助于使您的数据库更贴近您的应用程序中数据的表示方式。
  • 全文搜索:全文搜索为您提供强大的技术,用于查找和操作半结构化和非结构化文本中的数据。 可以微调搜索以符合您对相关性和匹配的期望。
  • 强大的 身份验证访问控制权限管理 系统,适用于任何规模的组织:PostgreSQL 具有成熟的用户身份验证和授权功能,可以定义谁可以使用系统以及每个用户被允许查看或执行哪些操作。
  • 外部数据包装器:外部数据包装器使表示和访问远程服务器中的表和数据成为可能。
  • 视图物化视图:对视图和物化视图的支持允许方便、简化的数据访问,通过抽象经常一起查询的信息的原始表结构来实现。
  • 数据库对象上的注释:在表、数据库、列和其他单个数据库对象上附加注释的能力使您可以记录决策或实现细节。
  • 预写式日志 提供 时间点恢复故障转移流复制:这些技术有助于确保您的数据库即使在软件崩溃时仍保持一致,并帮助您在系统之间复制数据以进行扩展和备份数据。
  • 支持类似 NoSQL 的行为,例如使用 JSONB 存储文档 和使用 hstore 存储键值对:能够在单个系统中使用多种数据库范例可以帮助最大限度地减少您的管理开销并提高不同表示形式之间的兼容性。

您可以通过以下资源了解有关 PostgreSQL 支持的功能的更多信息

面向对象的数据库功能

PostgreSQL 与大多数其他关系数据库不同的最根本方式之一来自其核心设计。

大多数关系数据库最好被描述为关系数据库管理系统 (RDBMS)。 RDBMS 是专门设计用于处理关系数据库的软件,其中数据存储在具有预定义列和数据类型的类似表的结构中。 可以使用基于关系代数的技术(通常通过结构化查询语言 (SQL))来查询、修改和检索数据。

另一方面,PostgreSQL 在技术上是一个 对象关系数据库管理系统 (ORDBMS)。 这意味着它具有与 RDBMS 相同的关系功能,但另外还具有一些面向对象的功能。

实际上,这意味着 PostgreSQL 允许您

  • 定义您自己的复杂数据类型
  • 重载函数以处理不同的参数数据类型
  • 定义表之间的继承关系

这些功能是强大的工具,可以帮助您使用编程时可能熟悉的一些相同技术来处理数据库和数据。 增加的灵活性使您可以在数据库系统中而不是在程序外部对不同类型和关系进行建模。 这可以帮助保持一致性,并在更接近实际数据的地方强制执行预期的行为。

有关 PostgreSQL 的对象关系方法提供的更多信息,请查看以下资源

SQL 标准一致性

PostgreSQL 在其他关系数据库系统之上脱颖而出的另一个领域是其对 SQL 标准的遵守。

SQL 标准ANSIISO 组织制定,目的是定义 SQL 实现的最低功能和互操作性要求。 虽然这些机构提供的规范旨在定义 SQL 系统应提供的功能,但由于语言的复杂性和长期演变,严格遵守并非总是可行。 根据 PostgreSQL 文档,目前没有数据库满足规范概述的所有要求

考虑到这个警告,PostgreSQL 比其他选项满足更多的 SQL 规范。 根据他们自己的统计,他们至少符合 SQL:2016 提出的 179 项核心要求中的 160 项。

您可以通过以下资源了解有关 PostgreSQL 的 SQL 合规性的更多信息

ACID 合规性

ACID 是计算机科学中的一个首字母缩略词,代表原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation) 和持久性 (Durability)。 它们代表数据库事务必须支持的关键保证,以避免有效性错误并维护数据完整性。

ACID 合规性是关系数据库的主要关注点,因为它代表了存储和修改高度结构化数据的典型期望。 非关系数据库通常尝试遵守自己的标准,通常由相互竞争的 BASE 首字母缩略词表示,该首字母缩略词代表基本可用 (Basically Available)、软状态 (Soft state) 和最终一致性 (Eventual Consistency)。

虽然几乎所有关系数据库都渴望提供 ACID 合规性,但 PostgreSQL 自 2001 年以来就以其引擎中的 ACID 合规性而自豪。 由于 PostgreSQL 依赖于单个数据库引擎,这意味着所有事务默认情况下都完全符合 ACID 标准。 这些保证是在不使用数据库锁的情况下,使用 多版本并发控制 (MVCC) 实现的。 相比之下,MySQL 仅在使用其 InnoDB 或 NDB 数据库引擎时才支持完全 ACID 合规性,如果使用其他引擎,可能会导致意外的损坏。

要了解有关 ACID 和 PostgreSQL 合规性的更多信息,请查看以下资源

开源开发和社区

PostgreSQL 是一个由 PostgreSQL 全球开发组 管理的开源项目。 它使用 PostgreSQL 许可证 获得许可,该许可证是 开源促进会认可的许可证

虽然还有许多其他开源关系数据库,但 PostgreSQL 的开发和管理没有公司所有者或商业对等方。 这有助于贡献者规划自己的道路,并致力于社区最关心的功能。 PostgreSQL 的专业服务由 公司提供,这些公司经常为项目做出贡献,但不控制开发过程。

这种对社区驱动开发的关注促成了 PostgreSQL 用户的广泛参与。 大量 高质量的扩展和应用程序 可用于增强核心 PostgreSQL 软件的功能。 社区开发的软件可以帮助您管理 PostgreSQL 服务器、编译商业智能报告、管理新型数据以及从各种编程语言和平台使用 PostgreSQL。

结论

PostgreSQL 作为关系数据的强大且功能丰富的选择,赢得了良好的声誉。 PostgreSQL 重视稳定性、功能性和标准合规性,对于许多项目来说,它满足了所有正确的条件。 同样,如果您需要表示数据的灵活性,并且希望能够使用各种工具和语言,那么 PostgreSQL 也是一个不错的选择。

PostgreSQL 以其对核心关系功能的出色实现而著称,同时又不将自身限制在传统 RDBMS 的边界内。 虽然没有数据库可以满足所有需求,但 PostgreSQL 是一个出色的选择,它具有足够的多功能性,可以满足许多用例。

FAQ

PostgreSQL 是一个开源数据库。 它是一个对象关系数据库,已经开发了 30 多年。

您可以在我们的了解 PostgreSQL 功能中更熟悉 PostgreSQL。

PostgreSQL 的功能矩阵是由 PostgreSQL 维护的表格,概述了其所有功能以及这些功能添加的版本。

您可以通过单击该功能并定向到相应的 PostgreSQL 文档来访问每个功能的详细信息。

您可以在其 功能矩阵 中找到 PostgreSQL 的功能列表。

PostgreSQL 可以免费使用,并根据 OSI 批准的 PostgreSQL 许可证 发布。

即使使用商业软件产品,也无需付费。

PostgreSQL 是一个对象关系数据库,而不是 NoSQL 数据库。 但是,他们添加了一些 NoSQL 类型的功能,例如 JSON 类型

关于作者
Justin Ellingwood

Justin Ellingwood

自 2013 年以来,Justin 一直在撰写关于数据库、Linux、基础设施和开发者工具的文章。 他目前与妻子和两只兔子住在柏林。 他通常不必用第三人称写作,这对所有相关方来说都是一种解脱。