From: | Ivan Voras <ivoras(at)freebsd(dot)org> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: What's faster? BEGIN ... EXCEPTION or CREATE TEMP TABLE IF NOT EXISTS? |
Date: | 2012-10-04 10:12:55 |
Message-ID: | k4jnfg$9ob$1@ger.gmane.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 01/10/2012 15:36, Moshe Jacobson wrote:
> I am working on an audit logging trigger that gets called for every row
> inserted, updated or deleted on any table.
> For this, I need to store a couple of temporary session variables such as
> the ID of the user performing the change, which can be set at the start of
> the session.
> Until now I have been using a permanent table to store the session
> variables, but it has been difficult to wipe the data properly at the end
> of the session.
Do you know about session variables? I did something similar to what you
are describing and it ended up much simpler than using tables, temporary
or not.
You need to configure them in postgresql.conf, e.g.:
custom_variable_classes = 'myapp'
Then in the application code:
SET myapp.uid = 42;
And in the pl/pgsql function:
CREATE OR REPLACE FUNCTION dblog() RETURNS TRIGGER AS $$
DECLARE
uid INTEGER;
BEGIN
BEGIN
SELECT current_setting('myapp.uid') INTO uid;
EXCEPTION
WHEN undefined_object THEN
uid = null;
WHEN data_exception THEN
uid = null;
END;
...
END;
$$ LANGUAGE plpgsql;
The major benefit here is that it doesn't touch the table engines,
temporary or not.
From | Date | Subject | |
---|---|---|---|
Next Message | clear chan | 2012-10-04 12:00:31 | Return dynamic columns of a temporary table |
Previous Message | Виктор Егоров | 2012-10-04 07:29:01 | pg_upgrade default ports in the --help output |