Вам необходим триггер уровня оператора, а не триггер уровня строки.
create or replace function block_mass_changes()
returns trigger
as
$$
declare
l_numrows integer;
begin
select count(*)
into l_numrows
from new_rows;
raise notice 'Rows: %', l_numrows;
if l_numrows > 5 then
raise 'Updating or inserting more than 5 rows is not allowed';
end if;
return null;
end;
$$
language plpgsql;
Затем необходимо создать один триггер для UPDATE и один для INSERT, поскольку невозможно определить триггер уровня оператора для двух действий:
CREATE TRIGGER block_updates_trigger
AFTER UPDATE ON att_test.tr_test1
REFERENCING NEW TABLE AS new_rows
FOR EACH STATEMENT EXECUTE FUNCTION block_mass_changes();
CREATE TRIGGER block_inserts_trigger
AFTER INSERT ON att_test.tr_test1
REFERENCING NEW TABLE AS new_rows
FOR EACH STATEMENT EXECUTE FUNCTION block_mass_changes();