PostgreSQL 次要版本升級期間失去數據
我在 MacOS 上安裝了 PostgreSQL 9.4.5,這是使用 Homebrew 完成的。我想將它更新到 9.4 的最新次要版本,所以我這樣做了(如果我沒記錯的話):
brew uninstall postgresql brew install postgresql@9.4
它可以很好地安裝 PostgreSQL 9.4.17,但是在此過程中我似乎失去了所有數據。我看到
initdb
是在某一點執行,是什麼導致了刪除?注意:它不是生產數據庫,所以沒有真正失去,但是我對這個結果感到驚訝,所以我想知道原因。
事實上,你不應該解除安裝它並重新安裝它,因為 PostgreSQL
initdb
從頭開始一個新的數據庫儲存,因此是空的。順便說一句,您的數據可能仍然存在,但在另一個舊目錄中。例如,請參閱這篇文章(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 數據庫。
它是 PostgreSQL
pg_upgrade
工具的包裝器,可用於就地升級數據庫,因此不會失去任何東西,包括主要版本之間。這篇文章(https://olivierlacan.com/posts/migrating-homebrew-postgres-to-a-new-version/)可以為您提供大量有關如何升級 PostgreSQL 以及使用
brew upgrade
.