我有一个包含以下列的表:
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作为参数传递。
必须在数据列中存在的每个日期触发该函数。因此,如果我添加一个新行,我还需要在该日期触发该函数。
答案 0 :(得分:2)
触发器在特定日期发生时不会运行。简而言之,触发器在INSERT,UPDATE或DELETE语句发生之前或之后运行。
要在特定日期运行某些代码,您通常会运行一个外部进程,定期检查表中的日期,然后在找到匹配日期时运行其他代码。外部流程可以由cron
控制,也可以由pgAgent控制。
那"其他一些代码"可以是数据库中的存储过程(函数),也可以是用另一种语言编写的代码,该语言连接到数据库以完成其工作。
答案 1 :(得分:-2)
你在解释什么似乎最好在sql sever代理中编写SQL作业。它应该将实际日期与数据'中的日期进行比较。表格中的列。如果表中的实际日期大于1,则应删除该行。
做那样的事情: 在SQL Server Management Studio中,展开SQL Server代理,右键单击" Jobs"并选择"新工作......" 在"步骤"中,创建一个"新..."一个并输入: DELETE表WHERE数据
你可以改变"发生"那里到10秒或30秒,取决于您想要检查该日期的频率。