跳转至

PostgreSQL 概述

1.1 PostgreSQL 概述

PostgreSQL

PostgreSQL,通常简称为 PG,是一个高度可扩展的开源对象关系型数据库系统(ORDBMS),带有企业级的可靠性和功能。它以其先进的索引技术、窗口函数、部分分区、表继承、高级角色权限控制等特性而闻名。PostgreSQL 以其稳定性、强大的功能和对 SQL 标准的遵守而受到全球开发者和公司的青睐。

根据 DB-Engines Ranking 排名,其长期占据 DBMS 数据库前四的位置。PostgreSQL可以运行在所有主流操作系统上,包括Linux、Unix和Windows等。

PostgreSQL 是完全的事务安全性数据库,支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。PostgreSQL数据库提供了丰富的接口,可以很方便地扩展它的功能,如可以在GiST框架下实现自己的索引类型,支持使用C语言写自定义函数、触发器,也支持使用流行的编程语言写自定义函数。PL/Perl提供了使用Perl语言写自定义函数的功能,当然还有PL/Python、PL/Java、PL/Tcl等。

1.2 PostgreSQL 的特点

PostgreSQL 提供了许多先进的数据库功能,这些功能通常只在商业数据库系统中才能找到。以下是一些使 PostgreSQL 脱颖而出的关键特点:

  • 开源许可:PostgreSQL 在 PostgreSQL 许可证下发布,这是一种自由的开源软件许可证,鼓励广泛的使用和贡献。
  • 高级索引:包括 GIN、GiST、BRIN 和 B-tree 索引,支持复杂查询和大数据集。通过 Tsearch2 或 OpenFTS支持全文检索。
  • 数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据等。NoSQL类型JSON,JSONB,XML,HStore 原生支持。
  • 窗口函数:支持窗口函数,允许进行高效的数据分析和聚合。
  • 部分分区:允许对大型表进行更细粒度的分区,提高管理和查询性能。
  • 表继承:支持表继承,使得可以创建一个继承自其他表的表,实现代码重用和组织结构。
  • 高级角色基于的权限控制:提供细粒度的权限控制,支持角色和行级安全性。
  • 多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的"快照",用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。
  • 扩展支持:可以通过安装扩展来增加新的功能,如 PostGIS 用于地理空间数据处理。能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen等数据仓库,使用 FDW(Foreign data wrappers) 进行 ETL(Extract-Transform-Load)。
  • 国际化和本地化:支持多字节字符集和多种语言环境。

1.3 Postgresql 与其他数据库

PostgreSQL VS Oracle

Oracle数据库是目前功能最强大的商业数据库,PostgreSQL则是功能最强大的开源数据库。

PostgreSQL与Oracle的不同之处在于,PostgreSQL有更多支持互联网特征的功能。如PostgreSQL数据类型支持网络地址类型、XML类型、JSON类型、UUID类型以及数组类型,且有强大的正则表达式函数,如where条件中可以使用正则表达式匹配,也可以使用Python、Perl等语言写存储过程等。

PostgreSQL更小巧。PostgreSQL可以在内存很小的机器上完美运行起来,如在512MB的云主机中,而Oracle数据库基本要在数GB的云主机中才可以运行起来。Oracle安装包动辄几个GB以上级别,而PostgreSQL的安装包只有几十MB大小。

PostgreSQL在任何一个环境都可以轻松地安装。Oracle数据库安装花费的时间是在小时级别,而PostgreSQL在分钟级别就可以完成安装。

PostgreSQL VS MySQL

Postgresql 和 MySQL 都是开源数据库。但相较于 MySQL,PostgreSQL有以下优势。

功能强大:支持所有主流的多表连接查询的方式,如“Hash JOIN”“Sort Merge JOIN”等;字段类型还支持数组类型,甚至有一些业务功能都不再需要写代码来实现了,直接使用数据库的功能即可解决问题。

性能优化工具与度量信息丰富:PostgreSQL数据库中有大量的性能视图,可以方便地定位问题(比如可以看到正在执行的SQL,可以通过锁视图看到谁在等待,以及哪条记录被锁定等)。PostgreSQL中设计了专门架构和进程用于收集性能数据,既有物理I/O方面的统计,也有表扫描及索引扫描方面的性能数据。

在线操作功能好:PostgreSQL增加空值列时,本质上只是在系统表上把列定义上,无须对物理结构做更新,这就让PostgreSQL在加列时可以做到瞬间完成。PostgreSQL还支持在线建索引的功能,在创建索引的过程可以不锁更新操作。

从PostgreSQL9.1开始,支持同步复制(synchronous replication)功能,通过Master和Slave之间的复制可以实现零数据丢失的高可用方案。

可以方便地写插件来扩展PostgreSQL数据库的功能:支持移动互联网的新功能,如空间索引。如果应用的数据访问很简单,那么后端使用MySQL也是很合适的。但是如果应用复杂,而且不想消耗太多的开发资源,那么PostgreSQL是一个很明智的选择。

注:尤其在 MySQL 被 Oracle 收购后,在开源数据库上的影响力,明显 Postgresql 要高于 MySQL,也成为了更多企业的首选数据库。

1.4 PostgreSQL 生态

似乎无论什么用例,PostgreSQL都支持它。有疑问时,你可以简单地使用PostgreSQL。有人说:PostgreSQL eating world

postgresql ecology

  • 时间序列(TimeSeries):PostgreSQL采用Timescale,这是一个强大的时间序列数据库扩展,用于高效处理带时间戳的数据。
  • 机器学习(Machine Learning):借助pgVector和PostgresML,Postgres可以支持机器学习功能和向量相似性搜索。
  • OLAP:Postgres可以使用Hydra、Citus和pg_analytics等工具支持OLAP。
  • 衍生(Derived):甚至衍生数据库,如DuckDB、FerretDB、CockroachDB、AlloyDB、YugaByte DB、Supabase等也提供PostgreSQL支持。
  • 地理空间(GeoSpatial):PostGIS扩展了PostgreSQL的地理空间功能,使您能够轻松存储、查询和分析地理数据。
  • 搜索(Search):pgroonga、ParadeDB和ZomboDB等Postgres扩展提供全文搜索、文本索引和数据解析功能。
  • 联邦(Federated):Postgres与各种数据源无缝集成,如MongoDB、MySQL、Redis、Oracle、ParquetDB、SQLite等,实现了联合查询和数据访问。
  • 图数据库(Graph):Apache AGE和EdgeDB是基于PostgreSQL构建的图形数据库。此外,pg_graphql是一个为Postgres提供graphql支持的扩展。

捐赠本站(Donate)

weixin_pay
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))