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
Function 在CartoDB中创建触发器和函数_Function_Postgresql_Triggers - Fatal编程技术网

Function 在CartoDB中创建触发器和函数

Function 在CartoDB中创建触发器和函数,function,postgresql,triggers,Function,Postgresql,Triggers,我试图在CartoDB中创建一个触发器和一个函数,它使用PostgreSQL。我希望每次在我的表上插入到时触发触发器obs。我想让我的函数更新另外两个表中的值内陆和沿海。到目前为止,我已经尝试了以下代码: CREATE FUNCTION inlanddisp() RETURNS trigger AS $$ BEGIN UPDATE inland SET lt_dispatch_level = obs.named_lt_dispatch_level FROM ob

我试图在CartoDB中创建一个触发器和一个函数,它使用PostgreSQL。我希望每次在我的表上插入到时触发触发器obs。我想让我的函数更新另外两个表中的值内陆和沿海。到目前为止,我已经尝试了以下代码:

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”处或附近遇到语法错误。

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

试试这个:

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(); 

请参考此指南。

我认为这是可行的,但现在我的Google表单和CartoDB表之间的链接失效了,因此我需要解决这个问题,看看触发器/函数是否有效。非常感谢。一旦我解决了这个问题,我会把它标记为答案。我不得不放下扳机,让我的谷歌表单提交再次出现。我的Google Form submission SQL语句是这样的:INSERT INTO obs(命名为\u lt\u temperature等…)不太确定触发器将如何影响Google Form submission,但是,在上一期中,只需在函数中添加一个“return null;”语句,它就可以工作了。我为你更新了答案。我假设,由于事务中存在错误,它会阻止您的表单出现。试试这个新功能,让我知道它是否有效。这就成功了!再次感谢您在@JM项目的各个阶段提供的帮助,我真的非常感谢!
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();