Re: In which session context is a trigger run? - Mailing list pgsql-general
From | Adrian Klaver |
---|---|
Subject | Re: In which session context is a trigger run? |
Date | |
Msg-id | 0a13079f-27c7-68dd-b52f-af9385185d2b@aklaver.com Whole thread Raw |
In response to | Re: In which session context is a trigger run? (Mitar <mmitar@gmail.com>) |
Responses |
Re: In which session context is a trigger run?
|
List | pgsql-general |
On 12/28/18 7:56 PM, Mitar wrote: > Hi! > > On Fri, Dec 28, 2018 at 3:25 PM Adrian Klaver <adrian.klaver@aklaver.com> wrote: >>> Sure, but why is a temporary function used as a temporary trigger made >> >> There is no such thing as a temporary trigger. > > A trigger defined using a temporary function gets deleted once a > function gets deleted, which is at the end of the session. Thus, it is > a temporary trigger. Feel free to try it. Create a function in pg_temp > and then define a trigger, disconnect, and you will see that trigger > is deleted as well. That is because the function is temporary and when the session ends the function is dropped and it cascades to the trigger. The important part to note is pg_temp.* is an alias to whatever pg_temp_nn the temporary objects are created in. This is why what you want to do is not working. When you create the temporary function it is 'pinned' to a particular session/pg_temp_nn. Running the trigger in another session 'pins' it to that session and it is not able to see the posts_temp table in the original session. Postgres does not have global temp tables at this time. There have been rumblings about making that happen, but I do not what the status of that is. > >>> from my session not run inside my session? Then it could see a >>> temporary table made in my session. >> >> Except that is not what your OP stated: >> >> "And I add it to a regular table as a trigger: >> >> CREATE TRIGGER posts_insert AFTER INSERT ON posts REFERENCING NEW >> TABLE AS new_table FOR EACH STATEMENT EXECUTE FUNCTION >> pg_temp.my_function(); >> >> When a row is added to "posts" table outside of my session, function >> "my_function" is called, but it seems it cannot access "posts_temp" >> table." >> >> So are you talking about another case now? > > No. Still the same case. I have a regular table "posts" and a > temporary table "posts_temp". I want to create a trigger on "posts" > which calls "my_function". "my_function" then copies data from "posts" > to "posts_temp". The problem is that if "posts" is modified in another > session, the trigger cannot access "posts_temp". I wonder if there is > a way to call "my_function" inside the same temporary context / > session where it was defined, because in that same session also > "posts_temp" was defined. > > > Mitar > -- Adrian Klaver adrian.klaver@aklaver.com
pgsql-general by date: