PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Có cách nào để đặt thời gian hết hạn, sau đó mục nhập dữ liệu sẽ tự động bị xóa trong PostgreSQL không?

Không có tính năng hết hạn được tích hợp sẵn nhưng nếu mục tiêu của bạn là tự động hết hạn các trường và có logic chứa trong cơ sở dữ liệu của bạn (và do đó không có sự phụ thuộc bên ngoài như cron job) thì bạn luôn có thể viết trình kích hoạt. Dưới đây là ví dụ về trình kích hoạt xóa các hàng khỏi bảng có dấu thời gian cũ hơn 1 phút. Nó được thực thi bất cứ khi nào một hàng mới được chèn vào cùng một bảng đó. Rõ ràng là bạn có thể đặt trình kích hoạt để thực thi trên các điều kiện khác và cho các ngày hết hạn khác nhau nếu cần. Tôi đã sử dụng trang web sau làm cơ sở cho việc này:http://www.the-art-of-web.com/sql/trigger-delete-old/

CREATE TABLE expire_table (
    timestamp timestamp NOT NULL DEFAULT NOW(),
    name TEXT NOT NULL
);

INSERT INTO expire_table (name) VALUES ('a');
INSERT INTO expire_table (name) VALUES ('b');
INSERT INTO expire_table (name) VALUES ('c');

select * from expire_table;
         timestamp          | name 
----------------------------+------
 2014-09-26 15:33:43.243356 | a
 2014-09-26 15:33:45.222202 | b
 2014-09-26 15:33:47.347131 | c
(3 rows)

CREATE FUNCTION expire_table_delete_old_rows() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
  DELETE FROM expire_table WHERE timestamp < NOW() - INTERVAL '1 minute';
  RETURN NEW;
END;
$$;

CREATE TRIGGER expire_table_delete_old_rows_trigger
    AFTER INSERT ON expire_table
    EXECUTE PROCEDURE expire_table_delete_old_rows();

INSERT INTO expire_table (name) VALUES ('d');

select * from expire_table;
         timestamp          | name 
----------------------------+------
 2014-09-26 15:36:56.132596 | d
(1 row)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính giờ làm việc giữa 2 ngày trong PostgreSQL

  2. bộ chuyển đổi postgres rails có hỗ trợ ssl không?

  3. Kích hoạt so với kiểm tra ràng buộc

  4. Timezone_types khác nhau trên đối tượng DateTime

  5. Tính tuổi theo năm trong PostgreSQL