Mac OS X Postgresql: How to start a Postgres server on a Mac

Wow, it had been a long time since I last started Postgres on my Mac computer (a MacBook Pro, to be specific), and it took almost almost 20 minutes to remember how to do it. So, to keep that from happening again, here's a quick tip on how to start Postgres (Postgresql) on a Mac OS X computer.

Step 1: Log in as the postgres user

A long time ago I followed this Apple tutorial on how to install Postgress on a Mac. After I finished that installation, a "postgres" user account was created on my Mac during the installation process.

So, Step 1 of starting Postgres is to open a Terminal window, and switch over to that user account, like this:

su - postgres

After issuing this command, you'll also need to provide the password for the "postgres" user.

Step 2: Issue the startup command

Once you're logged in as the postgres user, you just need to make sure your path includes the Postgres bin directory, and then issue the command to start Postgres. Here's how I include the Postgres bin directory in my path:

export PATH=$PATH:/usr/local/pgsql/bin

And here's the command I use to start the Postgres server:

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start

(As you can see from these commands, the root directory of the Postgres server on my Mac computer is /usr/local/pgsql.)

Bonus: How to create and connect to a Postgresql database

As a quick bonus (and a reminder to myself), here's how you create and then use a Postgres database. First, the command to create a new Postgres database named test:

createdb test

Next, you can connect to this new test database with the following command:

psql test

Note that I'm doing all this without specifying the database user I want to connect as. Postgres is smart enough to see that I'm logged in as the postgres user, and it lets me right in. To demonstrate this, if I switch over to a different Terminal and try to log in from my normal "al" user account, I get the following error message:

prompt> psql test
psql: FATAL:  role "al" does not exist