Ошибка при создании функции триггера PostgreSQL: в записи "new" нет поля
Существуют таблицы note(id_note, id_client) - Записи и client(id_client, visit_num) - Клиент. Мне надо создать триггер, чтобы при добавлении в note, количество посещений visit_num у client увеличивалось на 1. Изначально у всех клиентов visit_num=0.
Вот мой код:
CREATE FUNCTION trigger_insert_count() RETURNS trigger AS
$$
BEGIN
UPDATE client
SET NEW.visit_num=NEW.visit_num+1
FROM client AS cl
INNER JOIN note ON cl.id_client=note.id_client;
RETURN NEW;
END
$$
LANGUAGE plpgsql;
CREATE TRIGGER tg_insert_count
AFTER INSERT ON note
FOR EACH ROW
EXECUTE PROCEDURE trigger_insert_count();
Выдает ошибку:
ERROR: ОШИБКА: в записи "new" нет поля "visit_num"
CONTEXT: SQL-оператор: "UPDATE client
SET NEW.visit_num=NEW.visit_num+1
FROM client AS cl
INNER JOIN note ON cl.id_client=note.id_client"
функция PL/pgSQL trigger_insert_count(), строка 3, оператор SQL-оператор
Помогите, пожалуйста, как исправить!!!
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
CREATE TABLE note (
id_note INT,
id_client INT
);
CREATE TABLE client (
id_client INT,
visit_num INT
);
INSERT INTO client VALUES (1, 0), (2,0);
CREATE FUNCTION trigger_insert_count() RETURNS trigger AS
$$
BEGIN
UPDATE client
SET visit_num=visit_num+1
WHERE id_client=NEW.id_client;
RETURN NEW;
END
$$
LANGUAGE plpgsql;
CREATE TRIGGER tg_insert_count
AFTER INSERT ON note
FOR EACH ROW
EXECUTE PROCEDURE trigger_insert_count();
INSERT INTO note VALUES (1,1), (2,2), (3,1);
SELECT * FROM note;
SELECT * FROM client;
| id_note | id_client |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| id_client | visit_num |
|---|---|
| 2 | 1 |
| 1 | 2 |