我正在尝试创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脚本完成(不再存在),而且新过程更接近上游指令 。
您必须先su到postgres用户,然后运行initdb或pg_ctl initdb 。 如果您使用的是Red Hat构build版本,则不需要提供数据目录,因为其默认值会自动select缺省数据目录/var/lib/pgsql 。
例如:
# su - postgres $ pg_ctl initdb $ exit #
当然,在第一次安装时,您只需要执行一次这个操作,即可设置初始数据目录。 除非您正在创build全新的安装或从灾难中恢复,否则不会再执行此操作。