I found this great article that got me started https://ivdl.co.za/2023/08/16/upgrading-from-postgresql-14-to-15-installed-with-homebrew-on-an-apple-silicon-mac/ only problem was that I was getting an error when referencing the postgresql@15
part so had to change that.
Upgrading from Postgres 14 to 15
Following the article we first have to install postgresql@15
with brew install postgresql@15
.
Then made sure that neither 14 or 15 were running
brew services stop postgresql@14
& brew services stop postgresql@15
The next part is where I have problems with the command shown in the article.
# DO NOT RUN THIS
/opt/homebrew/Cellar/postgresql@15/15.4/bin/pg_upgrade -b /opt/homebrew/Cellar/postgresql@14/14.9/bin -d postgresql@14 -B /opt/homebrew/Cellar/postgresql@15/15.4/bin -D postgresql@15
I got a permission error to do with postgresql@15
🤷♂️
Running brew info postgresql@15
I found a path for postgresql@15
...
This formula has created a default database cluster with:
initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@15
...
I replaced postgresql@15
with /opt/homebrew/var/postgresql@15
and did the same with postgresql@14
to come up with the following command
/opt/homebrew/Cellar/postgresql@15/15.4/bin/pg_upgrade --old-bindir /opt/homebrew/Cellar/postgresql@14/14.9/bin --old-datadir /opt/homebrew/var/postgresql@14 --new-bindir /opt/homebrew/Cellar/postgresql@15/15.4/bin --new-datadir /opt/homebrew/var/postgresql@15
This worked perfectly. I think we could use the brew info
to build this command on any machine (I think Apple Intel installs will be different)
After this, we run brew services start postgresql@15
and check that our databases are available 👌
Upgrading from Postgres 15 to 16
We follow the same process as above. Install postgresql@16
, brew install postgresql@16
.
Stop 15 and 16, brew services stop postgresql@15
& brew services stop postgresql@16
Then upgrade,
/opt/homebrew/Cellar/postgresql@16/16.0/bin/pg_upgrade --old-bindir /opt/homebrew/Cellar/postgresql@15/15.4/bin --old-datadir /opt/homebrew/var/postgresql@15 --new-bindir /opt/homebrew/Cellar/postgresql@16/16.0/bin --new-datadir /opt/homebrew/var/postgresql@16
Start postgresql@16
, brew services start postgresql@16
and check our databases 🚀
Upgrading from Postgres 16 to 17
We follow the same process as above. Install postgresql@17
, brew install postgresql@17
.
Stop 16 and 17, brew services stop postgresql@16
& brew services stop postgresql@17
Then upgrade,
/opt/homebrew/Cellar/postgresql@17/17.0_2/bin/pg_upgrade --old-bindir /opt/homebrew/Cellar/postgresql@16/16.4_2/bin --old-datadir /opt/homebrew/var/postgresql@16 --new-bindir /opt/homebrew/Cellar/postgresql@17/17.0_2/bin --new-datadir /opt/homebrew/var/postgresql@17
Start postgresql@17
, brew services start postgresql@17
and check our databases 🚀
Also run /opt/homebrew/Cellar/postgresql@17/17.0_2/bin/vacuumdb --all --analyze-in-stages
Other bits
pg
gem
gem uninstall pg
and then bundle install
from a Rails project or gem install pg
- you want to see it building with native extensions 👌
pg_dump
and pg_config
brew link --force libpq