postgresql installation : initdb data directory not empty?
Solution 1:
Initdb should only be run once. It will create the directory where you'll keep the config files and (usually) the actual database. You've obviously already done that already; otherwrise there wouldn't be any pg_hba.conf for you to edit.
So, just don't run postgresql initdb
again, unless you are doing a complete reinstall.
Solution 2:
From here:
If you're completely wiping & reinstalling a Postgres DB, when running initdb
like:
service postgresql-9.2 initdb -E 'UTF8' --pgdata="/foo/bar/"
you can encounter this service error:
Data directory is not empty! [FAILED]
To fix it (and this is the nuclear option -- all db data is wiped!)
On Amazon Linux (2014-x):
rm -rf /var/lib/pgsql9/data
On CentOS (6.x)
rm -rf /var/lib/pgsql/9.2/data
Now try the initdb
command again and it should work this time:
service postgresql-9.2 initdb
Solution 3:
On systemd based systems like RHEL/CentOS 7 and Fedora the procedure for running initdb is somewhat different. This is no longer done by the init scripts (which no longer exist), and the new procedure is much closer to the upstream instructions.
You must first su
to the postgres
user, and then run initdb
or pg_ctl initdb
. It's not necessary to provide a data directory if you are using a Red Hat build as its default automatically chooses the default data directory /var/lib/pgsql
.
For example:
# su - postgres
$ pg_ctl initdb
$ exit
#
Of course, you only do this once, on first installation, to set up the initial data directory. You would not do it again unless you were creating a completely new installation or restoring from a disaster.
Solution 4:
I had the same issue, using PostgreSQL 9.3 on CentOS 6.
I deleted the /var/lib/pgsql/9.3/data folder, then re-ran the command
sudo service postgresql-9.3 initdb
... which successfully initialised the db service again.