有沒有辦法在PostgreSQL的數據項上設置某種「過期」時間?我正在考慮相當於"EXPIRE" in Redis的東西。有沒有辦法在PostgreSQL中自動刪除數據輸入後設置「到期」時間?
我不希望存儲時間戳,然後手工編碼某種cron作業的檢查什麼項目已經過期。
我試圖找出是否有在PostgreSQL的任何本地的功能,可以提供這種功能,或者如果它將使意義請求這些功能在未來發布。
有沒有辦法在PostgreSQL的數據項上設置某種「過期」時間?我正在考慮相當於"EXPIRE" in Redis的東西。有沒有辦法在PostgreSQL中自動刪除數據輸入後設置「到期」時間?
我不希望存儲時間戳,然後手工編碼某種cron作業的檢查什麼項目已經過期。
我試圖找出是否有在PostgreSQL的任何本地的功能,可以提供這種功能,或者如果它將使意義請求這些功能在未來發布。
不。沒有這樣的功能。
我無法看到它做什麼超過:(1)只是一個「過期」時間戳確實或者(2)日期+的cron作業/ pgAgent。
這聽起來並不像將被添加到核心的一般特徵。你可以很簡單地編寫一個extension來處理這類事情,或者從cron-job調用一個tick或者一個background-worker進程。
我沒有看到pgxn什麼,所以可能有一定不是因爲它更需要呢。
MongoDB具有這樣的功能,它非常方便,特別是如果應用程序橫向縮放到多個框,因爲您需要一種方法來確保預定的作業運行,但只能在其中一個機器。我認爲postgres也應該實現它。 – 2017-04-20 15:10:58
沒有內置的過期的功能,但如果你的目標是自動失效領域,並有邏輯包含在您的數據庫中(從而相似的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)
這是一個很好的答案! :thumbsup:用於觸發器。 – 2016-01-09 19:57:47
他不知道觸發器是一件事情,這似乎是一個很好的用例。 – Moodragonx 2016-11-19 00:12:40
性能開銷如何? – caeus 2016-11-28 18:06:29
有是PostgreSQL的郵件列表上的討論 http://www.postgresql.org/message-id/CAKe+-77Vu=wzMYSX5d06b2+q6Fi77ZwkO0aYVf8+cewVEca [email protected] – vonPetrushev 2015-06-30 15:00:17