我运行了 initdb,尝试使用 createuser -sdrP 创建一个新的超级用户我的用户
我得到的错误是
createuser: could not connect to database postgres: FATAL: semctl(3342342, 3, SETVAL, 0) failed: Invalid argument
我在互联网上找不到任何关于此问题的信息。我尝试过卸载、删除数据目录,然后重试,但无济于事。我已经束手无策了。
我在 jail 中运行,它运行的是 FreeBSD 9.2-RELEASE-p10。是的,我已设置 allow.sysvipc=1
答案1
PostgreSQL 很可能找不到它之前创建的信号量。另一个(不相关的)进程可能正在删除信号量(可能是调用 ipcrm 的脚本)。
在启动 PostgreSQL 后立即使用ipcs -s
列出信号灯,然后在遇到问题时再次列出。除非另一个进程正在主动删除信号灯,速度比您ipcs -s
在 PostgreSQL 启动后运行测试的速度快,否则您应该能够通过比较两个信号灯列表来确定 PostgreSQL 信号灯是否确实被删除。
这不会告诉您哪个 (root) 进程是罪魁祸首,但它确实为您指明了正确的方向。幸运的话,有问题的进程是一个脚本,在这种情况下,您可以搜索执行调用的 root 执行脚本ipcrm
。