Postgres 正在吞噬数据库世界
查询规划器行为与控制
- 一些评论者称赞 Postgres,但抱怨它的非确定性查询规划器。
- 痛点包括:规划器选择顺序扫描或“错误”的索引、因很小的谓词变化导致性能剧烈波动、连接顺序问题,以及连接重排的折叠限制。
- 提到的变通方法有:
EXPLAIN ANALYZE、禁用特定计划类型(enable_seqscan = off等)、调优random_page_cost、使用CLUSTER改善索引/表相关性,以及重写连接。 - 有些人希望有显式的计划提示;另一些人则认为规划器通常是对的,问题往往源于统计信息、vacuum,或模式/查询设计。
- 第三方扩展如
pg_hint_plan提供了手动影响计划的能力。
物化 / 增量视图
- 大家非常关注增量视图维护,以便让复杂分析“实时保持新鲜”。
- 目前常见的变通方案是物化视图加定时刷新(例如
pg_cron)。 - 像
pg_ivm这样的扩展已经存在,但限制很多;这或许解释了为什么它没有成为核心功能。 - 对可行性的争论:有人认为这“不过是查询上的索引”,也有人以差分数据流系统(Materialize、Noria、流处理框架)为例,说明这确实可行,但很复杂。
管理、升级与运维体验
- 很多人表示 Postgres 现在已经很容易管理;autovacuum 被认为很有效。
- 就地升级据说表现很好,但有些人仍然会经历令人痛苦的 dump/restore 工作流,尤其是在使用 PostGIS 等扩展时。
- 提到的工具包括 pgAdmin、dBeaver、Web 客户端;对 pgAdmin 的体验褒贬不一。
与 .NET / EF Core 的使用
- 多个反馈称使用 EF Core 和 Npgsql provider 进行生产部署很顺畅。
- 通常被描述为稳定、性能良好,并且更新及时。
比较、局限与替代方案
- Postgres 被广泛称赞为一个多才多艺的默认选择;一些公司把它作为 Oracle/MySQL 之外的标准方案。
- 怀疑者指出技术债务、每连接一个进程的模型、写放大,以及它不适合超高吞吐事务系统或以高可用优先的分布式用例。
- 在某些特定领域,专用系统(TigerBeetle、Cassandra/Dynamo、Kafka、Elastic、ClickHouse、DuckDB、SQLite)仍然被认为是必要的。
- 关于 Postgres 全文搜索也存在争论:内置 FTS 被认为不如 Elasticsearch,但扩展(ParadeDB、PGroonga、pg_trgm、pgvector、混合搜索)显著增强了能力。
生态、兼容性与热潮
- 扩展和协议兼容性被视为主要优势;许多“新数据库”被认为是基于 Postgres 或与 Postgres 相邻的方案。
- 有些人认为对 Postgres 的热情有潮流化的特征;另一些人则指出它有数十年的历史,并且反复经历“热潮周期”,人们在尝试过时髦系统后又回到它。
- 一些新项目旨在实现 Postgres 兼容,而不复用其代码库,以利用现有工具和开发者偏好。