PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Existe-t-il un moyen de définir un délai d'expiration, après lequel une entrée de données est automatiquement supprimée dans PostgreSQL ?

Il n'y a pas de fonctionnalité d'expiration intégrée, mais si votre objectif est de faire expirer automatiquement les champs et d'avoir la logique contenue dans votre base de données (et donc pas de dépendance extérieure comme une tâche cron), vous pouvez toujours écrire un déclencheur. Vous trouverez ci-dessous un exemple de déclencheur qui supprime les lignes d'une table dont l'horodatage est supérieur à 1 minute. Il est exécuté chaque fois qu'une nouvelle ligne est insérée dans cette même table. Vous pouvez évidemment configurer le déclencheur pour qu'il s'exécute dans d'autres conditions et pour différentes dates d'expiration, selon les besoins. J'ai utilisé le site Web suivant comme base pour cela :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)