Postgres 9.4 正在运行,但 "service status" 报告它已停止。

Ubuntu 14.04.3 LTS和一个新安装的Postgres 9.4(使用apt-get install postgresql-9.4,没有什么特别的)。Postgres是由postgres用户使用pg_ctl start命令启动的。
状态命令报告该服务已停止。
[root@box ~]# service postgresql status
9.4/main (port 5432): down

然而,服务器正在运行;我可以看到它在5432端口上监听,并且可以使用psql连接到它。
[root@box ~]# netstat -a -n -p | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      19377/postgres
tcp        0      0 127.0.0.1:5432          127.0.0.1:45724         ESTABLISHED 20280/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45725         ESTABLISHED 20281/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45732         ESTABLISHED 20288/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45726         ESTABLISHED 20282/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45729         ESTABLISHED 20285/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45723         ESTABLISHED 20279/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45730         ESTABLISHED 20286/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45731         ESTABLISHED 20287/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45728         ESTABLISHED 20284/postgres: ice
tcp        0      0 127.0.0.1:5432          127.0.0.1:45727         ESTABLISHED 20283/postgres: ice
unix  2      [ ACC ]     STREAM     LISTENING     4295677  19377/postgres      /var/run/postgresql/.s.PGSQL.5432

psql 连接:

[postgres@box~]$ psql
Password:
psql (9.4.5)

postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

我需要做其他什么来将Postgres作为一个服务运行吗?

版本9.3是我最新的Ubuntu 14.04系统上提供的版本。你从哪里得到了9.4版本?你需要那个特定的版本吗,还是9.3版本就可以了? - ubfan1
@ubfan1 我按照https://wiki.postgresql.org/wiki/Apt#PostgreSQL_packages_for_Debian_and_Ubuntu上的指示进行操作,成功安装了9.4版本。虽然我并没有绝对需要9.4版本,但由于它发布已经接近一年了,我宁愿使用它而不是较旧的9.3版本;这是我刚刚安装的新服务器,我更喜欢使用更新的版本。 - wishihadabettername
2个回答

总结一下,你添加了一个第三方软件源,安装了比Ubuntu软件中心提供的程序版本更新的版本,并且虽然你能够运行可执行文件,但是你缺少一些将它们整合到系统中的"粘合剂"脚本。 我建议移除添加的软件源,然后更新软件包列表。
sudo apt-get update

然后安装postgresql(将获得最新提供的版本)
sudo apt-get install postgresql postgresql-contrib

查看https://help.ubuntu.com/community/PostgreSQL 现在14.04版本允许安装多个PostgreSQL版本,但我确信期望的是安装最新版本。不确定当已存在的版本是较新版本且没有按照“预期”的方式设置时会发生什么。最好的情况是它会识别并使用已分配的端口(5432)运行它,并将“新”版本从软件中心放在下一个端口(5433)。两个版本可以同时运行,但需要不同的端口。如果9.3安装使用了已被9.4占用的5432端口,并且9.4被忽略了,那么至少你有一个9.3模板来移动/添加9.4的预期位置,例如/etc/rc2.d/S19postgresql链接到/etc/init.d/postgresql和/usr/share/postgresql/9.4等。
然后找到分配端口的配置文件,并确保9.4版本位于默认的5432端口(如果这是你想要的)。

在我的情况下,我已经启动了Postgres服务器,但状态也是“down”,我必须通过执行“pg_ctlcluster 9.4 main start”来启动集群,使其变为“online”,然后它就正常工作了。
希望对你有所帮助。