On Linux Mint 17.0 Cinnamon Edition, I want to use
/var/run/postgresql as the
unix_socket_directories option for all of my postgres databases.
Whenever I run the command
pg_ctl -D postgres-data -o '-F -p 33311' start to start my local database, I get the error
FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.33311.lock": Permission denied.
As many answers across AskUbuntu, StackOverflow and various forums suggest, I have to run
sudo chmod 777 /var/run/postgresql or
sudo chown -R $USER:$USER /var/run/postgresql to change the permissions of the directory so that I can write to it. Then I am able to start my database. However, every time I reboot, the permissions go away; the directory is no longer world-writable and the user
postgres-xc reclaims user and group ownership over the directory.
sudo adduser $USER postgres or
sudo adduser $USER postgres-xc alleviates the permissions issue.
I tried doing a clean install as described here, but I still have the issue on reboot.
I've tried changing the value of
./postgres-data/postgresql.conf (the local database config file), and this allows me to start that particular database without having to update permissions on every reboot. However, I also have a script which uses
pg_ctl -D $DIR initdb && pg_ctl -D $DIR start to setup and start databases on the fly. As such, a default
postgresql.conf config file is used for these databases, so
unix_socket_directories is the unwritable
/var/run/postgresql and I get permission denied errors when running that script. Manually/programmatically editing these configs on-the-fly to use
unix_socket_directories = '/tmp' is... undesirable.
I know that I could use the
-o flag with
pg_ctl to override the
unix_socket_directories option to
/tmp, but this script is shared by other developers who do not use Ubuntu, so I would not necessarily want to restrict everyone to using the
/tmp directory, especially if their configurations differed slightly. I would prefer everyone use the default location for their installation. Personally, I would also prefer to keep the default directory for general compatibility with other Ubuntu packages; e.g., pgadmin looks at
/var/run/postgresql for a lock file by default.
I have also tried editing
/etc/postgresql/9.3/main/pg_ctl.conf in an attempt to automatically pass set these options whenever I use
# Automatic pg_ctl configuration # This configuration file contains cluster specific options to be passed to # pg_ctl(1). pg_ctl_options = '-o "-c unix_socket_directories=/tmp -c unix_socket_group=jackson -c unix_socket_permissions=0777"'
But that did not have any effect.
Please advise on how I can use
/var/run/postgresql as my
unix_socket_directories option for all of my postgres databases without having to run
sudo chown -R $USER:$USER /var/run/postgresql every time I restart my system. Thanks.