使用 plpgsql 捕获警告
Catch a warning using plpgsql
我正在尝试处理警告,但我在文档中读到您不能在 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;
当然它不起作用。我收到错误:
Error: ERROR: unrecognized exception condition "privilege_not_granted"
CONTEXT: compilation of PL/pgSQL function "update_team" near line 12
当某些用户没有 table.
权限时,我需要捕获并处理此警告
您真的无法捕获警告 - 没有任何机制可以做到这一点。例外是不同的生物。错误信息很清楚,你可以尝试一些没有异常的东西。可用异常的名称(和代码)在此 list.
你应该捕获什么异常可以通过以下步骤找到:
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 之前提到的)
我正在尝试处理警告,但我在文档中读到您不能在 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;
当然它不起作用。我收到错误:
Error: ERROR: unrecognized exception condition "privilege_not_granted" CONTEXT: compilation of PL/pgSQL function "update_team" near line 12
当某些用户没有 table.
权限时,我需要捕获并处理此警告您真的无法捕获警告 - 没有任何机制可以做到这一点。例外是不同的生物。错误信息很清楚,你可以尝试一些没有异常的东西。可用异常的名称(和代码)在此 list.
你应该捕获什么异常可以通过以下步骤找到:
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 之前提到的)