Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tired of creating /run/postgresql and setting read and execute writes after every reboot

I'm running Arch Linux, I installed PostgreSQL as any other arch package. I'm running postgres with a local database located in my user directory. (postgres -D /home/user/data/) When I do so, I get the error FATAL: could not create lock file "/run/postgresql/.s.PGSQL.5432.lock": No such file or directory. Creating the directory /run/postgresql and giving the postgres user access solves this problem

$ sudo mkdir /run/postgresql
$ sudo chmod a+w /run/postgresql

however I'm tired of writing these commands every time I reboot, as /run gets cleared when rebooting. I could write a script to execute these commands, but I feel like I'm doing this the wrong way to begin with. Is there any way I could let postgres create its directory itself, or maybe have it not use /run/postgres for it's lock files in the first place?

like image 764
rusins Avatar asked Oct 20 '25 12:10

rusins


2 Answers

Postgres creates the lock file in /run/postgresql by default.

From the manpage:

  -k directory
          Specifies the directory of the Unix-domain socket on which postgres is
          to listen for connections from client applications. The default  is
          normally  /run/postgresql, but can be changed at build time.

Use -k directory to tell postgres to use a different directory.

Run your command as postgres -k /tmp -D /home/user/data/.

like image 163
alvits Avatar answered Oct 23 '25 02:10

alvits


Solution 1 (By managing temporary directory /run/postgresql, /var/run/postgresql)

Directory /run/postgresql is a temporary directory. Path /var/run/postgresql is usually a symbolic link to /run/postgresql.

systemd-tmpfiles is mechanism to manage such temporary files and directories. systemd-tmpfiles creates temporary directories during boot and sets their owner, group and permissions. It may read configuration files in three different locations. Files in /etc/tmpfiles.d override files with the same name in /usr/lib/tmpfiles.d and /run/tmpfiles.d.

We can create directory /run/postgresql on the fly at boot time using systemd-tmpfiles mechanism by creating postgresql configuration file as below

echo "d /run/postgresql 0755 postgres postgres -" > /usr/lib/tmpfiles.d/postgresql.conf

Solution 2 (By relocating PostgreSQL lock file location)

Another way to fix the issue is to relocate the PostgreSQL lock file location. We can do so by using below query

ALTER SYSTEM SET unix_socket_directories='<any-existing-path-with-valid-permissions>, /tmp';

Here we can provide any path for PostgreSQL lock file which is already present on the system and have required permissions to manage lock files by postgres user.

like image 24
Anil Agrawal Avatar answered Oct 23 '25 02:10

Anil Agrawal