@ -3535,8 +3535,8 @@ drop table parent, child;
drop function f();
-- Test who runs deferred trigger functions
-- setup
create role regress_groot ;
create role regress_outis ;
create role regress_caller ;
create role regress_fn_owner ;
create function whoami() returns trigger language plpgsql
as $$
begin
@ -3544,7 +3544,7 @@ begin
return null;
end;
$$;
alter function whoami() owner to regress_outis ;
alter function whoami() owner to regress_fn_owner ;
create table defer_trig (id integer);
grant insert on defer_trig to public;
create constraint trigger whoami after insert on defer_trig
@ -3553,23 +3553,23 @@ create constraint trigger whoami after insert on defer_trig
execute function whoami();
-- deferred triggers must run as the user that queued the trigger
begin;
set role regress_groot ;
set role regress_caller ;
insert into defer_trig values (1);
reset role;
set role regress_outis ;
set role regress_fn_owner ;
insert into defer_trig values (2);
reset role;
commit;
NOTICE: I am regress_groot
NOTICE: I am regress_outis
NOTICE: I am regress_caller
NOTICE: I am regress_fn_owner
-- security definer functions override the user who queued the trigger
alter function whoami() security definer;
begin;
set role regress_groot ;
set role regress_caller ;
insert into defer_trig values (3);
reset role;
commit;
NOTICE: I am regress_outis
NOTICE: I am regress_fn_owner
alter function whoami() security invoker;
-- make sure the current user is restored after error
create or replace function whoami() returns trigger language plpgsql
@ -3581,11 +3581,11 @@ begin
end;
$$;
begin;
set role regress_groot ;
set role regress_caller ;
insert into defer_trig values (4);
reset role;
commit; -- error expected
NOTICE: I am regress_groot
NOTICE: I am regress_caller
ERROR: division by zero
CONTEXT: SQL statement "SELECT 1 / 0"
PL/pgSQL function whoami() line 4 at PERFORM
@ -3598,5 +3598,5 @@ select current_user = session_user;
-- clean up
drop table defer_trig;
drop function whoami();
drop role regress_outis ;
drop role regress_groot ;
drop role regress_fn_owner ;
drop role regress_caller ;