Skip to content

Instantly share code, notes, and snippets.

@DrTom
Last active July 26, 2024 07:51
Show Gist options
  • Save DrTom/4f2edcac26a0eae82360dbc9b18dd82c to your computer and use it in GitHub Desktop.
Save DrTom/4f2edcac26a0eae82360dbc9b18dd82c to your computer and use it in GitHub Desktop.
MacPort PostgreSQL setup

PostgreSQL Server Setup on Mac OS with MacPorts

This is in particular aimed at using multiple versions of PostgreSQL at different ports.

export VERSION=15

Install

port info postgresql${VERSION}-server
port install postgresql${VERSION}-server

Initial Setup

sudo mkdir -p /opt/local/var/db/postgresql${VERSION}/defaultdb
sudo chown postgres:postgres /opt/local/var/db/postgresql${VERSION}/defaultdb
sudo su postgres -c 'cd /opt/local/var/db/postgresql${VERSION} && /opt/local/lib/postgresql15/bin/initdb -D /opt/local/var/db/postgresql15/defaultdb'

change the port in /opt/local/var/db/postgresql${VERSION}/defaultdb/postgresql.conf

our|my convention is to use "54${VERSION}", currently 5415

Starting manually / Troubleshooting

as user postgres, e.g. sudo -i -u postgres

/opt/local/lib/postgresql${VERSION}/bin/pg_ctl -D /opt/local/var/db/postgresql${VERSION}/defaultdb start -l /opt/local/var/log/postgresql${VERSION}/postgres.log

Add User

initially also as user postgres

CREATE USER tom WITH SUPERUSER LOGIN PASSWORD 'tom';
CREATE DATABASE tom owner tom

My bash Config

# POSTGRESQL ##################################################################

function pg_env_set(){
  if [ -z $1 ]; then
    export PGVERSION=$1
  else
    export PGVERSION=${1:-"15"}
  fi

  if shopt -q login_shell; then
     save_echo "SETTING UP POSTGRES ENVIRONMENT FOR VERSION ${PGVERSION}"
  fi

  export POSTGRESQL="/opt/local/lib/postgresql${PGVERSION}"


  case $PGVERSION in
    *)
      export PGPORT="54${PGVERSION}"
      ;;
  esac
  export PATH="$POSTGRESQL/bin:$PATH"
  export PGUSER="tom"
  export PGPASSWORD="tom"
  export PGPIDNAME="pid"

}

function pg_start(){
  sudo -i -u postgres /opt/local/lib/postgresql${PGVERSION}/bin/pg_ctl \
    -D /opt/local/var/db/postgresql${PGVERSION}/defaultdb \
    -l /opt/local/var/log/postgresql${PGVERSION}/postgres.log \
    start
}

function pg_stop(){
  set -euo pipefail
  sudo -u postgres /opt/local/lib/postgresql${PGVERSION}/bin/pg_ctl \
    -D /opt/local/var/db/postgresql${PGVERSION}/defaultdb \
    stop
}

pg_env_set 15


# END POSTGRESQL ##############################################################
@syam-nd
Copy link

syam-nd commented Oct 21, 2023

@DrTom Thanks for taking time to document this. I would like to point out a typo in 'Install' section. You missed out on 'l' in 'port install postgresq${VERSION}-server'

@DrTom
Copy link
Author

DrTom commented Oct 21, 2023

@DrTom Thanks for taking time to document this. I would like to point out a typo in 'Install' section. You missed out on 'l' in 'port install postgresq${VERSION}-server'

fixed, thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment