我正在尝试使用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"。
处或附近收到语法错误答案 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作为指南。