Nó đang tìm kiếm một bản ghi điểm kiểm tra trong nhật ký giao dịch có thể không tồn tại hoặc bị hỏng. Bạn có thể xác định xem đây có phải là trường hợp không bằng cách chạy:
# Postgres >= 10
pg_resetwal DATADIR
# Postgres < 10
pg_resetxlog DATADIR
Nếu nhật ký giao dịch bị hỏng, bạn sẽ thấy một thông báo như sau:
Máy chủ cơ sở dữ liệu không được tắt sạch. Đặt lại nhật ký giao dịch có thể làm mất dữ liệu. Nếu bạn muốn tiếp tục, hãy sử dụng
-f
để buộc đặt lại.
Sau đó, bạn có thể làm theo hướng dẫn và chạy với -f
để buộc cập nhật:
# Postgres >= 10
pg_resetwal -f DATADIR
# Postgres < 10
pg_resetxlog -f DATADIR
Điều đó sẽ đặt lại nhật ký giao dịch, tuy nhiên, nó có thể khiến cơ sở dữ liệu của bạn ở trạng thái không xác định như được giải thích trong tài liệu PostgreSQL trên pg_resetwal
:
Nếu
pg_resetwal
phàn nàn rằng nó không thể xác định dữ liệu hợp lệ chopg_control
, bạn vẫn có thể buộc nó tiếp tục bằng cách chỉ định-f
(lực lượng) tùy chọn. Trong trường hợp này, các giá trị hợp lý sẽ được thay thế cho dữ liệu bị thiếu. Hầu hết các trường có thể khớp với nhau, có thể cần hỗ trợ thủ công cho OID tiếp theo, giao dịch tiếp theo và kỷ nguyên, ID đa giao dịch tiếp theo và bù đắp, và các trường vị trí bắt đầu WAL. Các trường này có thể được đặt bằng cách sử dụng các tùy chọn được thảo luận dưới đây. Nếu bạn không thể xác định giá trị chính xác cho tất cả các trường này, hãy-f
vẫn có thể được sử dụng, nhưng cơ sở dữ liệu được phục hồi phải được xử lý lại với mức độ đáng ngờ hơn bình thường:kết xuất và tải lại ngay lập tức là bắt buộc. Không thực hiện bất kỳ hoạt động sửa đổi dữ liệu nào trong cơ sở dữ liệu trước khi bạn kết xuất, vì bất kỳ hành động nào như vậy đều có thể làm cho sự cố trở nên tồi tệ hơn.