Update: I, and others have subsequently been unable to reproduce the problem below. If you do run into the issue, please let me know in the comments below.
Some of the readers of my blog may be aware that I'm responsible for the PostgreSQL Installers produced by EDB for the PostgreSQL Community. This includes both the Windows and macOS installers, and the now-deprecated Linux installers (use RPMs/DEBs instead)!
Over the weekend I upgraded my laptop to the new Big Sur release from Apple, a.k.a. macOS 11.0. Everything went just fine until I tried to connect to my PostgreSQL 13 development server and found it had failed to startup. I did some digging, and quickly found that there was a permissions problem:
dpage@hal:~$ sudo su - postgres -c '/Library/PostgreSQL/13/bin/postmaster -D/Library/PostgreSQL/13/data'
2020-11-16 16:00:18.544 GMT  FATAL: data directory "/Library/PostgreSQL/13/data" has invalid permissions
2020-11-16 16:00:18.544 GMT  DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
Thankfully that's pretty easy to fix:
sudo chmod 0700 /Library/PostgreSQL/13/data
LaunchDaemon then tried again to start PostgreSQL, and succeeded:
dpage@hal:~$ ps -ef |grep postgres
503 9548 9547 0 4:02pm ?? 0:00.00 postgres: logger
503 9550 9547 0 4:02pm ?? 0:00.00 postgres: checkpointer
503 9551 9547 0 4:02pm ?? 0:00.00 postgres: background writer
503 9552 9547 0 4:02pm ?? 0:00.00 postgres: walwriter
503 9553 9547 0 4:02pm ?? 0:00.00 postgres: autovacuum launcher
503 9554 9547 0 4:02pm ?? 0:00.00 postgres: stats collector
503 9555 9547 0 4:02pm ?? 0:00.00 postgres: logical replication launcher
503 9556 9547 0 4:02pm ?? 0:00.03 postgres: postgres ml ::1(49777) idle
501 9558 9469 0 4:02pm ttys004 0:00.00 grep postgres
So what happened here? It looks like the upgrade process for Big Sur "fixed" the permissions on the data directory to set them to what it thought was appropriate. Unfortunately, the new permissions are considered too broad by PostgreSQL which refuses to start to draw attention to the possible security issue.
Since correcting the permissions I've rebooted my machine and found that they stayed correct, so it's likely this issue happened during the upgrade process, and not as part of the boot process or some other process that periodically "fixes" permissions.
I've also tried installing PostgreSQL 12, and found that a fresh installation works as it should; the installer correctly sets the permissions on the data directory and PostgreSQL happily starts.
So, if you upgrade to Big Sur and PostgreSQL stops working, check that the upgrade process hasn't modified the permissions on the data directory. The directory should look like this:
dpage@hal:~$ ls -al /Library/PostgreSQL/13 | grep data
drwx------ 31 postgres daemon 992 16 Nov 16:02 data
We will be raising this issue with Apple.
New comments are not allowed.