【问题标题】:Spawn new process from within Postgres function从 Postgres 函数中生成新进程
【发布时间】:2013-11-14 04:24:36
【问题描述】:

是否可以在 postgress 函数中生成一个新进程来运行函数?还是根据文档,我是否仅限于发起请求的每个数据库连接一个线程?

单独的进程正在创建和填充动态命名的表,不返回任何数据,并且独立于生成函数。在 Postgresql 8.3 上。

【问题讨论】:

标签: multithreading postgresql plpgsql postgresql-8.3


【解决方案1】:

程序语言应该可以解决问题,例如一个不受信任的,例如PL/PerlU

其他可能的选项包括Pl/Python, Pl/Ruby, Pl/SH...

【讨论】:

  • 我正在使用 plpgsql。这还不够吗?
  • SMan:不是真的... Postgres 阻塞,直到查询返回一些东西。您想在不同的进程中运行查询,并将其分离,这样它就不会在其父进程完成时死亡。
【解决方案2】:

不要这样做。如果您产生一个单独的进程,它将弄乱您拥有的任何事务假设。在同一个过程中完成所有操作。如果必须这样做,请查看 Listen/Notify 作为让单独的守护进程知道工作的一种方式,并注意 NOTIFY 将在事务提交时引发。

【讨论】:

    【解决方案3】:

    听起来您想在 PL/PgSQL 过程中运行异步查询。如果是这样,您可以为此使用dblink。甚至可能在您正在运行的古老且不受支持的版本中。见手册;您想要的功能是来自dblink 扩展的dblink_send_query

    请记住,您以这种方式运行的任何 SQL 都将在其自己的事务中运行。它会独立于您的主事务提交或回滚,并且无法看到您的主事务所做的任何未提交的更改。

    从客户端应用程序中执行此类操作通常会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 2018-07-23
      • 2018-06-01
      相关资源
      最近更新 更多