[database] PostgreSQL에서 데이터 항목이 자동으로 삭제되는 “만료”시간을 설정하는 방법이 있습니까?

PostgreSQL의 데이터 항목에 일종의 “만료”시간을 설정하는 방법이 있습니까? EXPIRERedis 와 동등한 것을 생각하고 있습니다.

타임 스탬프를 저장하고 만료 된 항목을 확인하기 위해 일종의 크론 작업을 수동으로 코딩하려는 것이 아닙니다 .

PostgreSQL에 이런 종류의 기능을 제공하는 기본 기능이 있는지 또는 향후 릴리스에서 이러한 기능을 요청하는 것이 합리적 일지 알아 보려고합니다.



답변

만료 기능은 내장되어 있지 않지만, 목표가 필드를 자동으로 만료하고 데이터베이스 내에 논리를 포함하는 것 (따라서 크론 작업과 같은 외부 종속성이 없음)이라면 항상 트리거를 작성할 수 있습니다. 다음은 타임 스탬프가 1 분보다 오래된 테이블에서 행을 삭제하는 트리거의 예입니다. 동일한 테이블에 새 행이 삽입 될 때마다 실행됩니다. 필요에 따라 다른 조건과 다양한 만료 날짜에 대해 실행되도록 트리거를 분명히 설정할 수 있습니다. 이를 위해 다음 웹 사이트를 사용했습니다. 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) “만료 된”타임 스탬프가 수행하는 작업 또는 (2) 타임 스탬프 + cron-job / pgAgent보다 더 많은 작업을 수행하는 것을 볼 수 없습니다.

코어에 추가되는 일반적인 기능처럼 들리지 않습니다. cron-job 또는 백그라운드 작업자 프로세스 에서 호출 된 틱을 사용하여 이러한 종류의 작업을 처리 하는 확장 을 아주 간단하게 코딩 할 수 있습니다.

나는 pgxn 에서 아무것도 볼 수 없으므로 아마도 아직 그것에 대한 수요가 많지 않을 것입니다.


답변