功能请求:锁定数据目录,这样另一个进程中的第二个 PGlite 就可以快速失败,而不是损坏它
作者: marcospgp创建于 2026年9月11日更新于 2026年9月11日
** 新特性请求** Postgres拒绝在数据目录上开始另一个Postmaster控件(postmaster.pid). 在节点文件系统VFS上的PGlite没有取出这样的锁,因此打开同一个"dataDir"的两个进程都成功,两个都写出,目录最终无法读取. 然后,下一个开放状态会以`运行时错误:中止()' (#884中的症状)或检查站恐慌(# 327)而死,没有任何迹象表明原因。
我们案件中的两个打开器是普通的:一个使用 " -- -- -- -- -- -- -- " 运行的dev服务器和一个导入同一数据库模块的脚本。 运行中的服务器下的数据目录的`rm-rf'结局相同。
说明你想要的解决方案
在节点文件系统中的`新 PGlite(dataDir)' 在目录中写出一个锁定文件, 持有其进程 ID, 当进程存在时, 并命名它 。 一个 stale 文件( 进程已去) 被接管 。 在关闭和流程退出时被释放。 和Postmaster.pid一样的想法, 被范围化到PGlite在一个过程中所能知道的.
** 说明你考虑过的备选办法**
- 我们在应用程序中写下了这个锁(目录旁的 " process.kill(pid, 0) " 用于活性。 它起作用了,但每个PGlite的用户有一个以上的过程,都碰到同样的腐败,并从`Aborted ()'中重新发现。
- 一个文件说明。 它没有停止第二次开放。
** 其他情况**
#85中的锁请求是为索引DB VFS. 这个是节点文件系统VFS,其中第二个打开器是另一个OS进程.
内容来源: electric-sql/pglite