\set ECHO none -- wait for other processes, wait max 100 sec do $$ declare c int; begin if pg_try_advisory_xact_lock(1) then for i in 1..1000 loop perform pg_sleep(0.1); c := (select count(*) from pg_locks where locktype = 'advisory' and objid = 1 and not granted); if c = 2 then return; end if; end loop; else perform pg_advisory_xact_lock(1); end if; end; $$; \set ECHO all /* Register alerts */ SELECT dbms_alert.register('a1'); SELECT dbms_alert.register('a2'); /* Test: multisession waitone */ SELECT dbms_alert.waitone('a1',20); /* Test: multisession waitany */ SELECT dbms_alert.waitany(10); /* cleanup */ SELECT dbms_alert.removeall();