![连接到 PostgreSQL 失败,semctl ...参数无效](https://linux22.com/image/667217/%E8%BF%9E%E6%8E%A5%E5%88%B0%20PostgreSQL%20%E5%A4%B1%E8%B4%A5%EF%BC%8Csemctl%20...%E5%8F%82%E6%95%B0%E6%97%A0%E6%95%88.png)
我运行了 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
。