嵌入式Postgres无法在Mac OS上获取进程PID

时间:2019-06-14 11:10:31

标签: macos java-11 embedded-postgres

我将embedded 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,但是第一次尝试通过unixLikeProcessId()获取pid失败。

任何人都可以提示发生这种情况的原因或解决方法吗?

1 个答案:

答案 0 :(得分:0)

日志显示以下内容:

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

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

问题出在通过additionalInitDbParams=[--locale=en-US, -EUTF8]配置的语言环境中。