Starting PostgreSQL 8.3 through launchd on Mac OS X 10.5.1 Leopard

Based upon a couple of other blogs that I’ve found on the web, I now finally have a working .plist file to start PostgreSQL 8.3 via launchd at boot time on Leopard.

This is what the file looks like:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">
      <string>PostgreSQL Server</string>

Make sure that this file is in /Library/LaunchDaemons. I named it ‘org.postgresql.postgres.plist’.

Run these commands in Terminal:

   sudo chown root /Library/LaunchDaemons/org.postgresql.postgres.plist

   sudo launchctl load /Library/LaunchDaemons/org.postgresql.postgres.plist

Other notes for compiling and installing PostgreSQL 8.3 from source on Leopard:

  • I manually added a user “postgres” using the user preference pane.
  • On OS X, you will use ‘make’ instead of ‘gmake’ (as far as I can tell, it’s actually the same thing).
  • The ‘su’ thing does not work as documented in the PostgreSQL 8.3 INSTALL file. You can use ‘sudo -s’ to switch to a root shell, or you can just prefix the commands with ‘sudo’ to run them with super user privileges. However, when you are in a root shell after ‘sudo -s’, the ‘su – postgres’ command will work.
  • As you can see above, I created my database directory in /PostgreSQL. Do whatever you want on your system, just make sure that the user ‘postgres’ is the owner of that directory, as documented.
  • I did a lot of ‘ln -s’ to create symbolic links for the stuff in /usr/local/pgsql/bin’ in ‘/usr/local/bin’, so that calling all PostgreSQL commands and tools like psql works without having to provide a path. There’s probably a much more efficient way for this, but I have not dug into it yet.

For the BlitzMax folks out there that use Brucey’s PostgreSQL module:

  • Copy /usr/local/pgsql/lib/libpq.a to /Applications/BlitzMax/mod/bah.mod/dbpostgresql.mod/lib.
  • The easiest way to try the module with your current user account might be to create a database for your user in Terminal:
  • createuser <username>
  • createdb <username>
  • Change the connection parameters in the source code. If you don’t assign a password to your database user account, just pass an empty string (“”) in the LoadDatabase() call. In my case, it looks like this:
  • Local db:TDBConnection = LoadDatabase(“POSTGRESQL”, “Winni”, Null, 0, “Winni”, “”)