首页 > 解决方案 > Embedded Postgres 在 Mac OS 上无法获取进程 PID

问题描述

我使用嵌入式 PostgreSQL和 Java 11 进行集成测试。在 Windows 上它运行良好,但在 Mac 上它首先下载 Mac OS 二进制文件(这是预期的):

Extract /Users/fubar/.embedpostgresql/postgresql-11.1-1-osx-binaries.zip START

但随后它因以下堆栈跟踪而失败:

java.lang.NoSuchFieldException: handle
at java.base/java.lang.Class.getDeclaredField(Class.java:2411)
at de.flapdoodle.embed.process.runtime.Processes.windowsProcessId(Processes.java:109)
at de.flapdoodle.embed.process.runtime.Processes.access$200(Processes.java:51)
at de.flapdoodle.embed.process.runtime.Processes$PidHelper$2.getPid(Processes.java:209)

当我查看Processes源代码时,我看到它在内部使用PidHelper.LEGACY,第一次尝试通过 pid 获取失败unixLikeProcessId()

请任何人提示一下为什么会发生这种情况或如何解决?

标签: macosjava-11embedded-postgres

解决方案


日志显示以下内容:

Possibly failed to run initdb:
initdb: invalid locale name "en-US"

所以initdb失败的,PostgeSQL实例没有启动,也没有创建postmaster.pid文件,都导致了上面的错误。

问题出在通过additionalInitDbParams=[--locale=en-US, -EUTF8].


推荐阅读