【问题标题】:Creating a trigger and function in CartoDB在 CartoDB 中创建触发器和函数
【发布时间】:2014-08-20 00:41:36
【问题描述】:

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

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

如何设置我的函数和触发器以使其正常工作?我在“CREATE”处或附近遇到语法错误。

【问题讨论】:

    标签: function postgresql triggers


    【解决方案1】:

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

    试试这个:

    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 作为指南。

    【讨论】:

    • 我认为这行得通,但现在我的 Google 表单和 CartoDB 表之间的链接断开了,所以我需要解决这个问题,看看触发器/函数是否有效。谢谢!解决该问题后,我会将其标记为答案。
    • 我必须放下触发器才能让我的 Google 表单提交再次开始出现。我的 Google Form 提交 SQL 语句是这样的:INSERT INTO obs(named_lt_temperature,etc...)
    • 不太确定触发器将如何影响 google 表单提交,但是,对于您之前的问题,只需添加一个“return null;”函数中的语句,它应该可以工作。我为你更新了答案。我假设由于交易中有错误,它会阻止您的表格出现。试试这个新功能,让我知道它是否有效。
    • 成功了!再次感谢您在这个项目的各个阶段提供的所有帮助@JM,我真的很感激!
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多