This is the Trace Id: a8dacb81e32c7105ec45622929ec99c7
跳转至主内容
Azure

什么是 PostgreSQL?

了解 PostgreSQL 的工作原理、它的用途,以及为什么它是新式工作负载的热门选择。

PostgreSQL 定义

PostgreSQL(通常称为“Postgres”)是一种开放源代码关系数据库系统,用于使用 SQL 存储、管理和查询结构化数据。借助强大的数据完整性、可靠性和高级功能,它已成为同时适用于小型应用程序和大型业务关键型系统的受信任选项。

  • PostgreSQL 是可靠的开放源代码关系数据库,专为需要强数据完整性、富于表现力的 SQL 查询和大规模可预测行为的应用程序而设计。 
  • 借助灵活的数据模型,团队能够随着应用程序需求的发展,将传统关系表与半结构化数据类型(如 JSONB)组合在一起。
  • PostgreSQL 提供丰富的功能集,且无专有锁定,包括高级索引编制、可靠的事务以及通过自定义函数和扩展扩展的扩展性。 
  • PostgreSQL 用例的范围涵盖 Web 应用程序、软件即服务 (SaaS) 产品、分析、报表和对准确度要求严格的操作系统。 

PostgreSQL 概述

在需要能够处理复杂数据关系的数据库、支持灵活的数据模型以及随应用程序发展保持强大的数据完整性时,开发人员和组织可以选择 PostgreSQL。 

在实践中,应用程序可连接到充当 SQL 数据库的 PostgreSQL 数据库服务器:应用程序将 SQL 查询发送到数据库引擎,该引擎将管理数据的存储、索引和返回方式,同时强制执行表之间的关系。

可以依赖的关系数据库

作为关系数据库,PostgreSQL 将数据存储在由行和列组成的表中。可以使用键将表链接在一起,这有助于确保数据一致性并防止无效的关系。例如,可以将订单表链接到客户表并强制执行规则,以便每个订单始终指向有效的客户。

这种关系模型是 PostgreSQL 用于对准确度要求严格且数据错误成本高昂的系统的主要原因。

PostgreSQL 通常用于:

  • 需要可靠后端的 Web 和移动应用程序。
  • 业务系统,如计费、库存和 CRM 样式的应用程序。
  • 基于 SQL 查询生成的报表和分析工作负载。
  • 对数据准确度和一致性要求严格的系统,包括财务和医疗保健工具。

PostgreSQL 支持的数据类型和结构

PostgreSQL 不仅支持基本的文本和数值。它还支持各种数据类型和结构,允许数据库架构密切反映实际数据和应用程序需求。

常见的 PostgreSQL 数据类型和结构包括:

  • 标准类型,例如整数、小数、文本、时间戳和布尔。
  • 适用于半结构化数据的 JSON 和 JSONB,这在数据格式随时间推移而变化时非常有用。
  • 用于在适当时将值列表存储在单个列中的数组。
  • 通用唯一标识符 (UUID),常用于公共或分布式标识符。
  • 范围类型,例如日期或数值范围。
  • 用于查询大型文本字段的内置全文搜索工具。

PostgreSQL 与其他关系数据库有何不同

PostgreSQL 常与其他关系数据库(如 MySQL、MariaDB、Microsoft SQL Server 和 Oracle Database)进行比较。尽管所有这些系统都支持 SQL,但它们在理念和设计上有所不同。

下面是一些差异:

  • 开放源代码和专注于标准:PostgreSQL 以强大的 SQL 标准支持而著称,其设计遵循关系数据库理论,同时兼顾实际应用。
  • 功能深度:当需要高级数据类型(如 JSONB)、灵活索引编制或严格事务行为时,通常会选择 PostgreSQL。
  • 可扩展性:PostgreSQL 专为扩展而设计,支持开发人员随应用程序需求的发展添加自定义函数、运算符,甚至全新的索引方法。

PostgreSQL 功能

 PostgreSQL 旨在支持复杂的数据模型、富有表现力的 SQL 查询,以及在实际工作负载下的可靠性能,为新式应用程序提供了广泛的功能集。 

高级索引选项

