Разбераюсь с триггерными функциями.
Для этого сначала была создана простая табличка и добавлена функция:
CREATE TABLE AplusB (A integer, B integer);
INSERT INTO AplusB VALUES (1,1);
INSERT INTO AplusB VALUES (2,2);
INSERT INTO AplusB VALUES (3,3);
CREATE FUNCTION plus(integer, integer) RETURNS integer
LANGUAGE SQL AS 'SELECT $1 + $2;';
После создана ещё одна табличка и триггерная функция:
CREATE TABLE ABresult (result integer);
CREATE FUNCTION ABsumm() returns TRIGGER AS
'BEGIN
DELETE FROM ABresult;
INSERT INTO ABresult VALUES (AplusB.A+AplusB.B);
RETURN NULL;
END;'
LANGUAGE 'plpgsql';
CREATE TRIGGER makeABresult
AFTER INSERT OR UPDATE OR DELETE ON AplusB
FOR EACH STATEMENT execute procedure ABsumm();
После попытки вставки:
INSERT INTO AplusB VALUES (100,200);
Возникает ошибка:
ERROR: missing FROM-clause entry for table "aplusb"
СТРОКА 1:INSERT INTO ABresult VALUES (AplusB.A+AplusB.B)
^
ЗАПРОС: INSERT INTO ABresult VALUES (AplusB.A+AplusB.B)
КОНТЕКСТ: PL/pgSQL function "absumm" line 3 at SQL statement
В чём может быть проблема?
(Источник примеров:
wiki.linuxformat.ru/wiki/LXF87-88:PostgreSQL)