簡體   English   中英

將舊數據庫數據回填到現有 Postgres 數據庫的最佳方法是什么?

[英]What is the best way to backfill old database data to an existing Postgres database?

最近建立了一個新的 docker 鏡像來替換現有的 postgres 數據庫。 在使用以下命令關閉舊實例之前,對數據庫進行了轉儲:

pg_dump -h localhost -p 5432 -d *dbname* -U postgres > *dbname*.pgdump

我們希望將此數據連接或附加到新數據庫中,以便“回填”一些較舊的歷史數據。 兩個數據庫的數據庫名稱和架構是相同的。 做到這一點最簡單、最安全的方法是什么? 其次,在這個過程中需要關閉postgres嗎?

如果已將重疊的主鍵或唯一列分配給新數據,那么將沒有干凈的方法來合並它們而不進行一些工作來清理它們。 假設沒有發生...

當前轉儲文件將為所有已存在的對象創建語句。 如果您將該文件重放到當前數據庫中,您將收到所有這些對象的一堆錯誤。 如果您沒有在一個事務中全部運行,那么您可以簡單地忽略這些錯誤。 但是,您也可能以錯誤的順序加載數據並導致外鍵違規。 這些錯誤將與有關現有對象的所有其他錯誤混合在一起,因此可能很容易被忽視。

所以我要做的是建立一個空的數據庫服務器,然后將您當前的轉儲重播到其中。 然后重新獲取 pg_dump,但使用-a--section=data 然后您應該能夠將該轉儲加載到您的新數據庫中。 這有兩個優點,它不會轉儲不需要的 CREATE 語句並拋出需要忽略的錯誤,並且它應該以不會導致外鍵沖突的順序轉儲表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM