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.
Neither 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 unix_socket_directories
to /tmp
in ./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 pg_ctl
:
# 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.