一、PostgreSQL 简介
PostgreSQL(通常简称为 Postgres)是一种功能强大的开源对象关系型数据库系统。它以其高度的可靠性和灵活性而闻名,支持复杂的查询、数据完整性、可扩展性以及对多种数据类型的处理。
主要特点:
- 开源和免费:PostgreSQL 是完全开源的,采用 PostgreSQL License,允许用户免费使用、修改和分发。
- 对象关系型数据库:它不仅支持传统的关系型数据库功能,还支持对象导向的特性,例如表继承和函数重载。
- 高度可扩展性:支持多种数据类型(包括 JSON、XML、空间数据等),并可通过插件和扩展进一步增强功能。
- 强大的数据完整性:支持外键、触发器、规则、存储过程等,确保数据的完整性和一致性。
- 高性能和并发性:支持多版本并发控制(MVCC),能够高效处理高并发的读写操作。
- 国际化和本地化:支持多种字符集、语言和时区,并提供全文搜索功能。
社区支持:拥有庞大且活跃的开发者社区,持续更新和优化。
开源地址
PostgreSQL 的官方网站和代码托管地址如下:
- 官方网站:
https://www.postgresql.org/
- 代码托管地址:
https://git.postgresql.org/gitweb/
- PostgreSQL 中文社区:
http://www.postgres.cn/
此外,PostgreSQL 的社区还提供了丰富的文档、教程和工具,帮助开发者和用户更好地使用和管理数据库。
二、为什么选择 PostgreSQL
下是 PostgreSQL 提供的各种功能列表,每个主要版本都在不断增加新功能:
- 数据类型:
- 基础类型:整数、数值、字符串、布尔值
- 结构化类型:日期/时间、数组、范围/多范围、UUID
- 文档类型:JSON/JSONB、XML、键值对(Hstore)
- 几何类型:点、线、圆、多边形
- 自定义类型:复合类型、自定义类型
- 数据完整性:
- 唯一性约束、非空约束
- 主键
- 外键
- 排他约束
- 显式锁、建议锁
- 并发性、性能:
- 索引:B-tree、多列索引、表达式索引、部分索引
- 高级索引:GiST、SP-Gist、KNN GiST、GIN、BRIN、覆盖索引、布隆过滤器
高级查询规划器/优化器、仅索引扫描、多列统计 - 事务、嵌套事务(通过保存点)
- 多版本并发控制(MVCC)
- 读查询和构建 B-tree 索引的并行化
- 表分区
- SQL 标准中定义的所有事务隔离级别,包括可序列化
- 表达式即时(JIT)编译
- 可靠性、灾难恢复:
- 写前日志(WAL)
- 复制:异步、同步、逻辑
- 时间点恢复(PITR)、活动备用
- 表空间
- 安全性:
- 认证:GSSAPI、SSPI、LDAP、SCRAM-SHA-256、证书等
- 强大的访问控制系统
- 列和行级安全性
- 使用证书和其他方法的多因素认证
- 可扩展性:
- 存储函数和过程
- 过程语言:PL/pgSQL、Perl、Python 和 Tcl。通过扩展还支持其他语言,例如 Java、 JavaScript(V8)、R、Lua 和 Rust
- SQL/JSON 构造器、查询函数、路径表达式和 JSON_TABLE
- 外部数据包装器:通过标准 SQL 接口连接到其他数据库或流
- 可定制的表存储接口
- 提供额外功能的众多扩展,包括 PostGIS
- 国际化、文本搜索:
- 支持国际字符集,例如通过 ICU 排序规则
- 不区分大小写和不区分重音的排序规则
- 全文搜索
三、国内基于PostgreSQL 的数据库
- 阿里云 PolarDB for PostgreSQL
阿里云推出的 PolarDB for PostgreSQL 是一款高性能、高可用的云原生数据库产品。它100%兼容 PostgreSQL,支持存储计算分离架构,具备极致弹性、毫秒级延迟和 HTAP(混合事务/分析处理)能力。此外,PolarDB for PostgreSQL 还高度兼容 Oracle 语法,支持阿里云自研的 Ganos 多维多模时空信息引擎。 - 腾讯云 TDSQL for PostgreSQL
腾讯云的 TDSQL for PostgreSQL 是基于 PostgreSQL 内核优化的企业级数据库产品,继承了 PostgreSQL 的高可靠性、高性能等优点,并针对企业级应用场景进行了优化。 - 华为 GaussDB for PostgreSQL
华为的 GaussDB for PostgreSQL 是基于 PostgreSQL 开发的高性能数据库产品,具备高可靠性和扩展性,适用于多种企业级应用场景。 - 人大金仓 KingBase
人大金仓的 KingBase 是基于 PostgreSQL 9.6 开发的国产数据库,具备高兼容性、高可靠性和高性能等特点。它在 PostgreSQL 的基础上进行了定制和优化,以更好地满足国内用户的需求。 - 海量数据 Vastbase G100 数据库:
Vastbase G100是一款高性能、高兼容性、高安全的企业级关系型数据库。这款数据库在国产化环境下表现尤为出色,在鲲鹏处理器服务器上实现了非常高的事务处理能力(tpmC值),体现了其优秀的性能和稳定性。在开发中也是基于 PostgreSQL 的基础上进行了开发。
四、Postgresql 与Mysql的对比
PostgreSQL 和 MySQL 是两个非常流行的开源关系数据库管理系统,它们各自有着独特的特性和适用场景。以下是两者之间的一些关键对比点:
数据库模型
- PostgreSQL 是一个对象关系数据库管理系统(ORDBMS),支持复杂的数据类型和继承等面向对象的特性。
- MySQL 则是一个纯粹的关系型数据库管理系统(RDBMS),尽管它也提供了一些扩展功能,但主要关注于传统的表格数据结构。
标准遵从性
- PostgreSQL 高度遵循SQL标准,并且在实现上尽可能地接近标准规范。
- MySQL 为了性能优化,在某些地方偏离了SQL标准,例如对GROUP BY子句中非聚合列的支持。
ACID兼容性
- PostgreSQL 在所有配置下都完全符合ACID属性。
- MySQL 只有在使用InnoDB或NDB Cluster存储引擎时才提供完整的ACID事务支持。
并发控制
- PostgreSQL 使用多版本并发控制(MVCC)来管理并发访问。
- MySQL 的InnoDB存储引擎也支持MVCC,但在MyISAM等其他存储引擎中并不支持。
性能
- PostgreSQL 在处理复杂的查询、大数据集以及需要频繁更新的情况下表现更好。
- MySQL 对于简单的读写操作和高并发的Web应用来说通常提供更好的性能。
扩展性和灵活性
- PostgreSQL 提供了高度的可扩展性,允许用户定义自己的数据类型、函数和操作符。
- MySQL 虽然也有一定的扩展能力,但是与PostgreSQL相比,其灵活性较低。
安全性和高级功能
- PostgreSQL 支持更多的安全特性,如行级安全性(RLS)和更严格的权限控制系统。
- MySQL 也需要通过额外的配置来实现类似的功能,比如创建视图来模拟行级安全性。
社区和支持
- PostgreSQL 拥有一个活跃的技术社区,强调技术的深度和稳定性。
- MySQL 因为其广泛的使用基础而拥有庞大的用户群体和丰富的资源,同时还有Oracle公司的商业支持。
许可证
- PostgreSQL 发布在类似于BSD/MIT的自由开源许可下,允许更自由的使用和修改。
- MySQL 社区版采用GPL许可证,对于商业用途可能需要考虑其商业版。