Postgresql

PostgreSQL 次要版本升級期間失去數據

  • June 29, 2018

我在 MacOS 上安裝了 PostgreSQL 9.4.5,這是使用 Homebrew 完成的。我想將它更新到 9.4 的最新次要版本,所以我這樣做了(如果我沒記錯的話):

brew uninstall postgresql
brew install postgresql@9.4

它可以很好地安裝 PostgreSQL 9.4.17,但是在此過程中我似乎失去了所有數據。我看到initdb是在某一點執行,是什麼導致了刪除?

注意:它不是生產數據庫,所以沒有真正失去,但是我對這個結果感到驚訝,所以我想知道原因。

事實上,你不應該解除安裝它並重新安裝它,因為 PostgreSQLinitdb從頭開始一個新的數據庫儲存,因此是空的。

順便說一句,您的數據可能仍然存在,但在另一個舊目錄中。例如,請參閱這篇文章(https://keita.blog/2016/01/09/homebrew-and-postgresql-9-5/),它顯示了 9.4 和 9.5 之間的升級,但它可能以相同的方式適用於您的情況.

如果您查看PostgreSQL 公式,您可以看到:

def post_install
   (var/"log").mkpath
   (var/name).mkpath
   unless File.exist? "#{var}/#{name}/PG_VERSION"
     system "#{bin}/initdb", "#{var}/#{name}"
   end
end

所以initdb只有在目錄尚未填充時才應呼叫,因此在您的情況下,數據庫剛剛在一個新目錄中初始化,為空,而您的數據仍在另一個目錄中。

但最近情況發生了變化。

2018 年 1 月 19 日發布的Homebrew 1.5在其變更日誌中包含以下內容:

brew postgresql-upgrade-database 是一個新命令,用於簡化在主要版本之間升級 PostgreSQL 數據庫。

它是 PostgreSQLpg_upgrade工具的包裝器,可用於就地升級數據庫,因此不會失去任何東西,包括主要版本之間。

這篇文章(https://olivierlacan.com/posts/migrating-homebrew-postgres-to-a-new-version/)可以為您提供大量有關如何升級 PostgreSQL 以及使用brew upgrade.

引用自:https://dba.stackexchange.com/questions/204654