Es allí cualquier manera de establecer algún tipo de «caducidad» de tiempo en las entradas de datos en PostgreSQL? Estoy pensando en algo equivalente a CADUCAN en Redis.

No estoy buscando para almacenar una marca de tiempo y de forma manual el código de algún tipo de cron trabajo para comprobar qué entradas han caducado.

Estoy tratando de averiguar si hay alguna característica nativa en PostgreSQL que proporcionan este tipo de funcionalidad, o si tendría sentido para solicitar dicha característica para futuras versiones.

2 Comentarios

  1. 89

    No hay ninguna construido en característica de caducidad, pero si su objetivo es caducan automáticamente los campos y la lógica contenida en la base de datos (y por lo tanto no hay fuera de dependencia como un cron job), entonces siempre se puede escribir un desencadenador. A continuación es un ejemplo de un desencadenador que elimina las filas de una tabla que tiene una marca de tiempo de más de 1 minuto. Es ejecutada cada vez que se inserta una nueva fila en esa misma tabla. Usted, evidentemente, puede establecer el gatillo para que se ejecuten en otras condiciones y con diferentes fechas de vencimiento según sea su necesidad. He utilizado el siguiente sitio web como base para este: 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)
    • depende, probablemente, de almacenamiento en caché y la indexación
    • -1. En mi humilde opinión, son los desencadenantes no de la manera que usted debe lidiar con la falta de características de base de datos, debido a que son los desencadenantes de difícil prueba, difícil de mantener y sólo un dolor en el culo. Ser honesto y ponerlo en práctica en su aplicación. 🙂
    • De acuerdo, creo que la verificación de los registros antiguos y eliminar en cada inserción es realmente terrible solución en términos de rendimiento. No es que duro para la instalación, incluso algo como CRON job secuencia de comandos que se ejecuta requieren SQL, por ejemplo.
  2. 7

    No. No hay tal característica.

    Yo no puedo ver lo que lo hace más que bien (1) sólo una «caducado» timestamp hace o (2) timestamp + cron job/pgAgent.

    No suena como una característica general que sería añadido a la base. Usted podría simplemente el código de una la extensión de para manejar este tipo de cosas, ya sea con una garrapata se llama desde un cron job o tal vez un fondo de trabajo proceso.

    No veo nada en pgxn, por lo que presumiblemente no hay habido una gran demanda para ello todavía.

Dejar respuesta

Please enter your comment!
Please enter your name here