概述
如果你要使用的 关系型数据库管理系统 (RDBMS) 最适合你的数据,那么你可以选择很多。PostgreSQL 是世界上最受欢迎和最受认可的开源关系型数据库之一。
本文将介绍许多开发人员选择 PostgreSQL 来满足其数据管理需求的一些主要原因。这些原因包括功能可用性和标准合规性,以及社区支持和项目治理。
强大的功能集
选择使用 PostgreSQL 的主要原因之一是它拥有大量的功能。PostgreSQL 拥有大量与性能、安全、编程扩展和配置等相关的功能。
PostgreSQL 提供的一些功能包括
- 支持使用以下语言编写数据库函数:
- 支持大量的 数据类型,包括
- 常见的数据库基本类型,如数字、字符串、布尔值和日期时间类型:这些类型存在于大多数数据库中,并在 PostgreSQL 中得到了很好的支持。
- 网络地址:PostgreSQL 支持各种与网络相关的类型,例如 CIDR 地址、带子网掩码的地址和 MAC 地址,包括 IPv4 和 IPv6。
- 几何类型:提供各种类型来帮助你定义二维对象。这些类型包括点、线和线段,以及完整的形状,如方框、多边形和圆形。
- 货币类型:PostgreSQL 的
money
类型以固定的分数精度存储货币。该类型是区域感知的,并包括自动输出格式化。 - 范围:范围允许你在本地使用值的范围,例如,用于计划的日期和时间范围。
- JSONB:PostgreSQL 对存储和操作 JSON 对象的本机支持可以帮助你在同一个系统中使用关系型数据和非关系型数据。
- hstore:
hstore
类型允许你使用键值对本地工作。 - 多维数组:数组非常适合存储多部分值,这些值在特定上下文之外没有太多意义。
- 能够定义 你自己的复杂类型:定义你自己的类型可以帮助你将数据库更紧密地与应用程序中数据的表示方式对齐。
- 全文搜索:全文搜索为你提供强大的技术来查找和操作半结构化和非结构化文本中的数据。可以微调搜索以匹配你对相关性和匹配的期望。
- 健壮的 身份验证、访问控制 和 权限管理 系统适用于任何规模的组织:PostgreSQL 拥有成熟的用户身份验证和授权功能,可以定义哪些用户可以使用该系统,以及每个用户被允许查看或执行的操作。
- 外部数据包装器:外部数据包装器使得表示和访问远程服务器上的表和数据成为可能。
- 视图 和 物化视图:对视图和物化视图的支持允许通过抽象原始表结构来方便、简化地访问数据,以获取经常一起查询的信息。
- 数据库对象上的注释:能够在表、数据库、列和其他单个数据库对象上附加注释,可以让你记录决策或实施细节。
- 预写式日志 提供 时间点恢复、故障转移 和 流式复制:这些技术有助于确保即使软件崩溃,你的数据库也能保持一致,并且可以帮助你在系统之间复制数据以进行扩展和备份数据。
- 支持 NoSQL 类似的行为,例如使用 JSONB 存储 使用 hstore 的键值对 文档:能够在一个系统内使用多种数据库范式可以帮助你最小化管理开销,并提高不同表示之间 的兼容性。
你可以通过以下资源了解更多关于 PostgreSQL 支持的功能:
面向对象的数据库功能
PostgreSQL 与大多数其他关系型数据库最根本的不同之处在于其核心设计。
大多数关系型数据库最好被描述为关系型数据库管理系统 (RDBMSs)。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 是计算机科学中的一个首字母缩略词,代表原子性、一致性、隔离性和持久性。它们代表了数据库事务必须支持的关键保证,以避免有效性错误并维护数据完整性。
ACID 一致性是关系型数据库的首要关注点,因为它代表了存储和修改高度结构化数据的典型期望。非关系型数据库通常试图符合他们自己的标准,通常由竞争对手的BASE 首字母缩略词代表,该缩略词代表基本可用性、软状态和最终一致性。
虽然几乎所有关系型数据库都希望提供 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 是一种出色的选择,它足够通用以适合许多用例。
您可以使用Prisma Client 从您的 JavaScript 或 TypeScript 应用程序中管理 PostgreSQL 数据库。了解如何将 Prisma 添加到现有项目 或如何从头开始使用 Prisma。
常见问题解答
PostgreSQL 是一个开源数据库。它是一个对象关系型数据库,已经开发了 30 多年。
您可以在我们的了解 PostgreSQL 功能 中更深入地了解 PostgreSQL。
PostgreSQL 的功能矩阵 是由 PostgreSQL 维护的表格,概述了其所有功能以及这些功能是在哪个版本中添加的。
您可以通过单击每个功能来访问每个功能的详细信息,并被引导到相应的 PostgreSQL 文档。
您可以在 PostgreSQL 的功能矩阵 中找到其功能列表。
PostgreSQL 是免费使用的,并在 OSI 批准的PostgreSQL 许可证 下发布。
即使使用商业软件产品,也不需要付费。
PostgreSQL 是一个对象关系型数据库,不是 NoSQL 数据库。但是,他们添加了一些 NoSQL 类型功能,例如JSON 类型。