Задать вопрос
trinitr0
@trinitr0
провинциальный админ

Вставка данных в таблицу PostgresSQL заканчивается ошибкой?

Разбераюсь с триггерными функциями.
Для этого сначала была создана простая табличка и добавлена функция:
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)
  • Вопрос задан
  • 325 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
terrier
@terrier
INSERT INTO ABresult VALUES (AplusB.A+AplusB.B);

ERROR: missing FROM-clause entry for table "aplusb"

Совершенно справедливо хочет увидеть FROM:

INSERT INTO ABresult ( result )
SELECT A + B FROM AplusB;

Бросьте вы этот ваш линуксформат ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы