内容提要
postgres-wasm是一个在浏览器中运行的PostgreSQL服务器,支持状态持久化、数据恢复和逻辑复制。该项目与Snaplet合作开发,旨在为开发者提供准确的数据和数据库预览。它具备文件上传、下载和网络连接等功能,尽管目前体积较大,但未来有潜力用于离线数据分析、开发环境和数据库快照等应用。
延伸解读
浏览器内运行Postgres的技术路径
postgres-wasm并非将Postgres直接编译为WASM,而是通过v86在浏览器中模拟x86硬件,运行一个精简的Linux虚拟机,再在其中运行Postgres。这种方案绕开了直接编译的复杂性,但带来了约30MB的体积。开发中曾遇到PG14初始化段错误,最终通过关闭v86的JIT编译或切换内存管理方式解决,体现了底层模拟的挑战。
网络连接与代理机制
浏览器限制TCP访问,无法直接连接Postgres的5432端口。项目通过Websocket代理将虚拟机的网络流量转换为TCP/IP,实现出站连接;并fork代理加入反向代理,支持从外部连接至浏览器内的Postgres。用户可通过代理URL和端口映射,用psql或PgAdmin连接,甚至实现逻辑复制。
当前局限与适用场景
由于初始下载约30MB,postgres-wasm目前不适合通用生产环境。但它在文档演示、离线数据分析、测试Postgres功能、开发环境以及数据库快照分享等场景具有潜力。项目仍处于实验阶段,未来可能进一步优化启动时间和体积。
Q&A
postgres-wasm是什么?
postgres-wasm是一个在浏览器中运行的PostgreSQL服务器,支持状态持久化、数据恢复和逻辑复制。
postgres-wasm的主要功能有哪些?
主要功能包括文件上传、下载、状态保存与恢复、逻辑复制等。
如何在本地运行postgres-wasm?
可以通过克隆Snaplet或Supabase的仓库并使用npx命令启动本地服务器来运行postgres-wasm。
postgres-wasm的未来应用潜力是什么?
未来可能用于离线数据分析、开发环境、数据库快照等应用。
如何实现浏览器与PostgreSQL之间的网络连接?
通过Websocket代理实现浏览器与Postgres之间的网络连接,解决了浏览器对TCP网络访问的限制。
postgres-wasm的演示版本包含哪些功能?
演示版本包含Postgres 14.5、psql、pg_dump等功能,支持从文件保存和恢复状态。