Postgresql如何處理 Postgres
如何處理 Postgres pg_receivewal
命令生成的 .partial
WAL 段?
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
.