it is up to you and how you implement it. eg. a trigger notifies the backend that a new job is in the queue (push) or the backend can regularly check for new jobs (pull). once the backend finishes the job, the row in the queue table can be updated with a flag "DONE" or something like that.
you can use any language you want in the backend for notifications, or use even ZMQ (for example https://github.com/SpiderOak/skeeter) with a DEALER pattern to have more than one worker. or other implementations or postgres extensions (like pg_cron).
very flexible and is set up in less than an hour.