Re: Typo in PL/pgSQL trigger Example 43.4?

2023-10-07 Thread Tom Lane
"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?

2023-10-07 Thread David G. Johnston
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?

2023-10-07 Thread Kirk Parker
 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?