Re: delta relations in AFTER triggers - Mailing list pgsql-hackers
From | Kevin Grittner |
---|---|
Subject | Re: delta relations in AFTER triggers |
Date | |
Msg-id | 1409773769.71219.YahooMailNeo@web122305.mail.ne1.yahoo.com Whole thread Raw |
In response to | Re: delta relations in AFTER triggers (Marti Raudsepp <marti@juffo.org>) |
Responses |
Re: delta relations in AFTER triggers
Re: delta relations in AFTER triggers |
List | pgsql-hackers |
Marti Raudsepp <marti@juffo.org> wrote: > On Mon, Sep 1, 2014 at 9:09 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > The concept of "lightweight relations" that pop into existence when a > certain kind of trigger definition is used somewhere in the function > stack, without a CREATE TABLE, without being discoverable in > information_schema etc., I find needs some more justification than > I've seen in this thread. So far I've only heard that it's more > convenient to implement in the current PostgreSQL code base. It is required by the SQL standard. > I'm sure more questions would pop up in practice, but as Heikki > mentioned: Are such relations also visible to other functions called > by the trigger function? > * If yes, this introduces non-obvious dependencies between functions. > What happens when one trigger with delta relations invokes another > trigger, does the previous one get shadowed or overwritten? This is indeed a killer objection. As things stand in the patch, a function called from a trigger function might have the table of the same name (if it's not a not schema-qualified reference) shadowed, or it might not -- depending on whether it was already planned. That's obviously not acceptable. Passing the metadata from the TriggerData structure to the PLpgSQL_execstate structure to the PLpgSQL_expr structure and on to the ParseState structure, and passing it down to child ParseState structures as needed, along with similar passing of the Tuplestorestate pointer (and associated name) to the execution state structures should fix that. > What are the interactions with search_path? Pretty much the same as the interactions of RTEs with search_path. If the apparent relation name is not schema-qualified, parse analysis first tries to resolve the name as an RTE, and if that fails it tries to resolve it as a named tuplestore, and if that fails it goes to the catalogs using search_path. > Can an unprivileged function override relation names when calling > a SECURITY DEFINER function? By changing things to the way Heikki and Tom suggest, any called functions are not aware of or affected by a named tuplestore in the caller's context. (Changing *back*, actually -- I had this largely done that way before; but it seemed like a rather fragile relay race, passing the baton from one structure to another at odd places. I guess there's no helping that. Or maybe once I post a version changed back to that someone can show me something I missed that makes it better.) > You could argue that CREATE TEMP TABLE already has some of these > problems, but it's very rare that people actually need to use that. If > delta relations get built on this new mechanism, avoiding won't be an > option any more. Not true -- you don't have them unless you request them in CREATE TRIGGER. Nobody can be using this now, so a table owner must *choose* to add the REFERENCING clause to the CREATE TRIGGER statement for it to matter in the trigger function that is then referenced. Perhaps if we implement the ability to specify the trigger code in the CREATE TRIGGER statement itself (rather than requiring that a trigger function be created first) it will be easier to look at and cope with. -- Kevin Grittner EDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
pgsql-hackers by date: