Postgresql
pg_restore 錯誤:模式“公共”已經存在(版本間恢復)
這是一個特定場景,我們將從 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 版本。