mirror of
https://github.com/ubicloud/ubicloud.git
synced 2025-10-06 23:01:56 +08:00
For major version upgrades, we change the boot image to allow running multiple versions of PG simultaneously. For this, we only **download** the relevant packages for all supported PG versions at image generation time. Additionally, the image generation step places the required package list as text files at /usr/local/share/postgresql/packages/#{version}.txt,common.txt. While initializing a new server, we install the required packages by referring to the package list. With the download already completed at image generation time, this step should be fairly quick to allow for quick startup and upgrades. For rolling out this change , we need to ensure all older servers have these files in place.
36 lines
1.3 KiB
Ruby
Executable file
36 lines
1.3 KiB
Ruby
Executable file
#!/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
require_relative "../../common/lib/util"
|
|
require_relative "../lib/postgres_setup"
|
|
|
|
if ARGV.count != 2
|
|
fail "Wrong number of arguments. Expected 2, Given #{ARGV.count}"
|
|
end
|
|
|
|
v = ARGV[0]
|
|
backup_label = ARGV[1]
|
|
|
|
pg_setup = PostgresSetup.new(v)
|
|
pg_setup.install_packages
|
|
pg_setup.setup_data_directory
|
|
|
|
r "sudo -u postgres wal-g backup-fetch /dat/#{v}/data #{backup_label} --config /etc/postgresql/wal-g.env"
|
|
|
|
# We want to use pg_createcluster, even with an existing database folder because
|
|
# pg_createcluster does additonal things like configuring systemd. However, it
|
|
# also expect to see .conf files in the data directory, so that it can move them
|
|
# to /etc/postgresql/$VERSION/main. Thus we create a bunch of .conf files.
|
|
r "sudo -u postgres touch /dat/#{v}/data/pg_ident.conf"
|
|
r "sudo -u postgres touch /dat/#{v}/data/pg_hba.conf"
|
|
r "sudo -u postgres touch /dat/#{v}/data/postgresql.conf"
|
|
|
|
# Technically LATEST label can be used for PITR as well, but we use the label
|
|
# name from backups in PITR case. So backup_label can be used to decide on
|
|
# which signal file to use.
|
|
if backup_label == "LATEST"
|
|
r "sudo -u postgres touch /dat/#{v}/data/standby.signal"
|
|
else
|
|
r "sudo -u postgres touch /dat/#{v}/data/recovery.signal"
|
|
end
|
|
r "pg_createcluster #{v} main"
|