From: | Francois Payette <francoisp(at)netmosphere(dot)net> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | MYSQL_FDW trigger BEFORE UPDATE changes to NEW on a col not in the update statement don't go through |
Date: | 2020-04-21 23:09:03 |
Message-ID: | A38DD5ED-0DD3-4CCA-9A64-08CE10675344@netmosphere.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi All,
I was pleasantly surprised to see that triggers can be created on FDW tables. I'm running into a problem.
I create a trigger on an imported foreign table. In the procedure, I change the value of a column that is not in the triggering update statement. This change does not make it to the mysql side.
CREATE OR REPLACE FUNCTION aatrigger_up() returns trigger
AS $$
DECLARE
BEGIN
IF NOT(row_to_json(NEW)->'pgrti' is NULL) THEN
NEW.pgrti = 2000000000*random();
END IF;
RAISE NOTICE 'aarigger_up %', row_to_json(NEW)::text;
return NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER aarigger_up BEFORE UPDATE ON mysql.users FOR EACH ROW EXECUTE PROCEDURE aarigger_up();
update mysql.users set email = 'admin(at)example(dot)com' where id = 1;
I can see that the value for pgrti is updated in the NOTICE in postgres. In mysql the value is not updated. If I add the target col to the statement it does go through
update mysql.users set email = 'admin(at)example(dot)com', pgrti=0 where id = 1;
I need this to work to be able to detect CRUD coming from PG in a little deamon that calls pg_triggers for updates coming from mysqld; without a means to detect changes originating from pg the triggers would fire twice. Any idea where I'd change MYSQL_FDW to do this (also add fields that are updated in the trigger before firing off to mysql)?
I’m seeing in https://github.com/EnterpriseDB/mysql_fdw/blob/master/deparse.c <https://github.com/EnterpriseDB/mysql_fdw/blob/master/deparse.c> in
mysql_deparse_update
That the actual update statement is used to generate the mapping, so any col referred to in triggers would be ignored…
TIA, stay safe!
Francois Payette
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2020-04-21 23:13:02 | Re: forgotten initalization of a variable |
Previous Message | Michael Paquier | 2020-04-21 23:07:52 | Re: [BUG] non archived WAL removed during production crash recovery |