postgresql - 尝试创建函数时出现 Postgres plpgsql 错误
问题描述
Postgres 9.5.2
得到:
ERROR: syntax error at end of input
LINE 14: ...ast_modified_at, NEW.first_name, NEW.last_name);
对于 psql shell 中的这些语句,在运行之后$$;
:
CREATE OR REPLACE FUNCTION customer_history_trigger() RETURNS trigger
LANGUAGE plpgsql SECURITY DEFINER
AS $$
BEGIN
NEW.last_modified_at = now();
IF (TG_OP = 'UPDATE') THEN
IF OLD.status IS DISTINCT FROM NEW.status or OLD.parent_id IS DISTINCT FROM NEW.parent_id
or OLD.first_name IS DISTINCT FROM NEW.first_name or OLD.last_name IS DISTINCT FROM NEW.last_name
or OLD.company IS DISTINCT FROM NEW.company or OLD.company_alias IS DISTINCT FROM NEW.company_alias
THEN
INSERT INTO customerhistory
(customer_id, modified_at, first_name, last_name)
VALUES
(NEW.id, NEW.last_modified_at, NEW.first_name, NEW.last_name);
END IF;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO customerhistory
(customer_id, modified_at, first_name, last_name)
VALUES
(NEW.id, NEW.last_modified_at, NEW.first_name, NEW.last_name);
END IF;
RETURN NEW;
END;
$$;
错误中还有一个小箭头指向行尾的分号。很明显,它不喜欢这一行末尾的分号:(NEW.id, NEW.last_modified_at, NEW.first_name, NEW.last_name);
但我不知道为什么。
解决方案
INSERT INTO customerhistory
原来这是一个与和之后的换行符有关的问题VALUES
。如果我删除这两个换行符,而另外两个则进一步向下,然后将语句粘贴到 psql 中,它就可以工作。但是,它不适用于这些换行符。
如果我在同一行打开括号,也许它也会起作用?没有测试那个。
推荐阅读
- javascript - JS - 使用替换用句号替换空格句号
- python-3.x - Plotly(python):如何在条形图中添加多个文本标签
- javascript - TypeError:无法从 API 服务器 React JS 获取
- c++ - 将 bazel 设置为环境变量 windows
- r - R Markdown:我的情节图正在被裁剪
- json - dotnet publish 不使用 appsettings.json
- reactjs - 如果条件为真,则在子组件中调用函数
- javascript - 你能在一个函数中拦截并创建一个 AxiosPromise 吗?
- java - 根据原始图像分辨率将图像大小调整为字节大小以下的算法
- java - android.widget.FrameLayout 无法转换为 androidx.appcompat.widget.Toolbar 错误