使用Postgresql中的触发器更新日期



我有一个表,它有一个契约和starting_date和expiration_date等列。我需要创建一个触发器,一旦我们到了到期日(也就是说,如果它今天到期(,就为特定类别(私人(更新一年。

我真正不明白的是,如果我需要更新以触发触发器,我该如何更新日期。

就像如果我正确理解TRIGGER一样,我需要执行一个Update语句来激发我的TRIGGER并让它完成它的工作。但如果这是正确的,那么我该更新什么来启动它?

显然,对于触发器,如果我执行old.expiration_date==当前日期,那么我就会知道它今天是否会过期。

例如,假设我们与签订了合同

开始日期:1998/02/01

到期日期:2021/06/24

当前日期:2021/06/24

所以现在我需要启动触发器并更新日期,但如何更新?

这是

CREATE TABLE insurance_premiums (
contract_code text NOT NULL,
insurance_team text NOT NULL,
starting_date date NOT NULL,
expiration_date date NOT NULL,
contract_cost float8 NOT NULL,
vehicle_contract text NOT NULL,
customer_contract text NOT NULL,
driver_contract text NOT NULL,
CONSTRAINT insurance_premiums_pkey PRIMARY KEY (contract_code)
);

下面是一个INSERT INTO语句,用于上面的日期示例:

INSERT INTO insurance_premiums (contract_code, insurance_team, starting_date, expiration_date, contract_cost, vehicle_contract, customer_contract, driver_contract) 
VALUES
('FX-30592', 'private', '1998-02-01', '2021-06-24', 3894.68, 'Cavalier', 'Nicoline Vaughn', 'Helen-elizabeth Galiero');

这也是触发器

CREATE TRIGGER update_contract
BEFORE UPDATE ON insurance_premiums
FOR EACH statement 
EXECUTE procedure new_date();

触发器的空函数

CREATE OR REPLACE FUNCTION public.new_date()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN


END;
$function$
;

触发器再次需要自动更新日期,但我不明白我是如何";呼叫";它以及它将如何工作

不能使用触发器使操作由时间触发。触发器只能在数据修改时触发,即INSERTUPDATEDELETETRUNCATE语句。这不是你在这里需要的。

您必须通过运行DELETE语句来安排一个使旧条目过期的常规作业。这样的作业既可以使用操作系统工具(如Unix系统上的cron(进行调度,也可以使用(非标准(数据库扩展(如pg_timetable(进行调度。

如果数据每天过期一次左右是可以的,那就行了。如果你需要更准确的数据,我建议你修改你的SELECT语句,让它们忽略过期的数据。这样就不会急于让它们过期。

如果数据到期的粒度较粗(天/周/月(,则范围分区可能是最好的选择。这将允许您简单地删除一个分区,而不是运行一个长的DELETE

相关内容

  • 没有找到相关文章

最新更新