Ini mencari catatan pos pemeriksaan di log transaksi yang mungkin tidak ada atau rusak. Anda dapat menentukan apakah ini masalahnya dengan menjalankan:
# Postgres >= 10
pg_resetwal DATADIR
# Postgres < 10
pg_resetxlog DATADIR
Jika log transaksi rusak, Anda akan melihat pesan seperti:
Server database tidak dimatikan dengan bersih. Menyetel ulang log transaksi dapat menyebabkan hilangnya data. Jika Anda ingin tetap melanjutkan, gunakan
-f
untuk memaksa reset.
Anda kemudian dapat mengikuti instruksi dan menjalankan dengan -f
untuk memaksa pembaruan:
# Postgres >= 10
pg_resetwal -f DATADIR
# Postgres < 10
pg_resetxlog -f DATADIR
Itu harus mengatur ulang log transaksi, namun itu bisa membuat database Anda dalam keadaan tidak pasti seperti yang dijelaskan dalam dokumentasi PostgreSQL di pg_resetwal
:
Jika
pg_resetwal
mengeluh bahwa itu tidak dapat menentukan data yang valid untukpg_control
, Anda dapat memaksanya untuk tetap melanjutkan dengan menentukan-f
(kekuatan) pilihan. Dalam hal ini nilai yang masuk akal akan menggantikan data yang hilang. Sebagian besar bidang dapat diharapkan cocok, tetapi bantuan manual mungkin diperlukan untuk OID berikutnya, ID transaksi dan epoch berikutnya, ID dan offset multitransaksi berikutnya, dan bidang lokasi awal WAL. Bidang ini dapat diatur menggunakan opsi yang dibahas di bawah ini. Jika Anda tidak dapat menentukan nilai yang benar untuk semua bidang ini,-f
masih dapat digunakan, tetapi database yang dipulihkan harus diperlakukan dengan kecurigaan yang lebih dari biasanya:dump andreload segera sangat penting. Jangan menjalankan operasi pengubahan data apa pun dalam database sebelum Anda membuangnya, karena tindakan semacam itu kemungkinan akan memperburuk korupsi.