Обсуждение: Triggers and System Tables
I have a brief question concerning triggers and system tables:
Why is it not allowed to trigger a system table? I guess it could be
useful from time to time.
Hans
Hi, --On Montag, 15. April 2002 21:55 +0200 Hans-Juergen Schoenig <hs@cybertec.at> wrote: > I have a brief question concerning triggers and system tables: > Why is it not allowed to trigger a system table? I guess it could be > useful from time to time. I guess it could be usefull to get an endless loop of trigger pulling from time to time ;)) Imagine a trigger on the table which postgres uses for holding the trigger data. Creating the trigger means action on the table, which in turn pulls the trigger ... Regardless of this I agree that it would be usefull - but one would have to be _very_ carefully with the design of the trigger. Regards Tino Wildenhain
Hans-Juergen Schoenig <hs@cybertec.at> writes:
> I have a brief question concerning triggers and system tables:
> Why is it not allowed to trigger a system table?
Most of the operations that modify system tables don't bother to fire
triggers ... so if you had a trigger, it would generally fail to capture
the interesting events. I'm not sure what the feasibility would be of
firing triggers everywhere that system tables are updated. Offhand I'd
be worried about whether the system is in a sufficiently self-consistent
state to support trigger execution at all those points.
It would probably also be a *really bad* idea to install a trigger that
tries to alter the row or suppress the update ;-)
regards, tom lane
Hans-Juergen Schoenig wrote:
> I have a brief question concerning triggers and system tables:
> Why is it not allowed to trigger a system table? I guess it could be
> useful from time to time.
Because system tables are often modified by direct heap
access, rather than regular query plans handled through the
executor. The direct heap access doesn't invoke the triggers.
Even if we get this problem "fixed" (I don't really consider
it broken), what if you setup a ON UPDATE OR DELETE trigger
for pg_proc, that is broken? You cannot remove or fix it any
more, so your pg_proc system catalog is frozen, forever,
irreversable, infinitely! That's bad!
Jan
--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #
My problem is that there is no simple way to find out when a table has
been created. I need something like a trigger on pg_class so that I can
check for new tables.
Is there a way to get around the problem?
I know that system tables are somehow special and that is not
recommended to implement some sort of "ordinary trigger" due to internal
reasons.
I wonder how I can find out that a table, a view or something like that
has been created if there is no way to start a function automatically.
Does anybody have an idea?
Hans