PostgreSQL의 데이터 항목에 일종의 “만료”시간을 설정하는 방법이 있습니까? EXPIRE
Redis 와 동등한 것을 생각하고 있습니다.
타임 스탬프를 저장하고 만료 된 항목을 확인하기 위해 일종의 크론 작업을 수동으로 코딩하려는 것이 아닙니다 .
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)