programing

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

oldcodes 2023. 5. 29. 11:10
반응형

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

PostgreSQL의 데이터 항목에 대해 일종의 "만료" 시간을 설정할 수 있는 방법이 있습니까?는 레디스에 있는 과 비슷한 것을 생각하고 있습니다.

타임스탬프를 저장한 다음 어떤 항목이 만료되었는지 확인하기 위해 일종의 cron 작업을 수동으로 코딩하지는 않습니다.

Postgre에 네이티브 기능이 있는지 알아보고 있습니다.이러한 종류의 기능을 제공하는 SQL 또는 향후 릴리스를 위해 이러한 기능을 요청하는 것이 타당한지 여부.

기본 제공 만료 기능은 없지만 필드가 자동으로 만료되고 데이터베이스 내에 포함된 논리(따라서 cron 작업과 같은 외부 종속성이 없음)를 사용하는 것이 목표인 경우 언제든지 트리거를 작성할 수 있습니다.다음은 타임스탬프가 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 작업 또는 백그라운드 작업 프로세스에서 호출되는 체크 표시를 사용하여 이러한 종류의 작업을 처리하는 확장을 간단히 코딩할 수 있습니다.

는 pgxn에 아무것도 보이지 않아서 아마 아직 수요가 많지 않았을 것입니다.

아니요, PG는 그렇지 않습니다.하지만 Google Cloud Spanner에서는 이러한 기능을 사용할 수 있습니다.SQL 인터페이스가 있으며 현재 postgres 방언도 지원합니다.

언급URL : https://stackoverflow.com/questions/26046816/is-there-a-way-to-set-an-expiry-time-after-which-a-data-entry-is-automaticall

반응형