Postgresql

如何處理 Postgres pg_receivewal 命令生成的 .partial WAL 段?

  • August 22, 2019

pg_receivewal為不完整的 WAL 段創建一個.partial文件。我的問題是如何在恢復過程中處理這個文件。如果我保持原樣,最後的交易不會恢復。如果我重命名刪除.partial後修復的文件,恢復過程會因錯誤而崩潰:

FATAL:  archive file "000000010000000C00000080" has wrong size: 152 instead of 16777216

我發現的唯一方法是.partial在上次恢復崩潰後刪除此段並重新啟動該過程。這樣 db 似乎完全恢復了。

處理這些.partial細分市場的正確方法是什麼?

我的數據庫版本是 11.5。

更新:

按照 Laurenz 的建議,我最終在開始恢復之前執行了下一個命令。

  • 它測試是否沒有其他版本的部分片段
  • 解壓縮它(就像我使用pg_receivewal標誌--compress一樣)
  • 用空值增加它
  • 並將固定段複製到pg_wal文件夾中
find /backup/wal -name "*.partial" -exec sh -c ' \
   NAME=`basename "$0" .gz.partial`; \
   DEST=$PGDATA/pg_wal/$NAME; \
   test ! -f $DEST && \
   zcat $0 > $NAME && \
   truncate -s16M $NAME && \
   mv $NAME $DEST \
' '{}' \;

請注意,它依賴於$PGDATA通常未設置的環境變數。

嗯,好問題。

我建議你重命名它並在最後用零填充它,例如使用

dd if=/dev/zero of=000000010000000C00000080 oflag=append conv=notrunc bs=1024 count=16416

這可能是您的restore_command.

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