postgresql安装:initdb数据目录不是空的?

我正在尝试创buildpostgresql数据库。

当我安装PostgreSQL时,我给了这个命令:

sudo yum install postgresql postgresql-server 

后来我修改了configuration文件:

 sudo vim /var/lib/pgsql/data/pg_hba.conf 

并修改为

 local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust host all all 0.0.0.0/0 md5 

虽然我试图启动postgresql服务:

 sudo service postgresql initdb > Data directory is not empty! [FAILED] sudo chkconfig postgresql on sudo service postgresql start Starting postgresql service: [ OK ] 

是什么导致了这些错误,我该如何解决这些错误?

Initdb只能运行一次。 它将创build你将保存configuration文件的目录以及(通常)实际的数据库。 你显然已经做到了, otherwrise将不会有任何pg_hba.conf供您编辑。

所以,只要不重新运行postgresql initdb ,除非你正在做一个完整的重新安装。

从这里 :

如果您完全清除并重新安装Postgres数据库,运行initdb如下所示:

service postgresql-9.2 initdb -E 'UTF8' --pgdata="/foo/bar/"

你可以遇到这个服务错误:

数据目录不是空的! [FAILED]

要解决这个问题(这是核选项 – 所有db数据都被擦除了!)

在Amazon Linux(2014-x)上:

rm -rf /var/lib/pgsql9/data

在CentOS上(6.x)

rm -rf /var/lib/pgsql/9.2/data

现在再次尝试initdb命令,它应该这样工作:

service postgresql-9.2 initdb

我有同样的问题,在CentOS 6上使用PostgreSQL 9.3。

我删除了/var/lib/pgsql/9.3/data文件夹,然后重新运行该命令

 sudo service postgresql-9.3 initdb 

…它再次成功地初始化数据库服务。

在基于systemd的系统(如RHEL / CentOS 7和Fedora)上,运行initdb的过程有所不同。 这不再由init脚本完成(不再存在),而且新过程更接近上游指令 。

您必须先supostgres用户,然后运行initdbpg_ctl initdb 。 如果您使用的是Red Hat构build版本,则不需要提供数据目录,因为其默认值会自动select缺省数据目录/var/lib/pgsql

例如:

 # su - postgres $ pg_ctl initdb $ exit # 

当然,在第一次安装时,您只需要执行一次这个操作,即可设置初始数据目录。 除非您正在创build全新的安装或从灾难中恢复,否则不会再执行此操作。