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!

2 Likes

Great! That’s awesome. Glad it worked!

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

1 Like