我试图处理一个警告,但我在文档中看到,您不能在plpgsql中这样做。
CREATE OR REPLACE FUNCTION update_team(person varchar(50), id_team integer, long varchar(50), short varchar(25)) RETURNS VOID AS $$
BEGIN
PERFORM * FROM team WHERE id = id_team;
IF FOUND THEN
UPDATE team SET long_name = long WHERE id = id_team;
UPDATE team SET short_name = short WHERE id = id_team;
RAISE INFO 'Team update.';
ELSE
RAISE INFO 'Cannot find team id';
END IF;
EXCEPTION
WHEN privilege_not_granted THEN
RAISE INFO 'Cannot do that';
END;
$$ LANGUAGE plpgsql;当然,这是行不通的。我知道错误:
错误:错误:无法识别的异常条件"privilege_not_granted“上下文:在第12行附近编译PL/pgSQL函数"update_team”
当某个用户在表上没有特权时,我需要捕捉并处理这个警告。
发布于 2019-09-09 05:32:44
你真的不能捕捉到警告-没有任何机制来做它。例外是不同的生物。错误信息是干净的,您可以尝试一些不属于异常的内容。可用异常的名称(和代码)在此列表中。
通过以下步骤可以找到应该捕获的异常:
postgres=# create role student login;
CREATE ROLE
postgres=# create table foo(a int);
CREATE TABLE
postgres=# set role to student;
SET
postgres=> \set VERBOSITY verbose
postgres=> update foo set a = 20;
ERROR: 42501: permission denied for table foo
LOCATION: aclcheck_error, aclchk.c:3487因此,您应该使用代码42501来处理异常,在上面提到的带有异常列表的文档中,您可以找到一个名称insufficient_privilege ( @nick-barnes之前提到的)。
https://stackoverflow.com/questions/57843071
复制相似问题