英文:
How to check for custom Postgres exceptions raised via RAISE EXCEPTION in Golang?
问题
我正在使用Postgres和Golang,通过pgx
进行操作。
我有一个触发器函数,类似以下代码:
CREATE OR REPLACE FUNCTION foo()
RETURNS TRIGGER AS
$$
BEGIN
IF (bar = 'baz') THEN
-- something
ELSE
RAISE EXCEPTION 'oops error';
END IF;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
在Go代码中,如何检查oops error
呢?
目前我这样做:
errOops := errors.New("ERROR: oops error (SQLSTATE P0001)")
err := myDBFunc()
if errors.Is(err, errOops) {
}
但我想知道是否有更好的方法,而不是依赖硬编码的消息。
英文:
I'm using Postgres with Golang via pgx
I've a trigger function something like the following:
CREATE OR REPLACE FUNCTION foo()
RETURNS TRIGGER AS
$$
BEGIN
IF (bar = 'baz') THEN
-- something
ELSE
RAISE EXCEPTION 'oops error';
END IF;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
How do I check for oops error
in Go code?
The way I'm doing it now is:
errOops := errors.New("ERROR: oops error (SQLSTATE P0001)")
err := myDBFunc()
if errors.Is(err, errOops) {
}
But I wonder if there's a better way other than relying on the hardcoded message.
答案1
得分: 3
应该阅读维基百科:在pgx
中的错误处理
所以我可以这样做:
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) && pgErr.Code == "P0001" {
}
或者类似的方式。
英文:
Should have read the Wiki: Error Handling in pgx
So I can do:
var pgErr *pgconn.PgError
if errors.As(err, &pgErr) && pgErr.Code == "P0001" {
}
or something similar.
答案2
得分: 1
你可以在文档的附录A中找到这些信息:它将是一个raise_exception
,而SQLSTATE是P0001
。
英文:
You can find that information in appendix A of the documentation: it will be a raise_exception
, and the SQLSTATE is P0001
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论