]> Some of my projects - localmylist.git/commitdiff
Filter unnecessary update notifications.
authorAPTX <marek321@gmail.com>
Mon, 9 Nov 2015 15:09:57 +0000 (16:09 +0100)
committerAPTX <marek321@gmail.com>
Mon, 9 Nov 2015 15:09:57 +0000 (16:09 +0100)
Only updates that actually change a column will trigger a notfication.

localmylist/share/schema/schema.sql

index 7778218792b37fe86f7ebf38c9a1773bb8dc87c4..873c2a52771b9495aebb7ab2952179513b51a1e3 100644 (file)
@@ -373,19 +373,31 @@ CREATE OR REPLACE RULE watched_directory_insert_notify_rule AS
 
 -- Update rules
 CREATE OR REPLACE RULE anime_update_notify_rule AS
-       ON UPDATE TO anime DO SELECT pg_notify('rename_data_changed', ''),
+       ON UPDATE TO anime
+       WHERE old.aid = new.aid
+               AND (old.* IS DISTINCT FROM new.*)
+       DO SELECT pg_notify('rename_data_changed', ''),
                pg_notify('anime_update', new.aid::text);
 
 CREATE OR REPLACE RULE episode_update_notify_rule AS
-       ON UPDATE TO episode DO SELECT pg_notify('rename_data_changed', ''),
+       ON UPDATE TO episode
+       WHERE old.eid = new.eid
+               AND (old.* IS DISTINCT FROM new.*)
+       DO SELECT pg_notify('rename_data_changed', ''),
                pg_notify('episode_update', new.eid::text || ',' || new.aid::text);
 
 CREATE OR REPLACE RULE file_update_notify_rule AS
-       ON UPDATE TO file DO SELECT pg_notify('rename_data_changed', ''),
+       ON UPDATE TO file
+       WHERE old.fid = new.fid
+               AND (old.* IS DISTINCT FROM new.*)
+       DO SELECT pg_notify('rename_data_changed', ''),
                pg_notify('file_update', new.fid::text || ',' || new.eid::text || ',' || new.aid::text);
 
 CREATE OR REPLACE RULE file_location_update_notify_rule AS
-       ON UPDATE TO file_location DO SELECT pg_notify('rename_data_changed', ''),
+       ON UPDATE TO file_location
+       WHERE old.location_id = new.location_id
+               AND (old.* IS DISTINCT FROM new.*)
+       DO SELECT pg_notify('rename_data_changed', ''),
                pg_notify('file_location_update', new.location_id::text || ',' || new.fid::text);
 
 CREATE OR REPLACE RULE watched_directory_update_notify_rule AS