12

当我尝试运行服务器时:

postgres@ubuntu:~$ /usr/local/pgsql/bin/postgres -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 postgres@ubuntu:~$ 

然后我将用户更改为我自己:

postgres@ubuntu:~$ su - michael

michael@ubuntu:~$  sudo netstat -tulpn | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      959/postgres 

好吧,postgres 似乎正在监听端口,这似乎是问题所在。

让我们将 pack 更改为 postgres 并尝试终止此进程:

postgres@ubuntu:~$ kill `cat /usr/local/pgsql/data/postmaster.pid`

反应是:

cat: /usr/local/pgsql/data/postmaster.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

你能推荐我如何进行吗?

4

1 回答 1

11

首先,获取正在运行的 Postgres pid:

ps -ef | grep postmaster | awk '{print $2}'

然后杀

kill <the_pid_you_just_got>

但是,除非您尝试使用 Postgres(多个实例...)做一些非常特别的事情,否则您应该使用sudo /etc/init.d/postgresql stop(或 sudo /etc/init.d/postgres stop)停止它并启动它使用sudo /etc/init.d/postgresql 启动

Postgres 作为服务运行,因此它有一个服务控制文件/脚本,负责正确启动和停止它。这些控制文件过去位于 /etc/init.d 中,但我必须承认,随着服务管理系统(init、upstart、systemd...)的数量不断增加,这些文件现在变得有点乱了。

于 2012-10-05T13:10:15.047 回答