Commit ac3b9626 authored by Tom Lane's avatar Tom Lane

Provide modern examples of how to auto-start Postgres on macOS.

The scripts in contrib/start-scripts/osx don't work at all on macOS
10.10 (Yosemite) or later, because they depend on SystemStarter which
Apple deprecated long ago and removed in 10.10.  Add a new subdirectory
contrib/start-scripts/macos with scripts that use the newer launchd
infrastructure.

Since this problem is independent of which Postgres version you're using,
back-patch to all supported branches.

Discussion: https://postgr.es/m/31338.1510763554@sss.pgh.pa.us
parent e87d4965
To make macOS automatically launch your PostgreSQL server at system start,
do the following:
1. Edit the postgres-wrapper.sh script and adjust the file path
variables at its start to reflect where you have installed Postgres,
if that's not /usr/local/pgsql.
2. Copy the modified postgres-wrapper.sh script into some suitable
installation directory. It can be, but doesn't have to be, where
you keep the Postgres executables themselves.
3. Edit the org.postgresql.postgres.plist file and adjust its path
for postgres-wrapper.sh to match what you did in step 2. Also,
if you plan to run the Postgres server under some user name other
than "postgres", adjust the UserName parameter value for that.
4. Copy the modified org.postgresql.postgres.plist file into
/Library/LaunchDaemons/. You must do this as root:
sudo cp org.postgresql.postgres.plist /Library/LaunchDaemons
because the file will be ignored if it is not root-owned.
At this point a reboot should launch the server. But if you want
to test it without rebooting, you can do
sudo launchctl load /Library/LaunchDaemons/org.postgresql.postgres.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.postgresql.postgres</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/pgsql/bin/postgres-wrapper.sh</string>
</array>
<key>UserName</key>
<string>postgres</string>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
#!/bin/sh
# PostgreSQL server start script (launched by org.postgresql.postgres.plist)
# edit these as needed:
# directory containing postgres executable:
PGBINDIR="/usr/local/pgsql/bin"
# data directory:
PGDATA="/usr/local/pgsql/data"
# file to receive postmaster's initial log messages:
PGLOGFILE="${PGDATA}/pgstart.log"
# (it's recommendable to enable the Postgres logging_collector feature
# so that PGLOGFILE doesn't grow without bound)
# set umask to ensure PGLOGFILE is not created world-readable
umask 077
# wait for networking to be up (else server may not bind to desired ports)
/usr/sbin/ipconfig waitall
# and launch the server
exec "$PGBINDIR"/postgres -D "$PGDATA" >>"$PGLOGFILE" 2>&1
The scripts in this directory are for use with Apple's SystemStarter
infrastructure, which is deprecated since macOS 10.4 and is gone entirely
as of 10.10. You should use the scripts in ../macos instead, unless
you are using a macOS release too old to have launchd.
To install execute the following:
sudo /bin/sh ./install.sh
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment