根据this Postgres文档中的43.6.8. Trapping Errors
主题,处理异常的正确语法是:
BEGIN;
-- SQL Statement
EXCEPTION WHEN Others THEN
-- Exception Handling Logic
END;
这是当我在pgAdmin
中使用这个语法时,它一直抱怨关键字EXCEPTION
。
我的查询是:
BEGIN;
INSERT INTO TestTable (id) VALUES(3);
COMMIT;
EXCEPTION WHEN Others THEN
ROLLBACK;
END;
错误是:
ERROR: syntax error at or near "EXCEPTION"
LINE 4: EXCEPTION WHEN Others THEN
^
SQL state: 42601
Character: 57
我不明白这个SQL代码可能有什么问题。如果这不是处理异常的正确方法,那么我如何实现类似的东西呢?
更新:这不是Aurora Postgres。我使用的是Standard Postgres。
3条答案
按热度按时间68bkxrlz1#
您引用的是PL/pgSQL文档,但您必须在查询工具中输入SQL。这是不同的语言,所以PL/pgSQL会导致错误。
如果你想使用PL/pgSQL,你必须创建一个函数或过程,或者你可以在SQL的
DO
语句中使用它。你的代码还有两个问题:
BEGIN
后面不能有分号,因此您一定是引用错了文档COMMIT
zed5wv102#
你说你正在使用PgAdmin,所以我假设你正在尝试使用查询工具窗口运行此代码?
在这种情况下,您需要将所有内容放置在
DO
中,如下所示:请注意,不需要提交或回滚。如果你尝试这个代码,假设id是主键,你会发现没有插入任何东西。PostgreSQL自动将所有语句视为一个事务,并在异常发生时将它们全部回滚。
neekobn83#
你可以参考here来了解如何在PostgreSQL中处理异常。
下面是伪代码(来自同一个链接),它可能会给予你一个想法: