[Ruby on Rails] Solution for 'An error occurred while installing pg (1.4.5), and Bundler cannot continue.' [macOS Edition]

Tadashi Shigeoka ·  Thu, December 29, 2022

This article explains how to solve the error message An error occurred while installing pg (1.4.5), and Bundler cannot continue. when running gem install pg on macOS.

Error Message: An error occurred while installing pg (1.4.5), and Bundler cannot continue.

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/pg-1.4.5/ext
/Users/your_username/.asdf/installs/ruby/3.2.0/bin/ruby -I /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0
extconf.rb
Calling libpq with GVL unlocked
checking for pg_config... no
checking for libpq per pkg-config... no
Using libpq from 
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*****************************************************************************

Unable to find PostgreSQL client library.

Please install libpq or postgresql client package like so:
  brew install libpq

or try again with:
  gem install pg -- --with-pg-config=/path/to/pg_config

or set library paths manually with:
  gem install pg -- --with-pg-include=/path/to/libpq-fe.h/ --with-pg-lib=/path/to/libpq.so/

*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
  --with-opt-dir
  --without-opt-dir
  --with-opt-include
  --without-opt-include=${opt-dir}/include
  --with-opt-lib
  --without-opt-lib=${opt-dir}/lib
  --with-make-prog
  --without-make-prog
  --srcdir=.
  --curdir
  --ruby=/Users/your_username/.asdf/installs/ruby/3.2.0/bin/$(RUBY_BASE_NAME)
  --with-pg
  --without-pg
  --enable-gvl-unlock
  --disable-gvl-unlock
  --enable-windows-cross
  --disable-windows-cross
  --with-pg-config
  --without-pg-config
  --with-pg_config
  --without-pg_config
  --with-libpq-dir
  --without-libpq-dir
  --with-libpq-include
  --without-libpq-include=${libpq-dir}/include
  --with-libpq-lib
  --without-libpq-lib=${libpq-dir}/lib
  --with-libpq-config
  --without-libpq-config
  --with-pkg-config
  --without-pkg-config
  --with-pg-dir
  --without-pg-dir
  --with-pg-include
  --without-pg-include=${pg-dir}/include
  --with-pg-lib
  --without-pg-lib=${pg-dir}/lib

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/extensions/arm64-darwin-21/3.2.0/pg-1.4.5/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/pg-1.4.5 for
inspection.
Results logged to
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/extensions/arm64-darwin-21/3.2.0/pg-1.4.5/gem_make.out

  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0/rubygems/ext/builder.rb:102:in `run'
  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0/rubygems/ext/ext_conf_builder.rb:28:in `build'
  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0/rubygems/ext/builder.rb:171:in `build_extension'
  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0/rubygems/ext/builder.rb:205:in `block in build_extensions'
  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0/rubygems/ext/builder.rb:202:in `each'
  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0/rubygems/ext/builder.rb:202:in `build_extensions'
  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/3.2.0/rubygems/installer.rb:843:in `build_extensions'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/rubygems_gem_installer.rb:72:in
`build_extensions'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/rubygems_gem_installer.rb:28:in
`install'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/source/rubygems.rb:207:in
`install'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/installer/gem_installer.rb:54:in
`install'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/installer/gem_installer.rb:16:in
`install_from_spec'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/installer/parallel_installer.rb:186:in
`do_install'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/installer/parallel_installer.rb:177:in
`block in worker_pool'
/Users/tadashi_shigeoka/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/worker.rb:62:in
`apply_func'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/worker.rb:57:in `block
in process_queue'
  /Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/worker.rb:54:in `loop'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/worker.rb:54:in
`process_queue'
/Users/your_username/.asdf/installs/ruby/3.2.0/lib/ruby/gems/3.2.0/gems/bundler-2.3.26/lib/bundler/worker.rb:91:in `block
(2 levels) in create_threads'

An error occurred while installing pg (1.4.5), and Bundler cannot continue.

In Gemfile:
  activerecord-tenant-level-security was resolved to 0.0.1, which depends on
    pg

== Command ["bundle install"] failed ==

Solution: brew install libpq

brew install libpq
echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc

Run bundle install again

bin/setup

Or:

bundle install

If you can successfully gem install pg with these commands, you’re done.

That’s all from the Gemba on solving An error occurred while installing pg (1.4.5), and Bundler cannot continue.