如何异步 运行 Postgres 中的代码块(如作业)?

How to run block of code in Postgres asynchronously (like a job)?

我们可以在当前会话之外执行一段代码吗? 换句话说,将执行委托给另一个工作线程,类似于 Oracle 中的 dbms_job.submit

我只找到了涉及 Cron 等外部工具的解决方案,但没有看到任何使用 PostgreSQL DBMS 本身来完成的选项。

我想 运行 不阻塞当前会话的简单长 运行ning 块示例:

DO
$do$
begin
   FOR i IN 1..1000000
   loop
      // some long running inserts
      insert into my_table(x) values (i);
      commit;
   end loop;
end $do$;

在单个 PostgreSQL 数据库会话中一次 运行 只能有一个语句。解决办法是开启第二个session:然后一个session可以执行脚本,你可以在另一个session中同时做其他工作。

您应该看看这个新的 PostgreSQL 扩展 pg_dbms_job,它实现了 Oracle DBMS_JOB 提供的所有功能,使用的过程与 dbms_job.submit() 相同。