meta data for this page
This is an old revision of the document!
PostgreSQL & PostGIS
Installing/upgrading to PostgreSQL version 12.x and PostGIS version 3.0.1 on MacOS > High Sierra (10.14.x and higher).
The reason for a manual installation is that I want to utilise the GDAL framework utilised by QGIS and GMT. This setup naturally collides with Homebrew's setup to install GDAL as part of the dependency framework when installing postgis.
I also use the Python.org's Python Frameworks.
Preparation
So I am leaving the dependencies to homebrew apart from GDAL (where I still use William Kyngesbury's formidable GDAL Framework - at v 2.4.1 at time of writing) and Python.org's Python framework distribution - v.3.8.
Compiling PostgreSQL
The documentation to compile from source is available on the Postgresql.org website. Here are the individual commands I use to compile/check:
./configure PYTHON=/Library/Frameworks/Python.framework/Versions/3.x/bin/python3 \\ --with-perl --with-uuid=e2fs --with-python --with-libxml --with-readline --prefix=/usr/local/pgsql/12.2 --with-libraries=/usr/local/Cellar/readline/x.x.x/ make -j24 make check make docs sudo make install -j24
The hint with specifying the Python distribution on the ./configure
call is from the PostgreSQL mailing list. Once the configure script has completed successfully I run:
After an upgrade of the OS it seems that the LaunchDaemon is broken.
Setting up the LaunchDaemon
On their OpenSource pages Apple provides a template for one of the older included PostgreSQL versions (here: 9.0.4). This deviates a bit from what I used previously for the LaunchDaemon file.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <true/> <key>Label</key> <string>org.postgresql.postgres</string> <key>UserName</key> <string>_postgres</string> <key>GroupName</key> <string>_postgres</string> <key>ProgramArguments</key> <array> <string>/usr/bin/postgres</string> <string>-D</string> <string>/var/pgsql</string> <string>-c</string> <string>unix_socket_directory=/var/pgsql_socket</string> <string>-c</string> <string>logging_collector=on</string> <string>-c</string> <string>log_connections=on</string> <string>-c</string> <string>log_lock_waits=on</string> <string>-c</string> <string>log_statement=ddl</string> <string>-c</string> <string>log_line_prefix=%t </string> <string>-c</string> <string>listen_addresses=</string> <string>-c</string> <string>log_directory=/Library/Logs</string> <string>-c</string> <string>log_filename=PostgreSQL.log</string> <string>-c</string> <string>unix_socket_group=_postgres</string> <string>-c</string> <string>unix_socket_permissions=0770</string> </array> <key>OnDemand</key> <false/> </dict> </plist>
Homebrew's distro uses a slightly different version - here's the excerpt from the postgresql.rb file:
def plist; <<~EOS <?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>KeepAlive</key> <true/> <key>Label</key> <string>#{plist_name}</string> <key>ProgramArguments</key> <array> <string>#{opt_bin}/postgres</string> <string>-D</string> <string>#{var}/#{name}</string> </array> <key>RunAtLoad</key> <true/> <key>WorkingDirectory</key> <string>#{HOMEBREW_PREFIX}</string> <key>StandardOutPath</key> <string>#{var}/log/#{name}.log</string> <key>StandardErrorPath</key> <string>#{var}/log/#{name}.log</string> </dict> </plist> EOS end
Starting the new PostgreSQL service
Once the
PostGIS
./configure --prefix=/usr/local/pgsql/x.x/ --with-projdir=/Library/Frameworks/PROJ.framework/unix/ --with-raster --with-topology --with-pgconfig=/usr/local/pgsql/x.x/bin/pg_config --with-geosconfig=/Library/Frameworks/GEOS.framework/unix/bin/geos-config