Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
postgres 9.1.6 homebrew formula
require 'formula'
class Postgresql < Formula
homepage ''
url ''
sha1 'a24b7c002463572ee7371f055e566b69e39cda3e'
depends_on 'readline'
depends_on 'libxml2' if MacOS.leopard? # Leopard libxml is too old
depends_on 'ossp-uuid' unless build.include? 'without-ossp-uuid'
option '32-bit'
option 'without-ossp-uuid', 'Build without OSSP uuid'
option 'no-python', 'Build without Python support'
option 'no-perl', 'Build without Perl support'
option 'enable-dtrace', 'Build with DTrace support'
skip_clean :all
# Fix PL/Python build:
# Fix uuid-ossp build issues:
def patches
def install
ENV.libxml2 if MacOS.snow_leopard?
args = ["--disable-debug",
args << "--with-ossp-uuid" unless build.include? 'without-ossp-uuid'
args << "--with-python" unless build.include? 'no-python'
args << "--with-perl" unless build.include? 'no-perl'
args << "--enable-dtrace" if build.include? 'enable-dtrace'
unless build.include? 'without-ossp-uuid'
ENV.append 'CFLAGS', `uuid-config --cflags`.strip
ENV.append 'LDFLAGS', `uuid-config --ldflags`.strip
ENV.append 'LIBS', `uuid-config --libs`.strip
if not build.build_32_bit? and MacOS.prefer_64_bit? and not build.include? 'no-python'
args << "ARCHFLAGS='-arch x86_64'"
if build.build_32_bit?
ENV.append 'CFLAGS', '-arch i386'
ENV.append 'LDFLAGS', '-arch i386'
# Fails on Core Duo with O4 and O3
ENV.O2 if Hardware.intel_family == :core
system "./configure", *args
system "make install-world"
plist_path.write startup_plist
plist_path.chmod 0644
def check_python_arch
# On 64-bit systems, we need to look for a 32-bit Framework Python.
# The configure script prefers this Python version, and if it doesn't
# have 64-bit support then linking will fail.
framework_python = "/Library/Frameworks/Python.framework/Versions/Current/Python"
return unless framework_python.exist?
unless (archs_for_command framework_python).include? :x86_64
opoo "Detected a framework Python that does not have 64-bit support in:"
puts <<-EOS.undent
The configure script seems to prefer this version of Python over any others,
so you may experience linker problems as described in:
To fix this issue, you may need to either delete the version of Python
shown above, or move it out of the way before brewing PostgreSQL.
Note that a framework Python in /Library/Frameworks/Python.framework is
the "MacPython" version, and not the system-provided version which is in:
def caveats
s = <<-EOS
# Build Notes
If builds of PostgreSQL 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
To build plpython against a specific Python, set PYTHON prior to brewing:
PYTHON=/usr/local/bin/python brew install postgresql
# Create/Upgrade a Database
If this is your first install, create a database with:
initdb #{var}/postgres -E utf8
To migrate existing data from a previous major version (pre-9.1) of PostgreSQL, see:
# Start/Stop PostgreSQL
If this is your first install, automatically load on login with:
mkdir -p ~/Library/LaunchAgents
cp #{plist_path} ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/#{plist_path.basename}
If this is an upgrade and you already have the #{plist_path.basename} loaded:
launchctl unload -w ~/Library/LaunchAgents/#{plist_path.basename}
cp #{plist_path} ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/#{plist_path.basename}
Or start manually with:
pg_ctl -D #{var}/postgres -l #{var}/postgres/server.log start
And stop with:
pg_ctl -D #{var}/postgres stop -s -m fast
# Loading Extensions
By default, Homebrew builds all available Contrib extensions. To see a list of all
available extensions, from the psql command line, run:
SELECT * FROM pg_available_extensions;
To load any of the extension names, navigate to the desired database and run:
CREATE EXTENSION [extension name];
For instance, to load the tablefunc extension in the current database, run:
For more information on the CREATE EXTENSION command, see:
For more information on extensions, see:
# Other
Some machines may require provisioning of shared memory:
if MacOS.prefer_64_bit? then
s << <<-EOS
To install postgresql (and ossp-uuid) in 32-bit mode:
brew install postgresql --32-bit
If you want to install the postgres gem, including ARCHFLAGS is recommended:
env ARCHFLAGS="-arch x86_64" gem install pg
To install gems without sudo, see the Homebrew wiki.
return s
def startup_plist
return <<-EOPLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">
--- a/src/pl/plpython/Makefile 2011-09-23 08:03:52.000000000 +1000
+++ b/src/pl/plpython/Makefile 2011-10-26 21:43:40.000000000 +1100
@@ -24,8 +24,6 @@
# Darwin (OS X) has its own ideas about how to do this.
ifeq ($(PORTNAME), darwin)
shared_libpython = yes
-override python_libspec = -framework Python
-override python_additional_libs =
# If we don't have a shared library and the platform doesn't allow it
--- a/contrib/uuid-ossp/uuid-ossp.c 2012-07-30 18:34:53.000000000 -0700
+++ b/contrib/uuid-ossp/uuid-ossp.c 2012-07-30 18:35:03.000000000 -0700
@@ -9,6 +9,8 @@
+#define _XOPEN_SOURCE
#include "postgres.h"
#include "fmgr.h"
#include "utils/builtins.h"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.