I've a problem with start PostgreSQL 9.4 on Centos 7 Server. Because the partition /var/lib/pgsql/9.4/data/ (which contains PostgreSQL data) is full so I want to change to another partition.
/dev/sdb1 154685904 322500 146482752 1% /run/media/root/Data
I've used this command to copy all the old data to new data folder:
cp -a /var/lib/pgsql/9.4/data/ /run/media/root/Data/pgsql_data
Then I changed the directory to new data directory in postgresql.conf
(/var/lib/pgsql/9.4/data
)
data_directory = '/run/media/root/Data/pgsql_data/' # use data in another directory
And then I try to restart PostgreSQL, here are errors:
postgresql-9.4.service - PostgreSQL 9.4 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-9.4.service; enabled)
Active: failed (Result: exit-code) since Wed 2015-03-11 09:17:21 ICT; 4s ago
Process: 54975 ExecStop=/usr/pgsql-9.4/bin/pg_ctl stop -D ${PGDATA} -s -m fast (code=exited, status=0/SUCCESS)
Process: 56133 ExecStart=/usr/pgsql-9.4/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 (code=exited, status=1/FAILURE)
Process: 56127 ExecStartPre=/usr/pgsql-9.4/bin/postgresql94-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 54580 (code=exited, status=0/SUCCESS)
Mar 11 09:17:16 localhost.localdomain pg_ctl[56133]: LOG: skipping missing configuration file "/run/media/root/Data/pgsql_data/postgresql.auto.conf"
Mar 11 09:17:16 localhost.localdomain pg_ctl[56133]: < 2015-03-10 22:17:16.187 EDT FATAL: could not read permissions of directory "/run/media/root/Data/pgsql_data": Permission denied
Mar 11 09:17:21 localhost.localdomain pg_ctl[56133]: pg_ctl: could not start server
Mar 11 09:17:21 localhost.localdomain pg_ctl[56133]: Examine the log output.
Mar 11 09:17:21 localhost.localdomain systemd[1]: postgresql-9.4.service: control process exited, code=exited status=1
Mar 11 09:17:21 localhost.localdomain systemd[1]: Failed to start PostgreSQL 9.4 database server.
Mar 11 09:17:21 localhost.localdomain systemd[1]: Unit postgresql-9.4.service entered failed state.
Please help!
Best Answer
You are obviously missing some permissions in the new location.
I have tried to reproduce your error on my local test cluster. I could get several different errors along the way but never the one you got. However, here are the permissions you need on your directories to run the cluster:
data_directory
(in your case,pgsql_data
) must be owned bypostgres
(the group seems making no difference)Based on my experiments, these should be enough for starting PostgreSQL.