索引是数据库快速查找行的方式, 类似于 书籍中的索引帮助你 查找 正确页面的方式。 PostgreSQL 支持多种索引类型,每种类型都适用于不同的查询模式。例如:

  • 用于常见查找和排序的 B 树索引
  • 特定情况下用于相等性检查的哈希索引
  • 适用于 JSONB、数组、全文搜索和其他复杂数据的 GIN 和 GIST 索引
  • 适用于数据自然排序的 超大型 表的 BRIN 索引,例如时序数据

随着数据库的 增长 和性能要求的 增加 ,高级索引选项变得 越来越 重要。

复杂查询和强事务

PostgreSQL 支持高级 SQL 功能,例如联接、子查询、窗口函数、公用表表达式 (CTE) 和复杂聚合。因此,它非常适合依赖于表现力强的查询和详细报表逻辑的应用程序。

事务是另一项核心 PostgreSQL 功能。事务将多个数据库更改分组为单个全有或全无操作。如果中途出现故障, PostgreSQL 可以回滚整个事务,以保持数据一致并避免部分更新。

可扩展性和自定义函数

可扩展性是 PostgreSQL 的核心功能之一, 它 旨在适应应用程序的领域,而不是将数据强行纳入僵化的模型。

使用 PostgreSQL,可以创建:

  • 封装自定义逻辑并可直接从 SQL 调用的用户定义函数。
  • 自定义数据类型和运算符, 这在 数据库行为需要与专业化领域规则匹配时非常有用。
  • 添加新功能的扩展,例如性能增强、 其他 数据类型或 监视 工具。

并发性和性能优化

实际应用程序很少只存在单个用户。它们 通常 涉及许多用户同时读取和写入数据。

PostgreSQL 使用多版本并发控制 (MVCC) 来管理同时访问。实际应用中,这意味着读操作通常 不会阻止 写操作,写操作也 不会 像在更简单的并发模型中那样频繁地阻止读操作。这提升了混合工作负载性能的流畅性,例如在处理用户活动的同时运行报表的应用程序。

PostgreSQL 还包括用于性能优化和维护的内置工具,包括查询规划、统计信息收集、用于清理的清空以及支持高可用性的复制选项。

PostgreSQL 的优势

除了评估各种功能之外,选择数据库意味着要考虑长期信任、灵活性,以及系统是否可以随应用程序发展对它们提供良好的支持。PostgreSQL 已得到广泛采用,因为它提供的切实优势对开发人员、架构师和企业等而言都非常重要。

开放源代码优势(成本和控制)

使用 PostgreSQL,组织能够更好地控制其数据库的使用和缩放方式。实际上,这意味着:

  • 无需支付许可费即可开始使用
  • 在自己的基础结构或环境中自由运行 PostgreSQL
  • 没有与专有许可模型绑定的厂商锁定

社区支持和文档

PostgreSQL 已有数十年的积极开发历史,并受益于经验丰富的大型全球社区。其专业积淀体现在详尽的文档、邮件列表、论坛以及各种第三方指南和工具中。

借助这些资源,使用 PostgreSQL 的团队可以更轻松地解决问题、了解最佳做法,并自信地规划迁移或性能改进。

可靠性和数据完整性

当应用程序依赖于准确的数据时,可靠性是不容妥协的。PostgreSQL 以高度重视正确性和数据完整性而著称。

它支持外键、唯一约束和 check 约束等约束以及可靠的事务行为。即使应用程序遇到 bug 或多个服务同时写入数据库,这些功能也会有助于防止数据处于无效状态。

对于处理财务记录、用户帐户或运营数据的系统,这种可靠性可降低出现无提示数据损坏和错误难以诊断的风险。

适用于许多应用样式的可伸缩性和灵活性

PostgreSQL 可以支持广泛的应用程序大小和工作负载。对于小型应用程序,PostgreSQL 数据库可以在单个服务器上启动,然后扩展以包括:

  • 用于缩放读取密集型工作负载的只读副本。
  • 用于管理大型或快速增长的数据集的分区表。
  • 用于实现更高并发性的连接池和优化索引。

PostgreSQL 在数据建模方式方面也非常灵活。团队可将传统关系架构用于结构化数据,同时为频繁更改的应用程序部分(例如用户首选项或配置数据)引入 JSONB。借助这种灵活性,应用程序无需频繁重新设计架构即可发展。

PostgreSQL 用例

PostgreSQL 用于许多行业和应用程序类型,因为它既拥有强大的关系型基础,同时具备满足不断发展的数据需求的灵活性。这些 PostgreSQL 用例突出显示了数据库如何同时支持日常应用程序工作负载和更专业化的方案。 

