【问题标题】:Embedded Postgres cannot obtain process PID on Mac OS嵌入式 Postgres 在 Mac OS 上无法获取进程 PID
【发布时间】:2019-06-14 11:10:31
【问题描述】:

我正在使用 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 失败。

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

【问题讨论】:

  • 我对嵌入式进度一无所知。您是否检查过他们的问题跟踪器以查看是否有更新的版本可以解决此问题? Process::pid 方法是自 JDK 9 以来获取 pid 的最简单方法。

标签: macos java-11 embedded-postgres


【解决方案1】:

日志显示如下:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 2012-07-17
    • 1970-01-01
    • 2015-07-03
    • 2016-07-03
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多