Hi, out of curiosity I created the following setup, all with 9.6 and pglogical.
D1 is configured as provider with a replication set that contains only 1 table. Only inserts are replicated. D2 is configured as subscriber for that replication set. Replication works, all inserts on D2 arrive also on D2. Now, I add the following always firing trigger to the table: CREATE OR REPLACE FUNCTION notify.trgfn () RETURNS trigger AS $def$ BEGIN PERFORM pg_notify(NEW.channel, NEW.msg); RETURN NULL; END $def$ LANGUAGE plpgsql; CREATE TRIGGER trg BEFORE INSERT ON notify.notify FOR EACH ROW EXECUTE PROCEDURE notify.trgfn(); ALTER TABLE notify.notify ENABLE ALWAYS TRIGGER trg; As you can see, the trigger function should prevent the actual insert and only call pg_notify(). In principle this works but there is a catch. Notifications generated this way are only delivered after another notification genuinely generated on the subscriber node. The channel of this notification does not matter. If I replace PERFORM pg_notify() by RAISE NOTICE I see the message immediately in the log. First I thought this is related to session_replication_role=replica. So, I tried the direct insert on D2 with this setting using psql. The notification was fired immediately. Also, whether the trigger prevents or allows the actual insert does not matter. I tried to create the trigger function as SECURITY DEFINER and with a specific search_path. That didn't help either. By now I am thinking there must be something missing in pglogical. Thanks, Torsten