Homebrew: How to Change PostgreSQL Configuration File

Updated: January 28, 2024 By: Guest Contributor Post a comment

Managing a PostgreSQL database server on a MacOS environment often involves using Homebrew, the popular package manager that simplifies the installation and maintenance of software on MacOS. In production environments, tuning a PostgreSQL server to match the hardware and usage patterns of its host can significantly improve performance. This tutorial will walk you through the process of changing your PostgreSQL configuration file using Homebrew.

Understanding PostgreSQL Configuration

PostgreSQL stores its configuration in two main files: postgresql.conf and pg_hba.conf. The postgresql.conf file controls the server settings, while pg_hba.conf deals with client authentication.

First, it’s important to know where Homebrew installs PostgreSQL and its related configuration files:

brew info postgresql

This will output the path where PostgreSQL is installed, as well as the respective configuration fileList.

Finding the Configuration Files

Homebrew typically puts configurations for PostgreSQL into a version-specific database directory within usr/local/var. Locate your PostgreSQL configuration with the following commands:

cd /usr/local/var/postgres
ls -lA

Here, you should see the postgresql.conf file among others. If multiple versions of PostgreSQL are installed, ensure you navigate to the directory of the version you want to configure.

Opening the Configuration File

Before editing the PostgreSQL configuration, back up the original file. You can accomplish this with the cp command:

cp postgresql.conf postgresql.conf.backup

To edit the postgresql.conf file, use your preferred text editor. For example:

vim postgresql.conf

Or:

nano postgresql.conf

Basic Configuration Changes

Lets say you want to change the port on which PostgreSQL listens for connections. Search for the setting named port and modify it:

# - Connection Settings -

port = 5432		# (change requires restart)

Change it to your desired port, say 5433.
Be careful with these edits, as incorrect settings can prevent the server from starting properly.

port = 5433		# (change requires restart)

Advanced Configuration Changes

The performance-related settings in postgresql.conf can be highly specific to your workload. Some common adjustments might include:

  • max_connections: number of simultaneous connections allowed
  • shared_buffers: sets the amount of memory the database server uses for shared memory buffers
  • work_mem: amount of memory used for internal sort operations and hash tables

Modify these settings cautiously:

#DB Performance

max_connections = 200	# (change requires restart)
shared_buffers = 4GB	# (change requires restart)
work_mem = 4MB

Applying the Changes

After editing the configuration file, reload PostgreSQL to apply the changes without restarting the database:

pg_ctl -D /usr/local/var/postgres reload

Advanced Utilities and Custom Scripts

Homebrew users sometimes leverage custom scripts to tailor configuration files for specific environments. For example, you could create a shell script that applies performance templates to postgresql.conf:

#!/bin/bash
CONF="/usr/local/var/postgres/postgresql.conf"
cp $CONF $CONF.backup
sed -i '.bak' 's/^max_connections.*$/max_connections = 100/' $CONF

Tips and Warnings

  • Always backup configuration files before making changes.
  • Use comments in the postgresql.conf file to keep track of custom changes.
  • Restarting the PostgreSQL service is sometimes necessary for certain changes, but can lead to downtime.

Conclusion

Edit the PostgreSQL configuration through Homebrew with care, always backup files, and reload the service to see changes. This fine-tuning can lead to significant performance gains when done correctly.