Hi Guys,

i am using sqls like below to track ddl changes:

CREATE TABLE track_ddl
> (
>   event text,
>   command text,
>   ddl_time timestamptz,
>   usr text
> );
> CREATE OR REPLACE FUNCTION track_ddl_function()
> RETURNS event_trigger
> AS
> $$
> BEGIN
>   INSERT INTO track_ddl values(tg_tag, tg_event, now(), session_user);
>   RAISE NOTICE 'DDL logged';
> END
> $$ LANGUAGE plpgsql SECURITY DEFINER;
>


> CREATE EVENT TRIGGER track_ddl_event ON ddl_command_start
> WHEN TAG IN ('CREATE TABLE', 'DROP TABLE', 'ALTER TABLE')
> EXECUTE PROCEDURE track_ddl_function();
> CREATE TABLE event_check(i int);
> SELECT * FROM track_ddl;


And and drop table is ok. But when i am altering i would like to know new
vales and old values like when i am catching DML changes:

CREATE OR REPLACE FUNCTION change_trigger() RETURNS trigger AS $$
>
>
>>         BEGIN
>
>
>>                 IF      TG_OP = 'INSERT'
>
>
>>                 THEN
>
>
>>                         INSERT INTO logging.t_history (tabname,
>> schemaname, operation, who, new_val)
>
>
>>                                 VALUES (TG_RELNAME, TG_TABLE_SCHEMA,
>> TG_OP, current_user, row_to_json(NEW));
>
>
>>                         RETURN NEW;
>
>
>>                 ELSIF   TG_OP = 'UPDATE'
>
>
>>                 THEN
>
>
>>                         INSERT INTO logging.t_history (tabname,
>> schemaname, operation, who, new_val, old_val)
>
>
>>                                 VALUES (TG_RELNAME, TG_TABLE_SCHEMA,
>> TG_OP, current_user,
>
>
>>                                         row_to_json(NEW),
>> row_to_json(OLD));
>
>
>>                         RETURN NEW;
>
>
>>                 ELSIF   TG_OP = 'DELETE'
>
>
>>                 THEN
>
>
>>                         INSERT INTO logging.t_history (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;
>
>
>> $$ LANGUAGE 'plpgsql' SECURITY DEFINER;
>
>
It is possible?
Or write function which will tell me all new values in new columns?

I was trying to change sqls like here:

CREATE TABLE track_ddl
> (
>   event text,
>   command text,
>   ddl_time timestamptz,
>   usr json
> );
> CREATE OR REPLACE FUNCTION track_ddl_function()
> RETURNS event_trigger
> AS
> $$
> BEGIN
>   INSERT INTO track_ddl values(tg_tag, tg_event, now(), row_to_json(NEW));
>   RAISE NOTICE 'DDL logged';
> END
> $$ LANGUAGE plpgsql SECURITY DEFINER;


but this is not working.

Please help,
Jacek

Reply via email to