Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. const pg = require('pg');
  2. let client = new pg.Client({user: '', database: '', host: '', password: '', port: 5432});
  3. client.connect();
  4. client.query('LISTEN progress_updates');
  5. client.on('notification', function(data) {
  6. console.log('notification: ', data);
  7. });
  8.  
  9. -- table
  10. drop table if exists operations;
  11. create table progress ( id serial primary key, percent int default 0 );
  12.  
  13. -- stored procedure
  14. CREATE OR REPLACE PROCEDURE my_stored_proc() language plpgsql
  15. AS $$
  16. DECLARE
  17. progress_id int;
  18. BEGIN
  19. insert into progress (percent) values (0) returning id into progress_id;
  20. commit;
  21.  
  22. update progress set percent= 10 where id = progress_id ;
  23. commit;
  24. perform pg_notify('progress_updates', '{"percent": 10}');
  25. -- notify progress_updates, '{"percent": 10}'
  26. perform pg_sleep(5);
  27.  
  28. update progress set percent= 30 where id = progress_id ;
  29. commit;
  30. perform pg_notify('progress_updates', '{"percent": 30}');
  31. perform pg_sleep(5);
  32.  
  33. update progress set percent= 70 where id = progress_id ;
  34. commit;
  35. perform pg_notify('progress_updates', '{"percent": 70}');
  36. perform pg_sleep(5);
  37.  
  38. update progress set percent= 100 where id = progress_id ;
  39. commit;
  40. perform pg_notify('progress_updates', '{"percent": 100}');
  41. END;
  42. $$;
  43.  
  44. -- trigger
  45. create or replace function notify_progress_trigger() returns trigger
  46. language plpgsql
  47. as
  48. $$
  49. DECLARE
  50. payload TEXT;
  51. BEGIN
  52. raise notice 'TRIGGERED ON %', NOW();
  53. payload := '{"percent": ' || NEW.percent || '}';
  54. perform pg_notify('progress_updates', payload);
  55. -- execute format('notify progress_updates, ''%s''', payload);
  56. return NEW;
  57. END;
  58. $$;
  59. alter function notify_progress_trigger() owner to postgres;
  60.  
  61. create trigger watched_progress_trigger
  62. after insert or update
  63. on operations
  64. execute procedure notify_progress_trigger();
  65.  
  66. -- Call stored proc manually
  67. call my_stored_proc();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement