PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Gibt es eine Möglichkeit, eine Ablaufzeit festzulegen, nach der ein Dateneintrag in PostgreSQL automatisch gelöscht wird?

Es gibt keine eingebaute Ablauffunktion, aber wenn es Ihr Ziel ist, Felder automatisch ablaufen zu lassen und die Logik in Ihrer Datenbank enthalten zu haben (und somit keine externe Abhängigkeit wie ein Cron-Job), dann können Sie immer einen Trigger schreiben. Unten sehen Sie ein Beispiel für einen Trigger, der Zeilen aus einer Tabelle löscht, deren Zeitstempel älter als 1 Minute ist. Es wird immer dann ausgeführt, wenn eine neue Zeile in dieselbe Tabelle eingefügt wird. Sie können den Trigger natürlich so einstellen, dass er bei Bedarf unter anderen Bedingungen und für verschiedene Ablaufdaten ausgeführt wird. Als Grundlage hierfür habe ich folgende Website genommen: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)