powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите создать триггер
8 сообщений из 8, страница 1 из 1
помогите создать триггер
    #33891342
twistfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 2 таблицы
shop_goods (
id SERIAL PRIMARY KEY,
cat_id int4,
...
);

shop_cats (
id SERIAL PRIMARY KEY,
cat_parent_id int4, //для организации древовидной структруы каталога
catin_count int4, //поле для учета количества товаров в категории - избыточные данные для ускорения работы
...
);

В общем ситуация такова - необходимо после запросов DELETE, INSERT (для бд shop_goods) изменять количество товаров в категории - catin_count - то есть пересчитывать количество для каждой категории - либо только для той в которой произошло добавление/удаление товара (не знаю, думаю такое невозможно).

Как это сделать? (PL/PgSQL)
И еще вопрос - будет ли триггер сохранятся при дампе БД?
...
Рейтинг: 0 / 0
помогите создать триггер
    #33891959
для вставки:

функция good_insert
begin
update shop_cats set catin_count+1 where id=NEW.id
return NEW;
end;

CREATE TRIGGER blablabla AFTER INSERT
ON "shop_goods" FOR EACH ROW
EXECUTE PROCEDURE "good_insert";

для удаления:
функция good_delete
begin
update shop_cats set catin_count-1 where id=OLD.id
return null;
end;

CREATE TRIGGER blablabla1 AFTER DELETE
ON "shop_goods" FOR EACH ROW
EXECUTE PROCEDURE "good_delete";

функции сохраняются при дампе схемы, триггеры - при дампе таблицы или полном дампе.
...
Рейтинг: 0 / 0
помогите создать триггер
    #33892887
twistfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, такой вопрос: в триггерах (функциях) можно использовать параметры?

Что означает
..where id=NEW.id
return NEW;
?
Я имею в виду: что означает именно условие?
Что означает "NEW. id"?
Ведь параметр(категория) не передается. А я так понимаю что "NEW. id" - это именно номер товара (shop_goods.id)? Или все-таки shop_cats.id?

Разве функция используемая в триггере не должна выдававать пустой результат?

Заранее благодарен за разъяснения.
...
Рейтинг: 0 / 0
помогите создать триггер
    #33892980
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
twistfireИзвините, такой вопрос: в триггерах (функциях) можно использовать параметры?

Что означает
..where id=NEW.id
return NEW;
?
Я имею в виду: что означает именно условие?
Что означает "NEW. id"?
Ведь параметр(категория) не передается. А я так понимаю что "NEW. id" - это именно номер товара (shop_goods.id)? Или все-таки shop_cats.id?

Разве функция используемая в триггере не должна выдававать пустой результат?

Заранее благодарен за разъяснения.

NEW - это алиас на вставляемую/меняемую строку. OLD - алиас на строку, которая была до этого.

при апдейте у тебя будут оба алиаса, при удалении - только OLD, при вставке - только NEW
...
Рейтинг: 0 / 0
помогите создать триггер
    #33892983
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
twistfireРазве функция используемая в триггере не должна выдававать пустой результат?


Не должна. Она должна возвращать либо NEW, либо OLD, либо NULL.
...
Рейтинг: 0 / 0
помогите создать триггер
    #33893213
twistfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создал триггер и функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE FUNCTION aftgood_delete() RETURNS opaque AS '
BEGIN
UPDATE shop_cats SET cat_count=cat_count-1 where id=OLD.id;
return NULL;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER upd_del AFTER DELETE ON shop_goods FOR EACH ROW EXECUTE PROCEDURE aftgood_delete();

Вроде все прошло только при создании триггера ругнулось типа тип триггер, а не опакуе.

Удаляю из shop_goods - успешно.
А данные не обновляются совершенно.
Почему? в Чем ошибка может быть?
...
Рейтинг: 0 / 0
помогите создать триггер
    #33893220
twistfire
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все - разобрался - спасибо за помощь.

А как сделать дамп так чтобы полностью базу вместе со всеми функциями и триггерами задампить?
Такое можно сделать?
...
Рейтинг: 0 / 0
помогите создать триггер
    #33893247
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Смотри ключи для утилиты pgdump

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите создать триггер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]