Web 应用程序和 SaaS 产品

PostgreSQL 是用于管理用户、帐户、权限和活动数据的 Web 应用程序和 SaaS 产品的常见选择。借助其关系模型,可以轻松地强制实施数据关系、通过迁移应用架构更改,并在使用量增长时保持可预测的性能。 

对于 SaaS 团队,PostgreSQL 的事务可靠性和索引选项有助于支持核心工作流,例如注册、计费事件和审核日志记录,而不会引入不必要的复杂性。 

分析和报告

PostgreSQL 常用于报表和分析工作负载,尤其是在团队需要基于 SQL 的见解而不部署单独的分析系统时。在某些情况下,PostgreSQL 还用作结构化报表和分析的轻型数据仓库,尤其是在团队希望使用 SQL 合并运营和分析工作负载时。 

用于分析的常见 PostgreSQL 功能包括:

  • 用于运行总计、排名和基于时间的比较的窗口函数。 
  • 预计算的摘要和更快仪表板的具体化视图。 
  • 保持筛选器和联接处于响应状态的索引策略。 

虽然 PostgreSQL 并非每个专业化分析平台的替代品,但它通常只需较少的部件即可满足运营报表和商业智能的需求。 

财务和运营系统

PostgreSQL 非常适合对准确度和一致性要求严格的系统,例如财务跟踪、订单管理和运营工具。强大的事务保证和约束强制有助于确保记录即使在多个过程同时更新数据时仍然保持一致。 

借助这一点,PostgreSQL 成为需要可靠记录保留而不牺牲查询灵活性的应用程序的实用基础。 

地理空间和地图项目

当与单独安装的地理空间扩展配对时,PostgreSQL 通常用于处理基于位置的数据的应用程序。这些系统可以存储坐标、计算距离以及处理点、线条和多边形等形状。 

回答问题(例如“附近有什么?” 或“此位置属于哪个区域?”) 的应用程序通常依赖 PostgreSQL 作为空间查询的可靠后端。 

仍需要 SQL 的 JSON 密集型 API

新式 API 通常处理随时间推移而更改的半结构化数据。 PostgreSQL 通过 JSONB 支持此模式,从而支持团队存储灵活的数据结构,同时仍受益于 SQL 查询、索引编制和事务行为。 

当应用程序的某些部分(如功能标志、用户首选项或元数据)快速发展,而其他方面(如付款或权限)需要严格的关系一致性时,此方法尤其有用。 

为什么团队选择 PostgreSQL

PostgreSQL 是开放源代码数据库,专为需要可靠的数据存储、富有表现力的 SQL 查询和强数据完整性的应用程序而构建。通过结合高级功能、灵活的数据建模和基于标准的设计,它同时适用于简单的应用程序和复杂的业务关键系统。 

借助经过验证的可靠性、活跃的开放源代码社区和对各种用例的支持, PostgreSQL 为团队提供了可随应用程序需求变化而适应的可靠基础。 

常见问题解答

  • PostgreSQL 是一个开放源代码关系数据库,用于通过 SQL 存储、管理和查询结构化数据。 组织可在需要支持复杂数据关系、强数据完整性和可靠事务行为的数据库时使用 PostgreSQL。 它通常用于对数据准确度要求严格的 Web 应用程序、SaaS 产品、分析和系统。
  • SQL 是一种标准语言,用于查询和管理关系数据库中的数据。 PostgreSQL 是使用 SQL 存储、检索和管理数据的数据库系统。 简而言之,SQL 是语言,PostgreSQL 是理解和执行 SQL 查询的数据库软件。 
  • 否,PostgreSQL 不是编程语言。它是一款数据库管理系统。 虽然 PostgreSQL 支持 SQL 查询数据,并支持你使用 SQL 和其他受支持的语言编写函数,但数据库本身是存储和管理数据的软件,而不是通用编程语言。 
  • 对于熟悉关系数据库和 SQL 的任何人,通常都可以轻松上手 PostgreSQL。如果拥有 SQL 经验,则基本任务(例如创建表、编写查询和处理数据)将会非常简单。 更高级的功能(如性能优化、索引策略或自定义扩展)可能需要更多时间来学习,但借助 PostgreSQL 的文档和社区资源,可以在需求变得更加复杂时更轻松地提升技能。