PostgreSQL 简介
概念:PostgreSQL是一个功能强大的开源对象关系数据库系统,它使用和扩展了SQL语言,并结合了许多功能,这些功能可以安全地存储和扩展最复杂的数据工作负载。PostgreSQL的起源可以追溯到1986年,它是加州大学伯克利分校的POSTGRES项目的一部分,在核心平台上已有30多年的积极开发经验。
如何理解:PostgreSQL以其可靠的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开放源代码社区致力于始终如一地提供高性能和创新解决方案而赢得了良好声誉。PostgreSQL在所有主要操作系统上运行,自2001年以来一直兼容ACID,并具有强大的附加组件,例如流行的PostGIS地理空间数据库扩展程序。PostgreSQL成为许多人和组织选择的开源关系数据库也就不足为奇了。使用PostgreSQL的入门从未如此简单-选择要构建的项目,并让PostgreSQL安全,可靠地存储数据。
特性:
- PostgreSQL可在所有主要操作系统(即Linux,UNIX(AIX,BSD,HP-UX,SGI IRIX,Mac OS X,Solaris,Tru64)和Windows等)上运行。
- PostgreSQL支持文本,图像,声音和视频,并包括用于C/C++,Java,Perl,Python,Ruby,Tcl和开放数据库连接(ODBC)的编程接口。
- PostgreSQL支持SQL的许多功能,例如复杂SQL查询,SQL子选择,外键,触发器,视图,事务,多进程并发控制(MVCC),流式复制(9.0),热备(9.0))。
- 在PostgreSQL中,表可以设置为从“父”表继承其特征。可以安装多个扩展以向PostgreSQL添加附加功能。
PostgreSQL 历史及由来
为什么需要PostgreSQL ?由来:
PostgreSQL带有许多功能,旨在帮助开发人员构建应用程序,帮助管理员保护数据完整性和构建容错环境,并帮助您管理数据(无论数据集大小)。除了免费和开源之外,PostgreSQL也是高度可扩展的。例如,您可以定义自己的数据类型,构建自定义函数,甚至可以使用不同的编程语言编写代码,而无需重新编译数据库!PostgreSQL尝试符合SQL标准,在这种标准下,该标准不会与传统功能相抵触,也可能导致糟糕的架构决策。支持SQL标准所需的许多功能,尽管有时语法或功能略有不同。随着时间的流逝,有望进一步实现一致性。从2019年10月的版本12开始,PostgreSQL符合179种SQL:2016 Core一致性强制功能中的至少160种。在撰写本文时,没有关系数据库完全符合此标准。
历史:
- PostgreSQL由计算机科学教授Michael Stonebraker在UCB创建。 它最初叫做Postgres。 1986年由Michael Stonebraker教授作为后续项目和Ingres项目启动,克服了当代数据库系统的问题。 PostgreSQL现在是任何地方都很先进的开源数据库。
- 1977 - 1985年:开发了一个名为INGRES的项目。
- 关系数据库的概念证明。
- 1980年成立Ingres公司。
- 1994年被Computer Associates购买。
- 1986-1994: POSTGRES
- 开发INGRES中的概念,重点是面向对象和查询语言Quel。
- INGRES的代码基础未被用作POSTGRES的基础。
- 商业化为Illustra(由Informix购买,之后由IBM购买)。
- 1994-1995: Postgres95
- 1994年增加了对SQL的支持。
- 1995年发布为Postgres95。
- 1996年重新发布为PostgreSQL 6.0。建立PostgreSQL全球开发团队。
PostgreSQL 版本更新说明
PostgreSQL 13 的第一个 Beta 版本发布了,此版本更新亮点包括:
功能性
- PostgreSQL 13 中有许多新功能可以帮助提高 PostgreSQL 的整体性能,同时使开发应用程序变得更加容易。
- B 树索引(PostgreSQL 的标准索引)在处理重复数据方面得到了改进。这些增强功能有助于缩小索引大小并提高查找速度,特别是对于包含重复值的索引。
- PostgreSQL 13 增加了增量排序,当从查询的早期部分排序的数据已经被排序时,它可以加速数据的排序。此外,带有 OR 子句或 IN/ANY 常量列表的查询可以使用扩展的统计信息(通过 CREATE STATISTICS 创建)。
- 在此发行版中,PostgreSQL 的分区功能增加了更多改进,包括增加了在分区表之间直接进行联接的情况,这可以缩短总体查询执行时间。分区表现在支持在行级触发器(row-level triggers)之前,并且分区表现在可以通过逻辑复制完全复制,而不必发布单个分区。
- PostgreSQL 13 为使用诸如 FETCH FIRST WITH TIES 之类的功能编写查询提供了更多便利,该功能返回与最后一行匹配的任何其他行。还为 jsonpath 查询添加了 .datetime() 函数,该函数将自动将类似日期或类似时间的字符串转换为适当的 PostgreSQL 日期/时间数据类型。
- 现在,生成随机 UUID 甚至更加容易,因为可以使用 gen_random_uuid() 函数而无需启用任何扩展。
Administration
- PostgreSQL 13 最令人期待的特性之一是 VACUUM 命令能够并行处理索引。可以使用 VACUUM 命令上的新 PARALLEL 选项(或 vacuumdb 上的 --parallel)来访问其功能,该选项允许用户指定用于清理索引的并行工作程序的数量。要注意的是,这不适用于 FULL 选项。
- reindexdb 命令还通过新的 --jobs 标志添加了并行性,它可以指定在为数据库重新索引时要使用的并发会话数。
- PostgreSQL 13 引入了“可信扩展”(trusted extension)的概念,该概念允许超级用户指定(只要具有 CREATE 特权就可以在其数据库中安装的)扩展。
- 该版本包括更多监控 PostgreSQL 数据库中活动的方法:PostgreSQL 13 现在可以跟踪 WAL 使用情况统计信息、流式基础备份的进度,以及 ANALYZE 命令的进度。pg_basebackup 还可以生成一个清单,该清单可用于使用新工具 pg_verifybackup 来验证备份的完整性。现在也可以限制复制槽保留的 WAL 空间量。
- pg_dump 的新标志 --include-foreign-data 在转储输出中包括来自外部数据包装程序引用的服务器数据。
- pg_rewind 命令在 PostgreSQL 13 中也有所改进。除了 pg_rewind 自动执行崩溃恢复外,现在可以使用 --write-recovery-conf 标志使用它来配置备用 PostgreSQL 实例。 pg_rewind 也可以使用目标实例的 restore_command 来获取所需的预写日志。
安全性
- PostgreSQL 在此最新版本中继续改进安全功能,引入了一些功能来帮助进一步安全地部署 PostgreSQL。
- libpq 是为 psql 和许多 PostgreSQL 连接驱动程序提供动力的连接库,新版本带来了几个有助于保护连接的新参数。PostgreSQL 13 引入了 channel_binding 连接参数,该参数允许客户端指定他们希望将通道绑定功能作为 SCRAM 的一部分。此外,使用密码保护的 TLS 证书的客户端现在可以使用 sslpassword 参数指定其密码。 PostgreSQL 13 还增加了对 DER 编码证书的支持。
- PostgreSQL 外部数据包装器(postgres_fdw)还获得了一些如何保护连接安全的增强功能,包括使用基于证书的身份验证连接到其他 PostgreSQL 集群的能力。此外,无特权的帐户现在可以通过 postgres_fdw 连接到另一个 PostgreSQL 数据库,而无需使用密码。
其他亮点
- PostgreSQL 13 继续改善 Windows 的可操作性,现在在 Windows 上运行 PostgreSQL 的用户可以选择通过 UNIX 域套接字进行连接。
- PostgreSQL 13 文档增加了术语表,以帮助人们熟悉 PostgreSQL 和常规数据库概念。同时,表中的函数和运算符的显示也进行了大量修改,这有助于提高 Web 和 PDF 文档的可读性。
- 用于性能测试的 pgbench 实用程序现在支持对“帐户”表进行分区的功能,从而可以更轻松地对包含分区的工作负载进行基准测试。
- 在输出数据方面,psql 包含了 \warn命令,该命令类似于 \echo 命令,只是 \warn 将其发送到 stderr。
- 发布公告:https://www.postgresql.org/about/news/2040/