Because pg_dump is used to transfer data to newer versions of PostgreSQL, the output of pg_dump can be expected to load into PostgreSQL server versions newer than pg_dump’s version. pg_dump can also dump from PostgreSQL servers older than its own version. (Currently, servers back to version 9.2 are supported.) However, pg_dump cannot dump from PostgreSQL servers newer than its own major version; it will refuse to even try, rather than risk making an invalid dump. Also, it is not guaranteed that pg_dump’s output can be loaded into a server of an older major version — not even if the dump was taken from a server of that version. Loading a dump file into an older server may require manual editing of the dump file to remove syntax not understood by the older server.
Oops. And I thought I read the PR. Given that I am a native English speaker with a PhD, you’d think I could do better.
No. I can’t, since this is what builds the base image.
So, it looks like my fix is about as good as it gets, though if I were more clever I’d expunge the apt stuff that I pull in with the apt-get update.
I imagine that some others will have this problem, as it’s often hard to convince various humans and systems that you want PG13 rather than something more recent. And it seem like it was a pretty long time ago that someone who knows said that Discourse was working with PG15.
Hi all, I ran into this issue today. The symptom was we’d been getting alerts for 6 days or so that backups were failing, and the key log lines appeared to be:
[2025-06-14 03:30:20] pg_dump: error: aborting because of server version mismatch
[2025-06-14 03:30:20] pg_dump: detail: server version: 16.9; pg_dump version: 15.12 (Debian 15.12-1.pgdg120+1)
I run Discourse on ubuntu running on a digital ocean droplet, using the recommended install guide. But I use Digital Ocean’s Managed Postgres database rather than a postgres container. Looking at my database, it’s running pg 16. I don’t think they upgraded it recently (and I wouldn’t expect a major version upgrade to be automatic anyway), but I’ve emailed their support to double check.
Anyway, my research led me to this page. I wasn’t sure where to put the YAML that @pfaffman posted, so I ran the commands manually, and thought I’d share for anyone else stumbling upon this:
cd /var/discourse
launcher enter app
apt list --installed | grep postgres # to confirm that the version currently installed is 15
This seems to have temporarily fixed the problem, but as @pfaffman has pointed out, I expect that the next time I upgrade discourse, it will revert back to postgresql-client-15, and backups will stop working again, requiring the above manual intervention.
Is there any solution to this issue apart from having to repeat these steps every time I upgrade discourse?
Thanks, but I’m not sure I follow. I’m under the impression that the YAML you mentioned in the original post above was simply a way to reduce the commands from the handful I posted above to a single one, but that you still had to manually run it each time you upgrade discourse. Have I misinterpreted?