在CartoDB中创建触发器和函数

时间:2014-08-18 21:50:43

标签: function postgresql triggers

我正在尝试使用PostgreSQL在CartoDB中创建一个触发器和一个函数。每当我的桌子 obs 上发生INSERT INTO时,我希望触发器触发。我希望我的函数更新另外两个表内陆沿海中的值。到目前为止,我已尝试过这段代码:

CREATE FUNCTION inlanddisp()  
RETURNS trigger AS $$  
BEGIN
     UPDATE inland SET lt_dispatch_level = obs.named_lt_dispatch_level   
     FROM obs   
     WHERE obs.created_at = (SELECT MAX(created_at) FROM obs)   
     AND inland.cartodb_id = 1
END;  
$$

CREATE TRIGGER update_inland  
AFTER INSERT INTO obs  
ON inland  
FOR EACH ROW  
EXECUTE PROCEDURE inlanddisp();  

如何设置我的功能和触发器以使其正常工作?我在#34; CREATE"。

处或附近收到语法错误

1 个答案:

答案 0 :(得分:2)

您缺少函数中使用的语言以及结束分号。至于触发器,您只需指定事件发生的表。您的函数将包含需要执行的操作,因此在这种情况下更新其他两个表。

试试这个:

CREATE FUNCTION inlanddisp()
RETURNS trigger AS $$

BEGIN

UPDATE inland SET lt_dispatch_level = obs.named_lt_dispatch_level
FROM obs
WHERE obs.created_at = (SELECT MAX(created_at) FROM obs)
AND inland.cartodb_id = 1;

(put your other query to update coastal here)

RETURN null;

END;
$$ LANGUAGE plpgsql;


CREATE TRIGGER update_inland
AFTER INSERT 
ON obs
FOR EACH ROW
EXECUTE PROCEDURE inlanddisp(); 

请参阅此Trigger Procedure作为指南。