From 15ce19792aff0368c6a1132420c40950f7a18577 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Thu, 19 Mar 2015 16:12:44 +0100 Subject: postgresql-setup: upgrade & avoid running old server * postgresql-setup.in (upgrade): Call old_data_in_use to ensure that the old database server is not running. (old_data_in_use): New function. ($cleaup): Rename to $failure_cleanup. * NEWS: Document. --- NEWS | 5 +++++ postgresql-setup.in | 22 +++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index c519397..20240df 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,10 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +New in 3.1 version + +* When doing --upgrade, postgresql-setup now guards against upgrading when + the old postgresql server is still running. + Bugfixes in 3.1 version * The 'pg_upgrade --link' option is not used for non-in-place upgrades diff --git a/postgresql-setup.in b/postgresql-setup.in index 8b30d71..fd1bef2 100644 --- a/postgresql-setup.in +++ b/postgresql-setup.in @@ -175,6 +175,15 @@ initdb() } +old_data_in_use() +{ + local pidfile="$pgdataold/postmaster.pid" + test -f "$pidfile" || return 1 + error $"The pidfile '$pidfile' exists. Verify that there is no postmaster" + error_q $"running the $pgdataold directory." +} + + upgrade() { local inplace=false @@ -245,13 +254,16 @@ upgrade() pghost_override="PGHOST='$upgradefrom_pghost_override'" } - local cleanup=true - - if ! check_not_initialized; then + local failure_cleanup=true + if old_data_in_use; then + script_result=1 + # Cleanup makes sense once perform_initdb gets called. + failure_cleanup=false + elif ! check_not_initialized; then # Don't try to re-init initialized data directory and also do not # remove it after this unsuccessful upgrade. - cleanup=false script_result=1 + failure_cleanup=false elif perform_initdb; then $inplace && link_option=--link @@ -292,7 +304,7 @@ upgrade() warn $pgdataold. else # Clean up after failure. - $cleanup && rm -rf "$pgdata" + $failure_cleanup && rm -rf "$pgdata" $inplace && mv "$pgdataold" "$pgdata" error $"Upgrade failed." fi -- cgit