Postgresql

pg_restore 錯誤:模式“公共”已經存在(版本間恢復)

  • September 2, 2022

這是一個特定場景,我們將從 Postgres 10 提取的自定義轉儲恢復到 Postgres 14。我們收到以下錯誤:

錯誤:架構“公共”已經存在

我了解可以忽略 ERROR 並成功恢復所有後續對象。但是,由於我們是從 JAVA 程序呼叫 pg_Restore ,因此錯誤是返回 0 以外的退出程式碼並退出程序。當然,我們可以調整 JAVA 程式碼,以便通過解析此錯誤消息,我們可以隱藏退出程式碼。但我們仍然認為這不是一個理想的解決方案。還有其他 PG 方法可以避免此錯誤嗎?

嘗試的選項:

  • 在還原之前刪除並重新創建數據庫。
  • 使用“-n public”實際上可以避免錯誤。但這會在恢復時忽略大對象。
  • 此處提出的解決方案 -答案

還沒有運氣!此錯誤或警告僅在還原舊版本轉儲時出現。

我們為什麼不首先修復 pg_restore 原始碼以在創建模式語句中使用“如果不存在”?

在 postgresql 11 中被這個 commit改變了。

這具有明顯的效果,即在輸出中根本不會提及公共架構,除非它具有非預設 ACL 時更新其 ACL。

嘗試使用 pg14 二進製文件中的 pg_dump 轉儲 pg10 數據庫。pg_dump 可以轉儲舊的 PG 版本。

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