Re: Typo in PL/pgSQL trigger Example 43.4?
Daniel Gustafsson writes: >> On 7 Oct 2023, at 22:22, Tom Lane wrote: >> Yeah, either way has the same result. However, I wonder if we should >> change this example to use current_user for clarity. It does look >> more like it's intended to be a variable or column reference than >> a built-in function. > Agreed, and "user" is a hard search term to use for discovering what it is. > +1 > for changing to current_user. OK, I'll take care of this later today. regards, tom lane
Re: Typo in PL/pgSQL trigger Example 43.4?
> On 7 Oct 2023, at 22:22, Tom Lane wrote: > > "David G. Johnston" writes: >> On Sat, Oct 7, 2023 at 11:11 AM Kirk Parker wrote: >>> INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; -- <= ARGUMENT IN >>> QUESTION >>> The emp_audit table has a column named 'userid', which in actual usage >>> (next-to-last line quoted) is populated by 'user' which seems undefined in >>> the context. Was that intended to be 'current_user', or am I missing >>> something? > >> user is a valid pseudo-function: >> https://www.postgresql.org/docs/current/functions-info.html#FUNCTIONS-INFO-SESSION > > Yeah, either way has the same result. However, I wonder if we should > change this example to use current_user for clarity. It does look > more like it's intended to be a variable or column reference than > a built-in function. Agreed, and "user" is a hard search term to use for discovering what it is. +1 for changing to current_user. -- Daniel Gustafsson
Re: Typo in PL/pgSQL trigger Example 43.4?
On Sat, Oct 7, 2023 at 1:22 PM Tom Lane wrote: > "David G. Johnston" writes: > > On Sat, Oct 7, 2023 at 11:11 AM Kirk Parker wrote: > >> INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; -- <= ARGUMENT IN > QUESTION > >> The emp_audit table has a column named 'userid', which in actual usage > >> (next-to-last line quoted) is populated by 'user' which seems undefined > in > >> the context. Was that intended to be 'current_user', or am I missing > >> something? > > > user is a valid pseudo-function: > > > https://www.postgresql.org/docs/current/functions-info.html#FUNCTIONS-INFO-SESSION > > Yeah, either way has the same result. However, I wonder if we should > change this example to use current_user for clarity. It does look > more like it's intended to be a variable or column reference than > a built-in function. > > Since the previous example on the page uses 'current_user' (which I suppose is why I didn't look further to see if 'user' was also a function), perhaps that would be a good idea. > >
Re: Typo in PL/pgSQL trigger Example 43.4?
"David G. Johnston" writes: > On Sat, Oct 7, 2023 at 11:11 AM Kirk Parker wrote: >> INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; -- <= ARGUMENT IN >> QUESTION >> The emp_audit table has a column named 'userid', which in actual usage >> (next-to-last line quoted) is populated by 'user' which seems undefined in >> the context. Was that intended to be 'current_user', or am I missing >> something? > user is a valid pseudo-function: > https://www.postgresql.org/docs/current/functions-info.html#FUNCTIONS-INFO-SESSION Yeah, either way has the same result. However, I wonder if we should change this example to use current_user for clarity. It does look more like it's intended to be a variable or column reference than a built-in function. regards, tom lane
Re: Typo in PL/pgSQL trigger Example 43.4?
On Sat, Oct 7, 2023 at 11:11 AM Kirk Parker wrote: > > INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; -- <= > ARGUMENT IN QUESTION > The emp_audit table has a column named 'userid', which in actual usage > (next-to-last line quoted) is populated by 'user' which seems undefined in > the context. Was that intended to be 'current_user', or am I missing > something? > user is a valid pseudo-function: https://www.postgresql.org/docs/current/functions-info.html#FUNCTIONS-INFO-SESSION David J.
Typo in PL/pgSQL trigger Example 43.4?
The PL/pgSQL page on triggers ( https://www.postgresql.org/docs/16/plpgsql-trigger.html ) contains the following example (I'm excerpting only the essential parts here): Example 43.4. A PL/pgSQL Trigger Function for Auditing ... CREATE TABLE emp_audit( operation char(1) NOT NULL, stamp timestamp NOT NULL, userid text NOT NULL, -- <= COLUMN IN QUESTION empnametext NOT NULL, salary integer ); CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$ BEGIN -- -- Create a row in emp_audit to reflect the operation performed on emp, -- making use of the special variable TG_OP to work out the operation. -- IF (TG_OP = 'DELETE') THEN INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; -- <= ARGUMENT IN QUESTION -- similar code with same issue follows for the other TG_OPs... The emp_audit table has a column named 'userid', which in actual usage (next-to-last line quoted) is populated by 'user' which seems undefined in the context. Was that intended to be 'current_user', or am I missing something?