การลบอายุอัตโนมัติ (ลบ) ของบันทึกเก่า ๆ ใน Postgres


15

Postgres มีคุณสมบัติใด ๆ เพื่อรองรับระเบียนเก่าที่ล้าสมัยหรือไม่?

ฉันต้องการใช้ Postgres สำหรับบันทึกเป็นคิวซึ่งบันทึก (เหตุการณ์บันทึก) ที่เก่ากว่าสองสัปดาห์ถูกลบโดยอัตโนมัติ


ใช้การแบ่งพาร์ติชัน เพียงแค่ลบบันทึกจะไม่ลดขนาดตารางบนดิสก์
sivann

@sivann ข้อเสนอแนะของคุณไม่ถือว่าปัญหาของเขามีขนาดดิสก์หรือไม่ หากปัญหาของเขาคือเวลาดำเนินการแบบสอบถามดูเหมือนว่าการลบอาจเป็นคำตอบที่ง่ายกว่าการแบ่งพาร์ติชันไม่ใช่หรือ? (ยังคงพยายามที่จะเข้าใจตัวเอง)
stephenmm

1
ปัญหาคือว่าบันทึกรายการบันทึกนั้นไม่น่าสนใจอีกต่อไปหลังจากผ่านไประยะเวลาหนึ่ง การลบแถวเก่าควรทำให้มีที่ว่างสำหรับแถวใหม่
Basil Bourque

คำตอบ:


15

ไม่มีคุณสมบัติในตัวในการลบแถวโดยอัตโนมัติในระบอบการปกครองตามเวลา (ที่ฉันรู้)

คุณสามารถเรียกใช้รายวัน (คุณตัดสินใจ) cron-jobเพื่อกำหนดเวลาDELETEคำสั่งง่ายๆหรือใช้pgAgentเพื่อวัตถุประสงค์

หรือคุณอาจจะใช้การแบ่งพาร์ติชันรายสัปดาห์ที่สืบทอดจากตารางต้นแบบที่logช่วยให้เรียกว่า นั่นจะทำให้การลบถูกมาก : เพียงแค่เก็บสองสัปดาห์ล่าสุดและวางพาร์ติชันที่เก่ากว่า

สร้างRULEหรือTRIGGERบนตารางต้นแบบที่เปลี่ยนเส้นทาง INSERT ไปยังพาร์ติชันของสัปดาห์ปัจจุบันโดยยึดตามเวลาระบบ เข้าสู่ตารางหลักlogเสมอ สร้างตารางลูกล่วงหน้า ทำให้หลายสัปดาห์ข้างหน้าเพื่อให้แน่ใจและทำงาน cron ประจำสัปดาห์ที่เพิ่มตารางลูกในอนาคต ...

มีตัวอย่างโค้ดในคู่มือ
คำตอบที่เกี่ยวข้องกับฟังก์ชัน plpgsql สร้างตารางโดยอัตโนมัติ:

โซลูชันที่เกี่ยวข้องจะสร้างการRULEเปลี่ยนเส้นทาง INSERT อีกครั้ง ฟังก์ชันทริกเกอร์สามารถเขียนไปยังพาร์ติชันปัจจุบันได้แบบไดนามิก ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.