我尝试在从源代码构建 PostgreSQL 实例后进行安装,但postmaster
在启动数据库集群之前运行守护程序似乎不起作用。这是我启动时收到的错误消息:
postgres@Home:~$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
LOG: could not bind IPv4 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not, wait a few seconds
and retry.
WARNING: could not create listen socket for "localhost"
FATAL: could not create any TCP/IP sockets
在 Google 上搜索后,我找到的唯一结果给了我一些提示,告诉我运行以下命令,其输出如下:
postgres@Home:~$ lsof -i :5432
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 1169 postgres 3u IPv4 1998 0t0 TCP localhost:postgresql (LISTEN)
postgres@Home:~$ netstat -an|grep :5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
这让我相信守护进程postmaster
尝试锁定的端口的连接实际上是可用的。有什么想法可以解释为什么会出现这种情况吗?
如果您好奇的话,我正在运行 pgsql 9.2.3。(此外,如果这是错误的 Stack Exchange 网站,请将其移至 Stack Overflow 或 Programmers。)
答案1
启动失败时出现的错误消息postmaster
和netstat
输出显示已有一个进程使用5432
TCP 端口。可能是因为 PostgreSQL 已作为系统的一部分安装。查看您是否有postgresql-9.1包安装,以及的输出pg_lsclusters
。
如果您想要同时运行您自己编译的 PostgreSQL 和为 Ubuntu 预先打包的 PostgreSQL,则需要port
更改/usr/local/pgsql/data/postgresql.conf
.
另一方面,如果你只希望运行自编译的 PostgreSQL 并使用默认端口5432
,你可以删除 Ubuntu 包或在启动时通过编辑禁用集群/etc/postgresql/9.1/main/start.conf