Re: Programmatic Trigger Create

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Niko Ware <nikowareinc(at)gmail(dot)com>, pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Programmatic Trigger Create
Date: 2021-03-20 17:13:50
Message-ID: 5566ea3a-e0ae-8595-a13f-ec525e7c9eeb@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 3/20/21 10:03 AM, Niko Ware wrote:
> I would like to programmatically create audit trail functions which are
> called by triggers for custom user tables. This will be used for audit
> trail generation in our application. The user is able to define a custom
> table. Therefore, I need a custom audit trail function. The audit trail
> function outputs the row changes in human readable form (e.g., "process
> name changed from "my process" to "your process"  by user xxxx on host xxx".
>
> The basic steps are as follows:
>
> 1. User defines the table
> 2. Create table via  EXEC SQL EXECUTE IMMEDIATE :my_sql_cmd
> 3. Programatically constructs the audit trail function for
> insert/update/delete.
> 4. Create the function via EXEC SQL EXECUTE IMMEDIATE :my_sql_cmd
> 5. Create the trigger via EXEC SQL EXECUTE IMMEDIATE :my_sql_cmd
>
> Here is an example in function source which is passed to "EXEC SQL
> EXECUTE IMMEDIATE" via char*:

In what program is:

EXEC SQL EXECUTE IMMEDIATE :my_sql_cmd

being done?

>
>
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> 10
> 11
> 12
>
> CREATE OR REPLACE FUNCTION name_changes_log()
> RETURNS TRIGGER AS
> $BODY$
> BEGIN
> IF NEW.name <> OLD.name THEN
> INSERT INTO kids_audit(kids_id,kids_name,modified_on)
> VALUES(OLD.id,OLD.name,now());
> END IF;
>
> RETURN NEW;
> END;
> $BODY$ LANGUAGE plpgsql;
>
>
> The "execute immediate" succeeds, but the function is not created. The
> application is connected to the database as a user which has permission
> to create functions.
>
> I could output the function text to a file and then use "psql" to
> process the "create trigger", but this seems a bit hacky.
>
> Thanks in advance,
> Thomas
>
>
>

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2021-03-20 17:23:21 Re: Programmatic Trigger Create
Previous Message Niko Ware 2021-03-20 17:03:58 Programmatic Trigger Create