Problems You Might Run Into Upgrading PostgreSQL on Fedora

23 Aug 2017 - python

I was trying to test some code today and I realized I need a working PostgreSQL server. When I tried to start the server, it failed with this error.

Aug 23 15:36:10 athena systemd[1]: Starting PostgreSQL database server...
Aug 23 15:36:10 athena postgresql-check-db-dir[20713]: An old version of the database format was found.
Aug 23 15:36:10 athena postgresql-check-db-dir[20713]: Use 'postgresql-setup --upgrade' to upgrade to version '9.6'
Aug 23 15:36:10 athena postgresql-check-db-dir[20713]: See /usr/share/doc/postgresql/README.rpm-dist for more information.
Aug 23 15:36:10 athena systemd[1]: postgresql.service: Control process exited, code=exited status=1
Aug 23 15:36:10 athena systemd[1]: Failed to start PostgreSQL database server.
Aug 23 15:36:10 athena systemd[1]: postgresql.service: Unit entered failed state.
Aug 23 15:36:10 athena systemd[1]: postgresql.service: Failed with result 'exit-code'.

Ah, I upgraded to F26 recently and I suppose that came with a new version of PostgreSQL. I figured fixing this should be trivial. Well, not exactly. When I first ran the command, it asked me to install the postgresql-upgrade package. Once I did install it, the command threw a strange error.

[root@athena pgsql]# postgresql-setup --upgrade
 * Upgrading database.
ERROR: The pidfile '/var/lib/pgsql/data-old/postmaster.pid' exists.  Verify that there is no postmaster
       running the /var/lib/pgsql/data-old directory.
ERROR: Upgrade failed.
 * See /var/lib/pgsql/upgrade_postgresql.log for details.

The /var/lib/pgsql/data-old/postmaster.pid file doesn’t even exist. It took me some time to realize that it’s actually looking at /var/lib/pgsql/data/postmaster.pid, which does exist. I think at some point, I had a running PostgreSQL server and I didn’t shutdown the computer cleanly. This lead to a stale PID file. Once I renamed the PID file, the upgrade command worked.