是否可以在数据库级别触发函数?

时间:2015-01-21 09:06:50

标签: sql postgresql

我有一个包含以下列的表:

   id                     data
 integer       timestamp without time zone
---------      ---------------------------
    1              2015-01-26 15:41:20
..........................................

我还有一个函数(存储过程),需要在data列指定的日期触发。是PostgreSQL 8.4还是更高可能吗?

存储过程具有以下签名:

create or replace function delete_row(id integer) returns void as $$
begin
    delete from partner where id = id;
end $$
language plpgsql

并将删除表中的行,并将id作为参数传递。

必须在数据列中存在的每个日期触发该函数。因此,如果我添加一个新行,我还需要在该日期触发该函数。

2 个答案:

答案 0 :(得分:2)

触发器在特定日期发生时不会运行。简而言之,触发器在INSERT,UPDATE或DELETE语句发生之前或之后运行。

要在特定日期运行某些代码,您通常会运行一个外部进程,定期检查表中的日期,然后在找到匹配日期时运行其他代码。外部流程可以由cron控制,也可以由pgAgent控制。

那"其他一些代码"可以是数据库中的存储过程(函数),也可以是用另一种语言编写的代码,该语言连接到数据库以完成其工作。

答案 1 :(得分:-2)

你在解释什么似乎最好在sql sever代理中编写SQL作业。它应该将实际日期与数据'中的日期进行比较。表格中的列。如果表中的实际日期大于1,则应删除该行。

做那样的事情: 在SQL Server Management Studio中,展开SQL Server代理,右键单击" Jobs"并选择"新工作......" 在"步骤"中,创建一个"新..."一个并输入: DELETE表WHERE数据

你可以改变"发生"那里到10秒或30秒,取决于您想要检查该日期的频率。