Postgres'teki eski kayıtların otomatik eskimesi (silinmesi)


15

Postgres'in yaşlanan eski kayıtları destekleyen herhangi bir özelliği var mı?

İki haftadan eski kayıtların (günlük olayları) otomatik olarak silindiği günlükleri sıralamak için Postgres'i kullanmak istiyorum.


Bölümleme kullanın. Sadece kayıtları silmek diskteki tablo boyutunu azaltmaz.
sivann

@sivann Tavsiyeniz, sorununun disk boyutu olduğunu varsaymıyor mu? Sorunu sorgu yürütme zamanı ise, silme bölümleme işleminden daha basit bir cevap olabilir gibi görünüyor, değil mi? (hala bunu kendim anlamaya çalışıyorum)
stephenmm

1
Sorun, günlük kayıtlarının belirli bir süre sonra artık ilginç olmamasıdır. Eski satırları silmek yeni satırlara yer açmalıdır.
Basil Bourque

Yanıtlar:


15

Zamana dayalı bir rejimde (bildiğim) satırları otomatik olarak silmek için yerleşik bir özellik yoktur.

Basit komutlar zamanlamak için günlük (karar verdiğiniz ) bir cron işi çalıştırabilir DELETEveya amaç için pgAgent kullanabilirsiniz .

Yoksa kullanabilirsiniz bölümleme o haftalık bölümleri ile ana tablodan devralır , arama sağlar log. Bu, silme işlemini çok ucuz hale getirir : sadece son iki haftayı saklayın ve eski bölümleri bırakın.

Ana tablo üzerinde sistem saatine göre INSERT'leri geçerli haftanın bölümüne yönlendiren bir RULEveya a oluşturun TRIGGER. Her zaman ana tabloya giriş yapın log. Önceden alt tablolar oluşturun. Emin olmak için birkaç hafta önceden olun ve gelecekteki çocuk tablolarını ekleyen haftalık bir cron işi çalıştırın ...

Orada kılavuzda kod örnekleri .
Otomatik olarak tablolar oluşturan bir plpgsql fonksiyonu ile ilgili cevap:

İlgili çözüm RULEINSERT'leri yönlendirmek için bir yeniden oluşturur. Bir tetikleyici fonksiyon mevcut bölüme dinamik olarak yazabilir ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.