Trouble updating discourse after some time - UPGRADE OF POSTGRES FAILED

I haven’t upgraded discourse in quite some time and tried to do so today. In my browser at admin/update I get the message that everything is up to date, but it is showing version v2.4.0.beta2 +17 and I understand that the latest version is 3.6.0.beta2.

So I tried updating via terminal using ./launcher rebuild app and the update failed, with the message UPGRADE OF POSTGRES FAILED. I read the support page and followed all instructions there and in similar posts about POSTGRES update issues, but haven’t been able to fix the issue.

I did look at the logs in /var/discourse/shared/standalone/log/var-log/postgres and found repeated error messages, such as this:

2025-11-19 21:42:13.815 GMT [242] LOG: skipping missing configuration file “/shared/postgres_data/postgresql.auto.conf”
2025-11-19 21:42:13.816 UTC [242] FATAL: data directory “/shared/postgres_data” has wrong ownership
2025-11-19 21:42:13.816 UTC [242] HINT: The server must be started by the user that owns the data directory.

One thing I don’t understand is that there is no directory /shared/postgres_data - but rather /shared/standalone/postgres_data.

The error message from terminal is included below. I’d be grateful for any pointers to get the update working.

Thanks,

Nick


Success. You can now start the database server using:



    /usr/lib/postgresql/13/bin/pg_ctl -D /shared/postgres_data_new -l logfile start



Ign:1 
 buster-pgdg InRelease

Ign:2 
 buster/updates InRelease

Err:3 
 buster-pgdg Release

  404  Not Found [IP: 151.101.67.52 80]

Err:4 
 buster/updates Release

  404  Not Found [IP: 151.101.2.132 80]

Ign:5 
 buster InRelease

Ign:6 
 buster-updates InRelease

Err:7 
 buster Release

  404  Not Found [IP: 151.101.2.132 80]

Err:8 
 buster-updates Release

  404  Not Found [IP: 151.101.2.132 80]

Get:9 https://deb.nodesource.com/node_15.x buster InRelease [4,584 B]

Reading package lists...

Reading package lists...

Building dependency tree...

Reading state information...

The following additional packages will be installed:

  postgresql-client-10

Suggested packages:

  postgresql-doc-10

The following NEW packages will be installed:

  postgresql-10 postgresql-client-10

0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.

Need to get 6,441 kB of archives.

After this operation, 30.6 MB of additional disk space will be used.

Err:1 
 buster-pgdg/main amd64 postgresql-client-10 amd64 10.17-1.pgdg100+1

  404  Not Found [IP: 151.101.195.52 80]

Err:2 
 buster-pgdg/main amd64 postgresql-10 amd64 10.17-1.pgdg100+1

  404  Not Found [IP: 151.101.195.52 80]

Stopping PostgreSQL 13 database server: main.



check for "/usr/lib/postgresql/10/bin" failed: No such file or directory



Failure, exiting

-------------------------------------------------------------------------------------

UPGRADE OF POSTGRES FAILED



Please visit 
 for support.



You can run ./launcher start app to restart your app in the meanwhile



FAILED

--------------------

Pups::ExecError: /root/upgrade_postgres failed with return #<Process::Status: pid 50 exit 1>

Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'

exec failed with the params "/root/upgrade_postgres"

9f400ba2cca88f79359496e95027cf26c2d5a3672837c5594793cf723585407b

** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.

./discourse-doctor may help diagnose the problem.

YOu need to rebuild at the command line, twice. See PostgreSQL 15 update

Hmm. It’s possible that you have a non-standard bind in your app.yml. Your OS is almost certainly out of date too. I recommend moving to a new VM and restoring the database there. See Move a Discourse site to another VPS with rsync.

Don’t copy the database. It’s easier to restore a backup.

Thanks for your reply Jay. OK, I have created a new VM and followed the steps in the article under Prepare new VPS. Now I am not sure what to do - do I continue to the steps under Copy files to new VPS? I wondering whether I’m doing a fresh install of discourse and then restoring the database from the old installation, or copying the discourse files over from the old installation? I’m thinking that if I just copy over the discourse files from the old VM then the issues might be replicated on the new VM, but probably I am misunderstanding something.

Since it’s so old, I think I’d recommend just doing a clean install and copying only the backup to the new server.

  • backup old site
  • rsync -rav oldsite:/var/discourse/shared/backups /var/discourse/shared/
  • switch DNS to new server
  • ./discourse-setup (get your SMTP values from the old app.yml) on new server
  • ./launcher enter app
  • discourse backup (this will create the default backup directory with the right permissions)
  • discourse enable_restore
  • discourse restore (this will print the available backups)
  • copy-paste the restore command

A more complicated version would be to rsync everything except the database like this:

rsync -rav --numeric-ids OLD-IP:/var/discourse/shared/ /var/discourse/shared/ --exclude log --exclude postgres_* --exclude redis_data --exclude letsencrypt --exclude ssl --exclude log --exclude tmp --exclude state

Thanks again Jay. I have managed to do a fresh install of discourse and restore the backup from the old VM using your instructions and all seems to be working well. Must remember to update more often!

Great! That’s awesome. Glad it worked!

If my post was the solution, please click the :check_mark: so that the topic gets closed.