On 2/24/07, Karl O. Pinc <kop@xxxxxxxx> wrote:
(Important stuff last.) On 02/24/2007 07:48:58 PM, Tom Lane wrote: > The reason there will never be an insertion trigger event is that we > reject any INSERT on a view that isn't rewritten (by an unconditional > DO INSTEAD rule) into something else. (Yup. But I tried to make my own view implimentation by putting a SELECT rule on a table and that failed because I couldn't make a BEFORE EACH ROW trigger. "Problems putting a SELECT rule on a table" would be just another way to phrase $SUBJECT. The annoying part was that I spent much of the day assuming it would work and then when I tested what I wanted I found that the CREATE RULE statement required that I supply "_RETURN" as a rule name, and that then it wouldn't create the rule anyway because the table had triggers. Usually this sort of thing happens when I mis-read the docs, but this time the docs provided no warning.)
http://www.postgresql.org/docs/current/static/rules-views.html Actually, i found it very clear: if you create a SELECT rule on a table it becomes a view, this is what postgres does every time you create a view
I started with inserts, ran into problems, and came screaming to the list for help. (Thanks.) I somehow assumed that I'd be able to get a hold of NEW.* and OLD.* in my triggers -- because they were there for me in when I first tried to impliment the logic with rules. How is it that the rules can come up with NEW and OLD for a view and why wouldn't something be able to give triggers the same data. (At least BEFORE ... EACH ROW triggers, we wouldn't care about other triggers, would we?)
why not simply create BEFORE TRIGGERS on the base table, CREATE VIEW on top and use an INSERT/UPDATE/DELETE rule on the view to rewrite those operations to the equivalents on the tables... that way you will have your TRIGGERS validating the data... -- regards, Jaime Casanova "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs and the universe trying to produce bigger and better idiots. So far, the universe is winning." Richard Cook