after trigger и changes visibility

3 отговора 357 прегледа
#1

after trigger и changes visibility

имам after insert trigger на таблица, тригерът изпълнява външна команда, на която дава параметър - id-то на съответния запис.
проблемът е, че искам външната команда да има достъп до данните от insert-a, но тъй като явно данните стоят във "вътрешна транзакция" и не са видими за connection-ите към базата извън текущия тригер (поне докато не завършат всички тригери).
има ли някакво решение този проблем? не говоря за заобикаляне, а за решение.
в случая базата е postgresql, но проблемът е аналогичен и за другите СУБД :-)

Отговор
в отговор на tosh #2

Re: after trigger и changes visibility

Предполагам, си прочел какво пише в документацията?

Everything louder than everything else...
Отговор
в отговор на tosh #3

Re: after trigger и changes visibility

нормално е да не ги вижда, ако външната програма прави SELECT на данните

подавай ги дирекно на външната програма (както подаваш ID-то)

при някои бази може да стане със transaction isolation level Read uncommitted, но може и да не стане :-) при postgresql - няма да стане ([линк])

между другото ако го правиш със select то ще е доста бавно, дори да стане ....

Отговор
в отговор на tosh #4

Re: after trigger и changes visibility

Без да се съмнявам в удачността на подобен дизайн (може да е extended stored proc) обръщам внимание на sp_getbindtoken и sp_bindsession в MSSQL. Не е ясно дали ще виждаш inserted/deleted но със сигурност ще share-ваш lock space-а. Проблем може да е, че така bind-нати connection-ите сериализират работата си.

cheers,
</wqw>

Отговор