为什么PostgreSQL 9.3无法在Ubuntu上启动?


13

我已经成功从2个运行Ubuntu 12.04和13.04的VM的APT存储库中成功安装了PostgreSQL 9.3。但是,我无法将其正确安装在运行Ubuntu 12.04的主机上。

安装(这次)似乎一切正常,但也许是我不理解的错误:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

因此,我尝试将自己添加为PostgreSQL用户,但是我得到了:

createuser: could not connect to database postgres: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

我看不到PostgreSQL在系统监视器中运行,并且/ var / run / postgresql /文件夹中没有文件...完全空白。

编辑:在VM的/ var / run / postgresql /中有一个名为9.3-main.pid的文件

主机日志文件上没有任何内容,位于/ var / log / postgresql

那么...这里发生了什么而不是我的VM发生了什么?就像我说的那样,VM上的其他安装,包括PostGIS和PGAdmin都非常完美...不知道为什么该主机无法通过...


您实际上有/var/run/postgresql目录吗?成功安装后的某个阶段,该文件夹在我的计算机上丢失了。config会说明应使用哪个目录?
科林·哈特

@ Colin'tHart我确实有该目录...但是其中没有任何内容...在VM的目录中,创建了一个名为9.3-main.pid的文件。在哪里可以找到该配置信息?
DPSSpatial

postgresql.conf在config目录中(根据上述内容为)/etc/postgresql/9.3/main。您还应该查看日志文件,可能在中/var/log/postgresql
2013年

@ Colin'tHart日志文件为 ...配置文件-我认为这是您要执行的操作-说#如果未显式设置external_pid_file,则不会写入任何额外的PID文件。external_pid_file ='
var/run/postgresql/9.3

该目录中是否有套接字文件,或者它真的完全为空?
Hart

Answers:


16

安装PostgreSQL时,我的语言环境设置未正确配置。清除并重新安装没有帮助。我按照这里的指示进行操作,这对我来说很成功。

链接信息的主要部分复制如下:

问题以以下方式显示出来:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

第一个很容易通过执行以下命令来解决:

#dpkg-reconfigure locales

...并选择首选的语言环境。

但是之后,PostgreSQL仍然拒绝启动。这是由于安装过程在安装时尝试创建集群而导致的,但是由于语言环境错误,此操作没有完成。因此,我们必须通过执行以下步骤来重做此步骤:

#pg_createcluster 9.3 main --start

(对于9.3版本的PostgreSQL)

在那一步之后,PostgreSQL通过以下方式完美启动

#/etc/init.d/postgresql start

2
救了我。确实很烦人的是,即使纠正了语言环境,清除和重新安装也无济于事。这浪费了我一生的2个小时:(
Escher

如果pg_createcluster告诉你,集群已经存在,你需要先删除它(这将删除的所有数据,所以一定要确保你有一个备份): pg_dropcluster 9.3 main
Florian Brucker

6

希望您已经解决了这个问题,但是我遇到了一个似乎有不同来源的类似问题,如果您仍然遇到问题,也许我的经验会有所帮助。

我在Ubuntu上的9.3问题与套接字目录是/ run中的临时目录有关。基本上,如果init.d脚本在启动操作期间不存在,则应该负责在/ run / postgresql中创建套接字目录。重新启动后,这始终是事物的状态。

但是问题是,如果套接字目录不存在,则init.d脚本将在执行开始操作之前退出。这是因为对pg_lsclusters的调用将在没有套接字目录的情况下失败,从而阻止了启动操作创建套接字目录。

我还没有找到最好的解决方案,但是如果我将创建套接字目录的逻辑从start操作重新定位到调用pg_lsclusters之前,我可以在重启后启动服务器而不会出现问题。

这是开始操作中处理创建套接字目录的部分:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

如果此问题的根本原因对我很清楚,我将发布更新,因为这显然不是预期的行为。

附录:

我认为我遇到此问题的原因是因为我没有为unix_socket_directories配置好的值。在9.2上,此配置选项曾经是unix_socket_directory,我删除了该选项,而不是切换到unix_socket_directories。由于我为unix_socket_directories设置了一个值,因此服务器启动没有任何问题。


谢谢@ tdg5 !!!我尚未解决此问题,但我认为这归因于我的计算机上的几次错误安装。在新安装的ubuntu上从PostgreSQL Apt存储库安装解决了我的问题...
DPSSpatial 2014年

3
@mapBaker-我更新了响应,以包括在我的特定情况下PG 9.3启动问题的根本原因。也许对您也有帮助。
tdg5 2014年

1
重新启动后,我的PG9.3无法启动。在9.3的postgresql.conf中添加“ unix_socket_directories ='/ var / run / postgresql'”行即可解决该问题。谢谢
alfonx 2014年

谢谢!经过一段时间的努力,很高兴找到这个金块!
Serban Tanasa

3

我的套接字文件遇到了一些问题,在您的情况下是/var/run/postgresql/.s.PGSQL.5432

在启动postgresql之前,请确保/ var / run / postgresql目录存在并且可写,有关更多信息,请参见此讨论

另外,在连接时使用-h标志:

psql -h localhost 

看看是否能解决。


1

这似乎可以解决Ubuntu上的问题:

编辑postgresql.conf:

unix_socket_directories='/var/run/postgresql

现在做 service postgresql start


1

我是PSQL的新手,但是我通过编辑start.conf解决了问题,我已经评论了“自动”设置来手动管理服务器,但是它需要一个值:自动,手动或禁用。

EGD。


1

在我这边,启动脚本不正确。配置文件安装在/etc/postgresql/9.3/main中,但是正在搜索/usr/share/postgresql-common/init.d-functions脚本

for c in /etc/postgresql/"$2"/*; do 

将此行替换为

for c in /etc/postgresql/"$2"/main; do

-2

所有,

经过一番挖掘,我在这里找到了(a)解决方案:

http://ubuntuforums.org/showthread.php?t=869080

其中包含以下说明:

在终端中运行:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

现在我的服务器已启动并正在运行!!!

编辑:重新启动后,服务器仍未运行...

关于为什么我需要运行此功能的任何想法都将受到赞赏!


您确定它正在运行9.3吗?版本号似乎可疑...
dezso

@dezso对不起,我在粘贴这些命令时忘了更改版本号...全部在v9.3 ...
DPSSpatial 2013年

您可能需要指定端口。旧的postgres安装正在使用默认端口。您的新安装最有可能使用端口5433,但是您可以通过阅读postgresql配置文件来检查以下内容:/etc/postgresql/9.3/main/postgresql.conf
user35581

1
这可能是一种解决方法,但显然不是一个好的解决方案。这就像解决问题dba.stackexchange.com/a/91511/8099
sorin 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.