brew-postgresql-upgrade-database: fix locale issues (#47123)

Now all locale and encoding settings are migrated properly.

Also ensure that the old server is not running via `brew services`.

Fixes #47110.
This commit is contained in:
Bo Anderson 2019-11-25 19:47:36 +00:00 committed by GitHub
parent 2760cae350
commit 992e817c65
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -57,18 +57,38 @@ begin
server_stopped = true
end
# Shut down old server if it is up via brew services
if /#{old_pg_name}\s+started/.match?(Utils.popen_read("brew", "services", "list"))
system "brew", "services", "stop", old_pg_name
end
# get 'lc_collate' from old DB"
unless quiet_system "#{old_bin}/pg_ctl", "-w", "-D", datadir, "status"
system "#{old_bin}/pg_ctl", "-w", "-D", datadir, "start"
end
sql_for_lc_collate = "SELECT setting FROM pg_settings WHERE name LIKE 'lc_collate';"
sql_for_lc_ctype = "SELECT setting FROM pg_settings WHERE name LIKE 'lc_ctype';"
lc_collate = Utils.popen_read("#{old_bin}/psql", "postgres", "-qtAX", "-U", ENV["USER"], "-c", sql_for_lc_collate).strip
lc_ctype = Utils.popen_read("#{old_bin}/psql", "postgres", "-qtAX", "-U", ENV["USER"], "-c", sql_for_lc_ctype).strip
initdb_args = []
initdb_args += ["--lc-collate", lc_collate] unless lc_collate.empty?
initdb_args += ["--lc-ctype", lc_ctype] unless lc_ctype.empty?
locale_settings = %w[
lc_collate
lc_ctype
lc_messages
lc_monetary
lc_numeric
lc_time
server_encoding
]
locale_settings.each do |setting|
sql = "SELECT setting FROM pg_settings WHERE name LIKE '#{setting}';"
value = Utils.popen_read("#{old_bin}/psql", "postgres", "-qtAX", "-U", ENV["USER"], "-c", sql).strip
next if value.empty?
if setting == "server_encoding"
initdb_args += ["-E #{value}"]
else
initdb_args += ["--#{setting.tr!("_", "-")}=#{value}"]
end
end
if quiet_system "#{old_bin}/pg_ctl", "-w", "-D", datadir, "status"
system "#{old_bin}/pg_ctl", "-w", "-D", datadir, "stop"
@ -79,9 +99,11 @@ begin
moved_data = true
(var/"postgres").mkpath
ohai "Creating database..."
safe_system "#{bin}/initdb", *initdb_args, "#{var}/postgres"
initdb_run = true
ohai "Migrating and upgrading data..."
(var/"log").cd do
safe_system "#{bin}/pg_upgrade",
"-r",