PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

C'è un modo per impostare un tempo di scadenza, dopo il quale un'immissione di dati viene automaticamente eliminata in PostgreSQL?

Non esiste una funzione di scadenza incorporata, ma se il tuo obiettivo è quello di far scadere automaticamente i campi e avere la logica contenuta nel tuo database (e quindi nessuna dipendenza esterna come un lavoro cron), puoi sempre scrivere un trigger. Di seguito è riportato un esempio di trigger che elimina le righe da una tabella con un timestamp precedente a 1 minuto. Viene eseguito ogni volta che viene inserita una nuova riga nella stessa tabella. Ovviamente puoi impostare il trigger per l'esecuzione in altre condizioni e per varie date di scadenza, se necessario. Ho usato il seguente sito Web come base per questo: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)