Функции Sql не могут возвращаться trigger
. Вероятно, вы хотели написать функцию plpgsql.
Функция триггера не может сгенерировать какой-либо результат (например, результаты запроса select
). Вы можете использовать raise notice
передать некоторые результаты в клиентской программе:
create or replace function added_product_info()
returns trigger as $$
declare
company text;
begin
select companyname
from suppliers
where supplierid = new.supplierid
into company;
raise notice 'inserted: "%" supplied by "%"', new.productname, company;
return new;
end;
$$ language plpgsql;
Запись new
видна в функции запуска только если триггер объявлен for each row
(по умолчанию for each statement
при записи new
и old
не доступны):
create trigger added_product_info_trigger
before insert on products
for each row
execute procedure added_product_info();
Если триггер before insert for each row
он должен вернуть new
.
Обратите внимание, что клиент должен быть готов получить и обработать уведомление. При выполнении запроса в стандартной Psql программы оболочки, вы будете получать:
insert into products values ('some product', 1);
NOTICE: inserted: "some product" supplied by "company"
INSERT 0 1
Read:
'рейза notice': https: // w ww.postgresql.org/docs/current/static/plpgsql-errors-and-messages.html#PLPGSQL-STATEMENTS-RAISE –