首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用plpgsql捕获警告

使用plpgsql捕获警告
EN

Stack Overflow用户
提问于 2019-09-08 14:59:51
回答 1查看 234关注 0票数 0

我试图处理一个警告,但我在文档中看到,您不能在plpgsql中这样做。

代码语言:javascript
复制
 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”

当某个用户在表上没有特权时,我需要捕捉并处理这个警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-09 05:32:44

你真的不能捕捉到警告-没有任何机制来做它。例外是不同的生物。错误信息是干净的,您可以尝试一些不属于异常的内容。可用异常的名称(和代码)在此列表中。

通过以下步骤可以找到应该捕获的异常:

代码语言:javascript
复制
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之前提到的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57843071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档