Skip to content

Instantly share code, notes, and snippets.

@doole
Last active September 21, 2023 19:12
Show Gist options
  • Save doole/8651341 to your computer and use it in GitHub Desktop.
Save doole/8651341 to your computer and use it in GitHub Desktop.
Install PostgreSQL PHP extensions on Mac OS X
#!/bin/bash
# Install Xcode Command Line Tools first (required)
xcode-select --install
# Check PHP version `php --version`
PHP_VER=$(php -v | head -1 | awk '{ print $2 }')
# Extensions directory (default: empty string)
EXT_DIR=""
# Postgres.app < 9.3.5.0
#PG_APP="/Applications/Postgres.app/Contents/MacOS"
# Postgres.app >= 9.3.5.0 (check currently installed version first!)
PG_VER="9.5"
PG_APP="/Applications/Postgres.app/Contents/Versions/$PG_VER"
# El Capitan / Sierra workaround
if [ $(uname -r | head -c2) > 14 ]; then
EXT_DIR=/usr/local/lib/php/extensions/
mkdir -p $EXT_DIR
fi
# Check if extension exists first
php -m | grep pgsql
# Update brew and install requirements
brew update
brew install autoconf
# Download PHP source and extract
mkdir -p ~/src && cd ~/src
curl -O http://php.net/distributions/php-$PHP_VER.tar.bz2
tar -xjf php-$PHP_VER.tar.bz2
# Go to extension dir and phpize
cd ~/src/php-$PHP_VER/ext/pdo_pgsql/
phpize
# Configure for Postgress.app or just use `./configure` for the brew version
./configure --with-pdo-pgsql=$PG_APP
make
# El Capitan / Sierra workaround
if [ $(uname -r | head -c2) > 14 ]; then
cp ./modules/pdo_pgsql.so $EXT_DIR
else
sudo make install
fi
echo "extension=${EXT_DIR}pdo_pgsql.so" | sudo tee -a /private/etc/php.ini
# Go to extension dir and phpize
cd ~/src/php-$PHP_VER/ext/pgsql/
phpize
# Configure for Postgress.app or just use `./configure` for the brew version
./configure --with-pgsql=$PG_APP
make
# El Capitan / Sierra workaround
if [ $(uname -r | head -c2) > 14 ]; then
cp ./modules/pgsql.so $EXT_DIR
else
sudo make install
fi
echo "extension=${EXT_DIR}pgsql.so" | sudo tee -a /private/etc/php.ini
# Check if extension exists, again
php -m | grep pgsql
# Cleanup
rm -rf ~/src/php-$PHP_VER/
@onlyjazz
Copy link

Note that on OS/X the location of the php.ini for the Web application and for the php command line is different -

On OS/X Yosemite:

/usr/local/php5/lib/php.ini - php.ini for the Web app
/usr/local/etc/php/7.1/php.ini - php.ini for the php command line (if you are using php 7.1 YMMV)
If you are using Postgres you will need to specify the location of the pdo_pgsql extension like:
extension="/usr/local/php/extensions/pdo_pgsql.so" (again YMMV depending on your system)

@mattjis
Copy link

mattjis commented May 20, 2020

xcode-select: error: command line tools are already installed, use "Software Update" to install updates
pdo_pgsql
pgsql
Already up-to-date.
Warning: autoconf 2.69 is already installed and up-to-date
To reinstall 2.69, run `brew reinstall autoconf`
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   177  100   177    0     0    264      0 --:--:-- --:--:-- --:--:--   264
tar: Unrecognized archive format
tar: Error exit delayed from previous errors.
/Users/mattijs/Downloads/8651341-0606545a4db1820cf127755505d0d35a186a6827/install_psql_php.sh: line 37: cd: /Users/mattijs/src/php-7.1.23/ext/pdo_pgsql/: No such file or directory
Cannot find config.m4. 
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module

/Users/mattijs/Downloads/8651341-0606545a4db1820cf127755505d0d35a186a6827/install_psql_php.sh: line 41: ./configure: No such file or directory
make: *** No targets specified and no makefile found.  Stop.
cp: ./modules/pdo_pgsql.so: No such file or directory
Password:
extension=/usr/local/lib/php/extensions/pdo_pgsql.so
/Users/mattijs/Downloads/8651341-0606545a4db1820cf127755505d0d35a186a6827/install_psql_php.sh: line 53: cd: /Users/mattijs/src/php-7.1.23/ext/pgsql/: No such file or directory
Cannot find config.m4. 
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module

/Users/mattijs/Downloads/8651341-0606545a4db1820cf127755505d0d35a186a6827/install_psql_php.sh: line 57: ./configure: No such file or directory
make: *** No targets specified and no makefile found.  Stop.
cp: ./modules/pgsql.so: No such file or directory
extension=/usr/local/lib/php/extensions/pgsql.so
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/pdo_pgsql.so' - dlopen(/usr/local/lib/php/extensions/pdo_pgsql.so, 0x0009): dlopen(): file not found: /usr/local/lib/php/extensions/pdo_pgsql.so in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/pgsql.so' - dlopen(/usr/local/lib/php/extensions/pgsql.so, 0x0009): dlopen(): file not found: /usr/local/lib/php/extensions/pgsql.so in Unknown on line 0
pdo_pgsql
pgsql
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...9 completed.

[Process completed]

@doole
Copy link
Author

doole commented May 20, 2020

@mattjis since macOS High Sierra pgsql is included in the standard PHP instalation, so you don't need this workaround anymore.

If you take a look at your log, lines 2 and 3 show that you actually have pdo_pgsql and pgsql installed [from here]. Check yourself by typing php -m | grep pgsql or php --info | grep PostgreSQL in console.

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