概述
如果关系模型最能代表您的数据,那么有许多关系型数据库管理系统 (RDBMS) 可供选择。PostgreSQL 是世界上最受欢迎和备受推崇的开源关系型数据库之一。
本文将介绍许多开发者选择 PostgreSQL 来满足其数据管理需求的一些主要原因。这些原因包括功能可用性、标准合规性、社区支持和项目治理等方面。
强大的功能集
选择使用 PostgreSQL 的主要原因之一是其庞大的功能列表。PostgreSQL 拥有令人难以置信的众多功能,涉及性能、安全性、编程扩展和配置等方面。
PostgreSQL 提供的一些功能包括:
- 支持使用以下语言编写数据库函数:
- 支持多种数据类型,包括:
- 常见的数据库基本类型,如数字、字符串、布尔和日期时间类型:这些类型在大多数数据库中都有,并且在 PostgreSQL 中得到了很好的支持。
- 网络地址:PostgreSQL 支持各种网络相关类型,如CIDR地址、带子网掩码的地址,以及 IPv4 和 IPv6 的MAC 地址。
- 几何类型:提供多种类型来帮助您定义二维对象。这些包括点、线和线段,以及盒、多边形和圆形等完整形状。
- 货币类型:PostgreSQL 的
money类型以固定的分数精度存储货币。该类型支持区域设置,并包含自动输出格式化功能。 - 范围:范围允许您原生处理值范围,例如用于调度的日期和时间范围。
- JSONB:PostgreSQL 对 JSON 对象的原生存储和操作支持,可以帮助您在同一系统中处理关系型和非关系型数据。
- hstore:
hstore类型允许您原生处理键值对。 - 多维数组:数组对于存储多部分值非常有用,这些值在特定上下文之外没有太多意义。
- 定义自己的复杂类型的能力:定义自己的类型有助于您使数据库与数据在应用程序中的表示方式更紧密地对齐。
- 全文搜索:全文搜索为您提供了强大的技术,用于查找和操作半结构化和非结构化文本中的数据。搜索可以进行微调,以满足您对相关性和匹配的期望。
- 强大的身份验证、访问控制和权限管理系统,适用于任何规模的组织:PostgreSQL 拥有成熟的用户身份验证和授权功能,可以定义谁可以使用系统以及每个用户被允许查看或执行什么操作。
- 外部数据包装器:外部数据包装器使得在远程服务器中表示和访问表及数据成为可能。
- 视图和物化视图:支持视图和物化视图,通过抽象原始表结构来方便、简化地访问经常一起查询的信息。
- 数据库对象注释:在表、数据库、列和其他单个数据库对象上附加注释的能力,允许您记录决策或实现细节。
- 预写式日志 (WAL) 用于提供时间点恢复、故障转移和流复制:这些技术有助于确保即使软件崩溃,您的数据库也能保持一致,并帮助您在系统之间复制数据以进行扩展和数据备份。
- 支持类似 NoSQL 的行为,例如使用JSONB 存储文档和使用hstore 存储键值对:能够在单一系统中使用多种数据库范式,有助于最大限度地减少管理开销,并提高不同表示形式之间的兼容性。
您可以通过以下资源了解更多 PostgreSQL 支持的功能:
面向对象数据库功能
PostgreSQL 与大多数其他关系型数据库最根本的区别之一在于其核心设计。
大多数关系型数据库最好被描述为关系型数据库管理系统 (RDBMS)。RDBMS 是专门用于处理关系型数据库的软件,其中数据以具有预定义列和数据类型的表状结构存储。数据可以使用基于关系代数的技术(通常通过结构化查询语言 (SQL))进行查询、修改和检索。
另一方面,PostgreSQL 在技术上是对象关系型数据库管理系统 (ORDBMS)。这意味着它具有与 RDBMS 相同的关系能力,但额外具有一些面向对象的特性。
实际上,这意味着 PostgreSQL 允许您:
- 定义自己的复杂数据类型
- 重载函数以处理不同的参数数据类型
- 定义表之间的继承关系
这些功能是强大的工具,可以帮助您使用在编程时可能熟悉的相同技术来处理数据库和数据。增加的灵活性使您可以在数据库系统内部而不是在程序外部建模不同类型和关系。这有助于保持一致性并在更接近实际数据的地方强制执行预期行为。
有关 PostgreSQL 对象关系方法提供的更多信息,请查看以下资源:
SQL 标准符合性
PostgreSQL 在其他关系型数据库系统中的另一个突出之处在于其对 SQL 标准的遵守。
SQL 标准由 ANSI 和 ISO 组织制定,旨在定义 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 值得关注,因为它出色地实现了核心关系型功能,同时又不局限于传统 RDBMS 的边界。虽然没有哪个数据库能满足所有需求,但 PostgreSQL 是一个极佳的选择,它的多功能性足以适应许多用例。
您可以使用Prisma Client从您的 JavaScript 或 TypeScript 应用程序中管理 PostgreSQL 数据库。了解如何将 Prisma 添加到现有项目或如何从头开始使用 Prisma。
常见问题解答
PostgreSQL 是一个开源数据库。它是一个对象关系型数据库,已经开发了 30 多年。
您可以在我们的了解 PostgreSQL 功能中更深入地了解 PostgreSQL。
PostgreSQL 功能矩阵是由 PostgreSQL 维护的一个表格,概述了其所有功能以及这些功能在哪个版本中添加。
您可以通过单击每个功能来访问其详细信息,并被引导至相应的 PostgreSQL 文档。
您可以在其功能矩阵中找到 PostgreSQL 的功能列表。
PostgreSQL 是免费使用的,并根据 OSI 批准的PostgreSQL 许可证发布。
即使用于商业软件产品,也无需支付任何费用。
PostgreSQL 是一个对象关系型数据库,而不是 NoSQL 数据库。然而,他们已经添加了一些 NoSQL 类型的功能,例如JSON 类型。
