Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否可以在数据库级别触发函数?_Sql_Postgresql - Fatal编程技术网

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

Sql 是否可以在数据库级别触发函数?,sql,postgresql,Sql,Postgresql,我有一个包含以下列的表: id data integer timestamp without time zone --------- --------------------------- 1 2015-01-26 15:41:20 .......................................... 我还有一个函数存储过程,它需要在数据列指定的日期触发。PostgreSQL

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

   id                     data
 integer       timestamp without time zone
---------      ---------------------------
    1              2015-01-26 15:41:20
..........................................
我还有一个函数存储过程,它需要在数据列指定的日期触发。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作为参数传递的行


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

在SQL服务器代理中编写SQL作业似乎是最好的解释。它应该将实际日期与表中“数据”列中的日期进行比较。如果实际日期大于表中的日期,则应删除该行

这样做: 在SQL Server Management Studio中,展开SQL Server代理,右键单击作业并选择新建作业。。。 在步骤中,创建一个新的。。。一个,然后输入: 删除包含数据的表
您可以将此处发生的时间更改为10秒或30秒,具体取决于您检查该日期的频率。

特定日期发生时,触发器不会运行。粗略地说,触发器在INSERT、UPDATE或DELETE语句发生之前或之后运行

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


其他一些代码可能是数据库中的存储过程函数,也可能是用另一种语言编写的代码,用于连接数据库以完成其工作

顺便说一句,你的问题对我来说似乎有点不清楚。所以只要看看这个ans@wingedparter更新。事实上,我需要按数据列中指定的日期删除行。您需要在每次插入时触发此函数??听说过作业吗?为什么要在触发器上执行此操作?@wingedparter否,我需要在数据中指定的每个日期随时触发此函数。在SQL Server Management Studio中,hey OP需要在PostgreSql中使用此函数。这是真的。但也许他真的可以使用它?SQL Server Management Studio专门与SQL Server一起工作,因此得名。因此,它不可能与任何其他DBMS一起使用