Postgresql

PostgreSQL:從目錄格式轉儲中恢復 1 個文件

  • January 11, 2016

我有一個大的(> 700GB)PostgreSQL 數據庫。我正在將其導入 AWS RDS。我意識到有些模組會導致問題,我們正在單獨處理,所以現在,我只是在將數據遷移到 RDS。

我正在使用 pg_dump 和 pg_restore 9.4.5 在 PostgreSQL 9.4.5 之間進行遷移。

傳輸幾個小時後(使用目錄格式的 pg_dump 到 pg_restore),我檢查了日誌並意識到我不知道的 Postgres 使用者擁有一件事(可能是一張表?)。

我在 toc.dat 文件中找到了發出呼叫的行,並解壓縮了 .dat.gz 文件,發現它只包含“\”。(沒有引號)在裡面。

所以,我的問題是,除了停止傳輸並重新開始之外,有沒有辦法在導入完成後簡單地傳輸該特定命令和文件?

以下是相關細節。

pg_dump 命令:

pg_dump -h localhost -p 5432 -d DBNAME -U USERNAME -F d -f /mnt/backup -j 7

pg_restore 命令:

pg_restore --dbname=DBNAME --no-tablespaces --host=HOSTNAME --port=5432 --username=USERNAME --verbose -F d -j 6 /mnt/backup

toc.dat 文件中的部分。我意識到目錄格式以二進制格式輸出,但我希望這是可辨識的事實意味著有一種方法可以返回並修復該錯誤。

^@^F^@^@^@public^A^A^@^@^@^@^H^@^@^@postgres^@^E^@^@^@false^@^C^@^@^@173^A^A^@^@^@^@    ^@^@^@10393.dat^@W<^@^@^@^A^@^@^@^@^A^@^@^@0^@^E^@^@^@26106^@^N^@^@^@search_name_66^@
^@^@^@TABLE DATA^@^C^@^@^@^@^@^@^@^@^@^@^@^@^@^@]^@^@^@COPY search_name_66 (place_id, search_rank, address_rank, name_vector, centroid) FROM stdin;

pg_restore 報告的實際錯誤:

pg_restore: [archiver (db)] Error from TOC entry 10393; 0 16787 TABLE DATA spatial_ref_sys postgres

我在 toc.dat 文件中找到了發出呼叫的行,並解壓縮了 .dat.gz 文件,發現它只包含“\”。(沒有引號)在裡面。

\.不是命令,它標誌著 COPY 流中數據的結束。如果轉儲中的相應數據文件僅包含該數據,則源表為空。

另請注意,您可以pg_restore --list以目錄或壓縮格式列出轉儲的內容。

您還可以將單個表的內容恢復到 SQL 文件而不是目標數據庫中,然後根據需要修改該文件,並將其播放到目標中。有關更多資訊,請參見pg_restore 手冊頁

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