如何在特定的时间间隔执行PostgreSQL函数?

7nbnzgx9  于 2023-02-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(132)

PostgreSQL中是否有类似于setTimeoutsetTimeInterval的东西,允许在指定的时间间隔执行代码段(FUNCTION)?
据我所知,唯一可以根据某个事件执行FUNCTION的是Triggers,但它不是基于时间的,而是操作驱动的(INSERT / UPDATE / DELETE / TRUNCATE
虽然我可以在应用程序代码中做到这一点,但我更喜欢把它委托给数据库。无论如何,我可以在PostgreSQL中实现这一点?可能是一个扩展?

icnyk63a

icnyk63a1#

是的,有一种方法可以做到这一点,它叫做pg_sleep

CREATE OR REPLACE FUNCTION my_function() RETURNS VOID AS $$
BEGIN
    LOOP
        PERFORM pg_sleep(1);
        RAISE NOTICE 'This is a notice!';
    END LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT my_function();

这将每秒发出通知。您也可以让它执行其他操作而不是发出通知。

  • 或 *

您可以使用PostgreSQL的后台工作器功能。
下面是后台工作线程的一个简单示例,它每5秒打印一条消息:

CREATE OR REPLACE FUNCTION print_message() RETURNS VOID AS $$
BEGIN
  RAISE NOTICE 'Hello, world!';
END;
$$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION schedule_print_message() RETURNS VOID AS $$
DECLARE
  job_id BIGINT;
BEGIN
  SELECT bgw_start_recurring_job(
    'print-message',
    'print_message',
    '5 seconds'
  ) INTO job_id;
END;
$$ LANGUAGE plpgsql;

SELECT schedule_print_message();

相关问题