Est-il possible de définir une sorte de "date d'expiration" sur les entrées de données dans PostgreSQL ? Je pense à quelque chose d'équivalent à EXPIRE
dans Redis .
Je ne cherche pas à stocker un horodatage puis à coder manuellement une sorte de travail cron pour vérifier quelles entrées ont expiré.
J'essaie de savoir s'il existe une fonctionnalité native dans PostgreSQL qui fournirait ce type de fonctionnalité ou s'il serait judicieux de demander cette fonctionnalité pour les versions ultérieures.
Il n’existe pas de fonctionnalité d’expiration intégrée, mais si votre objectif est d’expirer automatiquement les champs et d’avoir la logique contenue dans votre base de données (et donc aucune dépendance extérieure comme un travail 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 définir le déclencheur pour qu'il s'exécute selon d'autres conditions et pour diverses dates d'expiration, le cas échéant. J'ai utilisé le site Web suivant comme base pour ceci: 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)
Non, il n'y a pas une telle fonctionnalité.
Je ne vois pas ce qu'il fait plus que ce soit (1) qu'un timestamp "expiré" ou (2) timestamp + cron-job/pgAgent.
Cela ne ressemble pas à une fonctionnalité générale qui serait ajoutée au noyau. Vous pouvez tout simplement coder un extension pour gérer ce genre de chose, avec un tick appelé depuis un cron-job ou peut-être un processus background-worker .
Je ne vois rien sur pgxn , donc il n'y a probablement pas eu beaucoup de demande pour cela pour le moment.