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

Er der en måde at indstille en udløbstid, hvorefter en dataindtastning automatisk slettes i PostgreSQL?

Der er ingen indbygget udløbsfunktion, men hvis dit mål er automatisk at udløbe felter og have logikken indeholdt i din database (og dermed ingen ekstern afhængighed som et cron-job), så kan du altid skrive en trigger. Nedenfor er et eksempel på en trigger, der sletter rækker fra en tabel, der har et tidsstempel, der er ældre end 1 minut. Den udføres hver gang en ny række indsættes i den samme tabel. Du kan naturligvis indstille triggeren til at udføre på andre betingelser og til forskellige udløbsdatoer efter behov. Jeg brugte følgende hjemmeside som grundlag for dette: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)


  1. ved hjælp af nuller i en mysqli udarbejdet erklæring

  2. Indfangning af linkede serverfejl

  3. Opdatering af databaserækker uden at låse tabellen i PostgreSQL 9.2

  4. Forberedelse af en MySQL- eller MariaDB-server til produktion - del 1