Re: Does trigger only accept functions?

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: veem v <veema0000(at)gmail(dot)com>, pgsql-general <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Does trigger only accept functions?
Date: 2024-06-10 20:20:45
Message-ID: 96d932ed-5883-4329-be64-9c4c20960365@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 6/10/24 12:17, veem v wrote:
> Hi, It's version 15.4 of postgres. We have a requirement to have the
> audit enabled for the delete queries on the base table. And for that we
> are planning to have one audit table created for each base table and
> have triggers on each of the base tables to be fired on delete which
> will insert records into the audit table.
>
> But I see the trigger is not accepting the insert query directly, rather
> it's asking to call a function and to put the business logic inside that
> function, something as below. So does that mean, to enable audit on the
> ~50 base table ,  we will have ~50 functions to be created and also they
> need to be called from ~50 triggers? or any other better approach exists
> to handle this?

The below tells you what you need:

https://www.postgresql.org/docs/15/sql-createtrigger.html

That is either a function or a procedure.

You could create one function with dynamic SQL and call that from each
trigger. Yes there would need to be trigger on each table in that case.

As to alternatives:

https://www.pgaudit.org/

>
> CREATE OR REPLACE FUNCTION log_deletes_source_table()
> RETURNS TRIGGER AS $$
> BEGIN
>     INSERT INTO source_table_delete_history (record_id,
> delete_timestamp, col1, col2,col3)
>     VALUES (OLD.id, current_timestamp, old.col1,old.col2,old.col3);
>     RETURN OLD;
> END;
> $$ LANGUAGE plpgsql;
>
> -- Trigger for deletes
> CREATE TRIGGER before_delete
> BEFORE DELETE ON source_table
> FOR EACH ROW EXECUTE FUNCTION log_deletes_source_table ();
>
> Regards
> Veem

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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Ron Johnson 2024-06-10 20:25:54 Re: Multiple tables row insertions from single psql input file
Previous Message Adrian Klaver 2024-06-10 20:13:43 Re: libpq v17 PQsocketPoll timeout is not granular enough