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