Tự động lão hóa (xóa) các bản ghi cũ trong Postgres


15

Postgres có bất kỳ tính năng nào để hỗ trợ các bản ghi cũ không?

Tôi muốn sử dụng Postgres để đăng nhập, như một loại hàng đợi, trong đó các bản ghi (sự kiện nhật ký) cũ hơn hai tuần sẽ tự động bị xóa.


Sử dụng phân vùng. Chỉ cần xóa các bản ghi sẽ không làm giảm kích thước bảng trên đĩa.
sivann

@sivann Không đề xuất của bạn cho rằng vấn đề của anh ấy là kích thước đĩa? Nếu vấn đề của anh ta là thời gian thực hiện truy vấn thì có vẻ như việc xóa có thể là một câu trả lời đơn giản hơn so với phân vùng, phải không? (vẫn đang cố gắng để hiểu điều này bản thân mình)
stephenmm

1
Vấn đề đơn giản là các bản ghi nhật ký không còn thú vị sau một khoảng thời gian nhất định. Xóa các hàng cũ sẽ nhường chỗ cho các hàng mới.
Basil Bourque

Câu trả lời:


15

Không có tính năng nào được tích hợp để xóa các hàng tự động theo chế độ dựa trên thời gian (mà tôi sẽ biết).

Bạn có thể chạy một cron-job hàng ngày (bạn quyết định) để lên lịch DELETEcác lệnh đơn giản hoặc sử dụng pgAgent cho mục đích này.

Hoặc bạn có thể sử dụng phân vùng với các phân vùng hàng tuần kế thừa từ bảng chính , hãy gọi nó log. Điều đó sẽ làm cho việc xóa rất rẻ : chỉ cần giữ hai tuần gần nhất và bỏ các phân vùng cũ hơn.

Tạo một RULEhoặc một TRIGGERtrên bảng chính chuyển hướng INSERT đến phân vùng của tuần hiện tại dựa trên thời gian hệ thống. Luôn đăng nhập vào bảng chính log. Tạo bảng con trước thời hạn. Hãy chắc chắn rằng vài tuần tới để chắc chắn và điều hành công việc định kỳ hàng tuần có thêm các bảng con trong tương lai ...

Có các ví dụ mã trong hướng dẫn .
Câu trả lời liên quan với chức năng tạo plpgsql tự động:

Các giải pháp liên quan tạo lại một RULEđể chuyển hướng INSERT. Một chức năng kích hoạt có thể ghi vào phân vùng hiện tại một cách linh hoạt ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.