sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Hay alguna manera de establecer un tiempo de caducidad, después del cual una entrada de datos se elimina automáticamente en PostgreSQL?

No hay una función de caducidad incorporada, pero si su objetivo es caducar automáticamente los campos y tener la lógica contenida dentro de su base de datos (y, por lo tanto, sin dependencia externa como un trabajo cron), siempre puede escribir un disparador. A continuación se muestra un ejemplo de un disparador que elimina filas de una tabla que tiene una marca de tiempo de más de 1 minuto. Se ejecuta cada vez que se inserta una nueva fila en esa misma tabla. Obviamente, puede configurar el activador para que se ejecute en otras condiciones y para varias fechas de vencimiento, según sea necesario. Usé el siguiente sitio web como base para esto: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)