I’m currently struggling with upgrading some Postgres DBs on my home-k3s and I’m seriously considering throwing it all away since it’s such a hassle.

So, how do you handle DBs? K8s? Just a regular daemon?

  • AggressivelyPassiveOP
    link
    fedilink
    English
    11 year ago

    It’s about PostgreSQL upgrade.

    The “pattern” there is to either dump and reinsert the entire DB or upgrade by having two installations (old and new version), which doesn’t exactly work well in k8s. It’s possible, but seems hacky

    • @bigredgiraffe
      link
      English
      41 year ago

      I can’t think of any situation other than maybe wanting to get better indexing or changing the storage engine that I would need to re-create and re-insert that way so I’m not sure if you have a constraint that necessitates that or not but now I’m curious and I am always curious to find new or better methods so why do you do it that way?

      At home to upgrade Postgres I would just make a temporary copy the data directory as a backup and then just change the version of the container and if it’s needed run pg_upgrade as jobs in kubernetes.

      In a work environment there is more likely to be clustering involved so the upgrade path depends on that but it’s similar but there really isn’t a need to re-create the data, the new version starts with the same PVCs using whatever rollout strategy applies. Major version upgrades can sometimes require extra steps but the engine is almost always backwards compatible at least several versions.

    • @[email protected]
      link
      fedilink
      English
      41 year ago

      I’ve always used this docker image to do pg upgrades. It runs pg_upgrade to recreate the system tables and copy the user tables (which normally don’t have any storage changes). It does require that the database isn’t running during the upgrade so you’re going to have a bit of downtime. Make sure you redo any changes to any configuration files, especially pg_hba.conf