PostgreSQLのデータエントリにある種の「有効期限」時間を設定する方法はありますか?EXPIRE
Redisと同等のことを考えています。
タイムスタンプを保存して、どのようなエントリが期限切れになっているかを確認するために、手動で何らかのcronジョブをコーディングするつもりはありません。
この種の機能を提供するPostgreSQLのネイティブ機能があるかどうか、または将来のリリースでそのような機能をリクエストすることが理にかなっているかどうかを調べています。
PostgreSQLのデータエントリにある種の「有効期限」時間を設定する方法はありますか?EXPIRE
Redisと同等のことを考えています。
タイムスタンプを保存して、どのようなエントリが期限切れになっているかを確認するために、手動で何らかのcronジョブをコーディングするつもりはありません。
この種の機能を提供するPostgreSQLのネイティブ機能があるかどうか、または将来のリリースでそのような機能をリクエストすることが理にかなっているかどうかを調べています。
回答:
組み込みの有効期限機能はありませんが、フィールドが自動的に期限切れになり、データベース内にロジックが含まれることを目的とする場合(したがって、cronジョブのような外部依存関係がない場合)、いつでもトリガーを作成できます。以下は、1分より古いタイムスタンプを持つテーブルから行を削除するトリガーの例です。同じ行に新しい行が挿入されるたびに実行されます。必要に応じて、他の条件で、さまざまな有効期限で実行するようにトリガーを設定できます。私はこれの基礎として次のWebサイトを使用しました: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には何も表示されないため、おそらくまだそれほどの需要はありません。