分享到

概述

如果关系模型最能代表您的数据,则有许多关系型数据库管理系统 (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 是一个出色的选择,其多功能性足以适应许多用例。

常见问题

PostgreSQL 是一个开源数据库。它是一个已开发超过 30 年的对象关系型数据库。

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

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

您可以通过点击某个功能来访问其详细信息,并跳转到相应的 PostgreSQL 文档。

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

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

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

PostgreSQL 是一个对象关系型数据库,而不是 NoSQL 数据库。然而,它增加了一些 NoSQL 类型的功能,例如 JSON 类型

关于作者
Justin Ellingwood

Justin Ellingwood

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