триггер AFTER INSERT

dmitry_
Дата: 03.11.2003 15:08:07
ситуация такова что в триггере срабатывающем AFTER INSERT on T1 ... выполняется другая вставка INSERT into T2 ...
но это не работает, выдается ошибка типа - pq_recvbuf: recv() failed: Connection reset by peer.
в чем проблема подскажите.

З.Ы.
AFTER DELETE on T1 ... все работает нормально.
assa
Дата: 04.11.2003 18:03:08
А поподробнее?

версия?

тексты?


_______
(я тут смотрю как работает рекурсия при помощи триггеров. Так вроде на моделях вполне получается:
например:
CREATE OR REPLACE FUNCTION public.tr_first_delete()

RETURNS trigger AS
'
DECLARE
oid int4;
opid int4;
ova int8;
BEGIN
SELECT INTO oid OLD.id;
SELECT INTO opid OLD.pid;
SELECT into ova OLD.val;
UPDATE first SET val = val-ova
WHERE id=opid;

RETURN NEW;
END;'

LANGUAGE 'plpgsql' VOLATILE;

CREATE TRIGGER first_delete

AFTER DELETE
ON public.first
FOR EACH ROW
EXECUTE PROCEDURE public.tr_first_delete();

на ADD и UPDATE - подобная бяка. РАботает. Пробегает по всей иерархии. Но тут у меня нет попыток вообще зациклить. С другой стороны если есть проблемы, хотелось бы их нащупать еще на стадии моделей. (т.е. до выбора конкретных способов реализации). А вдруг блокировки как-то могут повлиять?
wbear
Дата: 05.11.2003 12:17:22
а на T2 случайно нет тригера на insert into T1???
dmitry_
Дата: 06.11.2003 14:22:37
нет конечно
assa
Дата: 06.11.2003 14:38:33
а есть ли вообще какие нибудь 1.триггеры на инсерт и апдейт (в т.ч. вторичнные ключи) 2.правила в T2. Если есть - попробуй разрулить :0).

А показать текст(ы) - слабо?
dmitry_
Дата: 10.11.2003 10:53:10
наверное стоит уточнить.
1) есть перловый скрип, который вызывает первичный инзерт
2) самый простой вариант
CREATE FUNCTION ins_log() RETURNS OPAQUE AS '
DECLARE
tstamp VARCHAR := timenow();
tuser VARCHAR := session_user;
BEGIN
RAISE NOTICE ''DEVELOPER :: ins_log'',tstamp;
RAISE NOTICE ''user login = '',tuser;
insert into test (name) values (''test'');
RETURN NEW;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER ins_log AFTER INSERT ON log
FOR EACH ROW EXECUTE PROCEDURE ins_log();

ну вот это и виснет
пробовал из оболочки (psql ...) вызывать первый инзерт, ошибка появляется реже, но было.
Оно конечно может быть косяк в Perl::DBI, но вдруг и Postgresql?
assa
Дата: 10.11.2003 15:03:07
повторил ваш тригер (приблизительно).
__
CREATE OR REPLACE FUNCTION public.ins_log()
RETURNS trigger AS
'
DECLARE
tstamp VARCHAR := timenow();
tuser VARCHAR := session_user;
BEGIN
RAISE NOTICE \'DEVELOPER :: ins_log\',tstamp;
RAISE NOTICE \'user login = \',tuser;
insert into vbtest (id,name) values ((SELECT 1+max(id) FROM vbtest),\'test\');
RETURN NEW;
END;
'
LANGUAGE 'plpgsql' VOLATILE;
__
Вставлял данные из оболочки PgAdmin. Проблем не возникло. :(
Что не так?
dmitry_
Дата: 11.11.2003 18:01:38
все спасибо , разобрался. косяк был в linux, а не постгресе или перле.
assa
Дата: 11.11.2003 19:28:07
Не за что (заодно полюбопытствовал)

если я прально вас понял, там надоть че-нить типа:
ins_log %'',tstamp;
assa
Дата: 11.11.2003 19:28:54
в "RAISE NOTICE", т.е.