一切皆可Postgres
用PostgreSQL替代Redis、MongoDB、Kafka等数据库。降低复杂度,提升开发速度。简化技术栈。
简而言之:一切皆可Postgres。
我们主动将复杂性迎入门内,它却不会轻易离去。
摆脱复杂性的途径之一,是精简技术栈。减少动态组件、加速开发进程、降低风险并为初创企业交付更多功能的解决方案,正是 “一切皆用Postgres” 。Postgres可替代——支持数百万用户规模——众多后端技术,包括Kafka、RabbitMQ、Mongo和Redis等。这使每个应用程序的开发、扩展和运维都变得更轻松。

减少可变组件意味着:减少投入在无价值或重复功能(如前端)的开发人员,将更多资源倾注于真正创造客户价值的领域(如后端)。若能在不增加成本的前提下提升功能产出呢?对开发者而言:认知负荷能否减轻?能否真正深度掌握所有组件?是否能摆脱冒名顶替综合征?
什么是 PostgreSQL?
PostgreSQL(Postgres)是一款开源关系型数据库管理系统,同时支持SQL与NoSQL工作负载。不同于专用数据库,Postgres可兼任缓存、消息队列、文档存储、分析引擎等多重角色,是简化技术栈复杂度的理想选择。
简而言之:百万级用户规模前,一切需求皆可由Postgres解决。
为何选择PostgreSQL而非多款专用工具?
初创公司通常采用Redis缓存、MongoDB文档存储、Kafka消息传递和Elasticsearch搜索——这会产生运维负担、多重故障点以及开发者的认知负荷。
对于服务数百万用户的应用,PostgreSQL可替代多数专用工具,带来:
- 更快的功能开发速度
- 更低的运维开销
- 单一技术栈替代多技术栈
- 统一的监控、备份与扩展策略
直接使用Postgres
用Postgres替代Redis缓存
通过UNLOGGED表与TEXT作为JSON数据类型实现缓存功能。使用存储过程,或效仿我的做法——借助ChatGPT代写存储过程,为数据添加并强制执行过期机制,实现与Redis同等功能。
采用消息队列替代Kafka
若仅需消息队列功能,可通过SKIP LOCKED将Postgres用作消息队列。或结合Go语言的River实现任务队列功能
数据仓库
结合Timescale将Postgres用作数据仓库。使用DuckDB实现S3集成。
数据湖
将 Postgres 与 DuckDB 结合使用作为数据湖。此场景有专属产品 DuckLake,其中 Postgres 作为目录层。
内存OLAP
将Postgres与pg_analytics结合使用,配合Apache Datafusion实现内存OLAP分析。
替代MongoDB的文档数据库
使用Postgres配合JSONB存储JSON文档,实现数据库内的搜索与索引功能。若需更即插即用的替代方案,可选用DocumentDB。
定时任务守护进程
通过pg_cron将事件添加至消息队列,将Postgres作为定时任务守护进程执行定时操作(如邮件发送)。
地理空间查询
使用 Postgres 进行 地理空间查询。
替代 Elastic 的全文搜索
使用 Postgres 实现 全文搜索。
JSON API 生成
使用 Postgres 在数据库中生成 JSON,无需编写服务器端代码即可直接提供给 API。
审计功能
结合 pgaudit 实现 Postgres 审计功能
GraphQL交付
通过GraphQL适配器配合Postgres实现GraphQL服务交付。
向量数据库
采用pgvector替代专用向量数据库,实现嵌入式处理与AI相似度搜索。
会话存储
通过在会话ID和过期时间戳上设置合理索引,使用Postgres替代Redis进行Web会话管理。采用hstore实现键值存储。
速率限制
使用 Postgres 实现 API 速率限制,采用原子更新和基于时间的窗口机制替代 Redis 计数器。
分布式锁
使用Postgres的建议锁实现进程与服务间的协调。
事件溯源
采用Postgres构建事件驱动架构,确保事件存储的正确排序与原子性。
测试数据库
使用 Postgres 事务创建临时测试数据库,每次测试后回滚以恢复初始状态。通过 Postgres 模板数据库 快速便捷地创建测试环境。
指标与监控
结合pg_stat_statements使用Postgres获取应用性能指标。
Webhooks
配合HTTP扩展使用Postgres,实现数据变更时的HTTP通知推送。
文件存储元数据
使用 Postgres 存储文件元数据和大型对象,替代独立的文件管理系统。
安全加密
使用 pgcrypto 实现安全加密。
Postgres的扩展能力
数据库扩展常通过分区实现。使用Postgres的partman进行数据库扩展。
多租户支持
通过Postgres的行级安全实现SaaS应用的租户隔离。
定时任务
使用Postgres配合pg_timetable实现超越简单cron的复杂任务调度。
Postgres正逐渐成为Linux式的存在。Linux整合了所有基于Unix/BSD的操作系统,形成统一体系——OpenBSD虽仍存在且优秀,其理念卓越,但在整体格局中市场份额微不足道,以至于许多人从未听闻。Linux采用模块化用户空间开发模式,开放给所有人参与——操作系统的新发明得以在此落地实施。 Postgres同样吸收其他数据库的优秀理念,并以易于现有代码库集成的方式实现。凭借Postgres强大的营销能力和覆盖范围。
我已经说清楚了, 所有场景都直接用Postgres就行 。
如何安装 PostgreSQL 扩展
PostgreSQL 的强大源于其丰富的扩展生态系统。以下是安装扩展以释放 Postgres 全部潜力的方法:
1. 连接 PostgreSQL 数据库
首先使用 psql 命令行工具或任意 PostgreSQL 客户端连接数据库:
psql -U 用户名 -d 数据库名
将用户名替换为您的PostgreSQL用户名,将数据库名替换为您要连接的数据库名称。
2. 检查可用扩展
列出所有可用扩展以查看可安装项:
SELECT * FROM pg_available_extensions;
3. 安装扩展
使用 CREATE EXTENSION 命令安装扩展:
CREATE EXTENSION 扩展名称;
例如,安装用于键值对的 pgvector 扩展:
CREATE EXTENSION vector;
4. 验证安装
确认扩展安装成功:
SELECT * FROM pg_extension;
常见问题
问:但单点故障怎么办? 答:你是说像有五个不同系统都可能出问题?当前你使用Redis、Kafka和MongoDB,这本身就是三个故障点而非单点。服务水平协议(SLA)会急剧下降——三个系统各自99.9%的可用性,整体SLA仅为99.7%。而采用Postgres后,只需确保单系统达到99.9%可用性即可满足要求。
问:Postgres用于缓存/消息处理会不会太慢? 答:Instagram就用Postgres。他们用户量远超你。你这个1万用户的初创公司根本不需要Redis级别的性能。你需要的是开发效率和运维简易性。当实际触及Postgres性能瓶颈时——而非主观预判——再引入专用工具。
问:撤掉资深开发者惯用的工具会引发抗议 答:优秀开发者关注功能交付而非玩具把玩。向他们展示开发体验的提升:统一连接池、统一监控面板、统一备份策略。若仍抱怨,说明他们资历不如自认的深厚。真正的开发者渴望攻克复杂功能挑战,而非沉迷更多玩具。
问:这听起来像是技术债务的导火索 答:真正的技术债务是同时使用六种查询语言、四套监控工具和三种备份策略。全面采用Postgres才是技术投资——你正在为未来的回报积累简洁性资本。
问:如何向投资者/董事会成员推销这个方案? 答:“我们削减了60%的运营开支,并将功能交付速度提升了50%。”他们不在乎你的技术栈,只关注实际成果。
你也许感兴趣的: