Penghapusan otomatis (penghapusan) dari catatan lama di Postgres

15

Apakah Postgres memiliki fitur untuk mendukung catatan lama yang menua?

Saya ingin menggunakan Postgres untuk mencatat, sebagai semacam antrian, di mana catatan (peristiwa log) yang lebih dari dua minggu secara otomatis dihapus.

Basil Bourque
sumber
Gunakan partisi. Hanya menghapus catatan tidak akan mengurangi ukuran tabel pada disk.
sivann
@sivann. Bukankah rekomendasi Anda menganggap masalahnya adalah ukuran disk? Jika masalahnya adalah waktu eksekusi permintaan, sepertinya penghapusan mungkin jawaban yang lebih sederhana daripada mempartisi, bukan? (Masih mencoba untuk memahami ini sendiri)
stephenmm
1
Masalahnya hanyalah catatan log tidak lagi menarik setelah jangka waktu tertentu. Menghapus baris lama harus memberi ruang bagi baris baru yang baru.
Basil Bourque

Jawaban:

15

Tidak ada fitur bawaan untuk menghapus baris secara otomatis pada rezim berbasis waktu (yang akan saya ketahui).

Anda dapat menjalankan cron-job harian (Anda memutuskan) untuk menjadwalkan DELETEperintah sederhana atau menggunakan pgAgent untuk tujuan tersebut.

Atau Anda bisa menggunakan partisi dengan partisi mingguan yang mewarisi dari tabel master , sebut saja log. Itu akan membuat penghapusan menjadi sangat murah : simpan saja dua minggu terakhir dan jatuhkan partisi yang lebih lama.

Buat a RULEatau a TRIGGERdi tabel master yang mengarahkan kembali INSERT ke partisi minggu ini berdasarkan waktu sistem. Selalu masuk ke tabel master log. Buat tabel anak sebelumnya. Pastikan bahwa beberapa minggu ke depan untuk memastikan dan menjalankan pekerjaan cron mingguan yang menambahkan tabel anak masa depan ...

Ada contoh kode dalam manual .
Jawaban terkait dengan fungsi plpgsql membuat tabel secara otomatis:

Solusi terkait menciptakan kembali RULEuntuk mengarahkan INSERT. Fungsi pemicu dapat menulis ke partisi saat ini secara dinamis ...

Erwin Brandstetter
sumber