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


17

我正在尝试创建postgresql数据库。

当我安装PostgreSQL时,我给出了以下命令:

sudo yum install postgresql postgresql-server

然后我修改了配置文件:

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  ]

这些错误是由什么引起的,我该如何解决?

Answers:


18

Initdb应该只运行一次。它将创建目录,您将在其中保存配置文件和(通常是)实际数据库。您显然已经做到了;否则将没有任何pg_hba.conf可供您编辑。

因此,postgresql initdb除非您要进行完全的重新安装,否则请不要再次运行。


感谢您的答复..我运行了两次...您的意思是它不是安装中的问题..
sridhar

我的意思是您的安装没有问题,至少没有显示任何问题。唯一失败的事情是多次执行initdb,这应该失败-其他一切都显示为OK。如果还有其他问题,请描述一下会有所帮助。
詹妮·D

非常感谢您..那么这不是问题..如果我遇到问题,我会让您知道..
sridhar

15

这里

如果您完全擦除并重新安装了Postgres DB,则在运行时应initdb如下所示:

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

您会遇到此服务错误:

数据目录不为空![失败]

要修复它(这是最基本的选择-清除所有数据库数据!)

在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


4

在基于系统的系统(如RHEL / CentOS 7和Fedora)上,运行initdb的过程有些不同。初始化脚本(不再存在)不再执行此操作,并且新过程更接近上游指令

你必须首先supostgres用户,然后运行initdbpg_ctl initdb。如果您使用的是Red Hat构建,则无需提供数据目录,因为它的默认自动选择默认数据目录/var/lib/pgsql

例如:

# su - postgres
$ pg_ctl initdb
$ exit
#

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


3

我在CentOS 6上使用PostgreSQL 9.3时遇到了同样的问题。

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

sudo service postgresql-9.3 initdb

...再次成功初始化了db服务。

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.