Re: Trigger function always logs postgres as user name

2019-02-15 Thread Alexander Reichstadt
HI,

The answer to the question is that you need to use session_user instead of user 
or current_user.

Cheers,
Alex


> On 9 Feb 2019, at 10:08, Alexander Reichstadt  wrote:
> 
> Hi,
> 
> I setup trigger functions for logging, and while they do work and get 
> triggered, the current_user always insert “postgres” even when 
> updates/deletes/inserts are caused by users of another name.
> 
> How do I get it to use the name that caused the update? It seems current_user 
> is the trigger’s user, so the server itself in some way. This is on PG10
> 
> Here the function:
>BEGIN
> 
>IF  TG_OP = 'INSERT'
> 
>THEN
> 
>INSERT INTO logging (tabname, schemaname, who, 
> operation, new_val)
> 
>VALUES (TG_RELNAME, TG_TABLE_SCHEMA, 
> current_user, TG_OP, row_to_json(NEW));
> 
>RETURN NEW;
> 
>ELSIF   TG_OP = 'UPDATE'
> 
>THEN
> 
>INSERT INTO logging (tabname, schemaname, who, 
> operation, new_val, old_val)
> 
>VALUES (TG_RELNAME, TG_TABLE_SCHEMA, 
> current_user, TG_OP,
> 
>row_to_json(NEW), row_to_json(OLD));
> 
>RETURN NEW;
> 
>ELSIF   TG_OP = 'DELETE'
> 
>THEN
> 
>INSERT INTO logging (tabname, schemaname, operation, 
> who, old_val)
> 
>VALUES (TG_RELNAME, TG_TABLE_SCHEMA, TG_OP, 
> current_user, row_to_json(OLD));
> 
>RETURN OLD;
> 
>END IF;
> 
>END;
> 
> 
> 
> Cheers,
> Alex




Trigger function always logs postgres as user name

2019-02-09 Thread Alexander Reichstadt
Hi,

I setup trigger functions for logging, and while they do work and get 
triggered, the current_user always insert “postgres” even when 
updates/deletes/inserts are caused by users of another name.

How do I get it to use the name that caused the update? It seems current_user 
is the trigger’s user, so the server itself in some way. This is on PG10

Here the function:
BEGIN

IF  TG_OP = 'INSERT'

THEN

INSERT INTO logging (tabname, schemaname, who, 
operation, new_val)

VALUES (TG_RELNAME, TG_TABLE_SCHEMA, 
current_user, TG_OP, row_to_json(NEW));

RETURN NEW;

ELSIF   TG_OP = 'UPDATE'

THEN

INSERT INTO logging (tabname, schemaname, who, 
operation, new_val, old_val)

VALUES (TG_RELNAME, TG_TABLE_SCHEMA, 
current_user, TG_OP,

row_to_json(NEW), row_to_json(OLD));

RETURN NEW;

ELSIF   TG_OP = 'DELETE'

THEN

INSERT INTO logging (tabname, schemaname, operation, 
who, old_val)

VALUES (TG_RELNAME, TG_TABLE_SCHEMA, TG_OP, 
current_user, row_to_json(OLD));

RETURN OLD;

END IF;

END;



Cheers,
Alex