Saya memiliki aplikasi web Django dengan backend postgresql 9.3.10 (duduk di OS Linux). Saya mengalami kesalahan penuh disk, sehingga bahkan jika saya mencoba untuk memotong tabel, saya mendapatkan kesalahan semacam itu:
ERROR: could not extend file "base/30137/33186048": No space left on device
HINT: Check free disk space.
Saya tidak dapat dengan mudah menambahkan lebih banyak ruang disk ke server, saya juga tidak bisa menghapus hal-hal di VM ini. Namun ada beberapa tabel yang merupakan kandidat untuk pemotongan, tetapi sepertinya saya tidak dapat memotongnya sekarang juga.
Adakah yang bisa memberi saya saran tentang apa yang bisa saya lakukan di sini? Ini memukul server produksi saya dengan keras, dan saya sedikit DBA tidak sengaja di sini, jadi benar-benar bingung.
postgresql
postgresql-9.3
Hassan Baig
sumber
sumber
Jawaban:
Karena PostgreSQL harus menulis WAL sebelum membuat perubahan apa pun ke tabel, PostgreSQL perlu ruang disk kosong untuk menghapus sesuatu dan melepaskan lebih banyak ruang disk.
Jika Anda membiarkan disk terisi, Anda tidak dapat memulihkan dari dalam PostgreSQL. Bahkan
TRUNCATE
masih harus menulis ke WAL.Jadi, Anda harus mengosongkan ruang pada volume, atau memperluas volume. Jika file log PostgreSQL Anda ada di
pg_log
dalam direktori data, Anda dapat dengan aman menghapus beberapa dari mereka dan memulai kembali Pg.Jangan tidak menghapus
pg_xlog
ataupg_clog
. Ini bukan log kesalahan server, mereka adalah bagian penting dari database, log transaksi dan log komit.sumber
TRUNCATE
harus menulis ke wal, dan seperti apa entri dalam WAL?rm -rf /tmp/*
atau menghapus vimrc Anda.rm -rf /tmp/*
... yang dapat menghapus hal-hal yang mungkin Anda inginkan juga, seperti soket aplikasi, dll. Lebih baik menjadi lebih selektif. Adapun ruang yang dibutuhkan, Anda benar, itu minimal - sebuah meja kosong 8k + beberapa kb entri WAL untuk truncate, alokasi xid, catatan komit, dll.