【问题标题】:Parallel queries for a single connection in PostgreSQL 9.6PostgreSQL 9.6 中单个连接的并行查询
【发布时间】:2017-03-06 14:54:02
【问题描述】:

我找到了有关 PostgreSQL 9.6 所做的并行查询和并行顺序扫描的文档,但我找不到任何关于 PostgreSQL 9.6 是否可以在 单个 连接上同时运行多个查询的信息(我知道我可以打开多个连接并同时运行查询)。

假设我有 2 个要执行的查询(在单个连接上):
SELECT * FROM table1;
SELECT * FROM table2;

PostgreSQL 服务器端有什么方法可以让这些查询同时运行吗?

来源将不胜感激。

【问题讨论】:

  • 单个连接(会话)只能在给定时间执行单个语句。如果要并行运行两个不同的查询,则需要两个连接(这在任何其他 DBMS 中没有什么不同)
  • 并行顺序扫描听起来像是 DBMS 用来优化单个查询的技术,而不是应用程序开发人员可用的功能。如果您链接到找到此内容的文档,我们可能会提供更多见解。
  • @PhilipCouling 我不好说 PostgreSQL 提供这些。我的意思是 DBMS 使用这些技术来优化单个查询。 Here is the link

标签: postgresql


【解决方案1】:

使用pg_send_querypg_get_result,您可以在PHP 中异步执行多个查询,如下所示:

<?php
  $dbconn = pg_connect("dbname=publisher") or die("Could not connect");

  if (!pg_connection_busy($dbconn)) {
      pg_send_query($dbconn, "select * from authors; select count(*) from authors;");
  }

  $res1 = pg_get_result($dbconn);
  echo "First call to pg_get_result(): $res1\n";
  $rows1 = pg_num_rows($res1);
  echo "$res1 has $rows1 records\n\n";

  $res2 = pg_get_result($dbconn);
  echo "Second call to pg_get_result(): $res2\n";
  $rows2 = pg_num_rows($res2);
  echo "$res2 has $rows2 records\n";
?>

更多信息可以参考official page

希望对你有所帮助

【讨论】:

  • 除非 PHP 默默地为此创建两个不同的物理连接,否则查询仍不会并行运行。 Postgres 后端根本不支持,单个连接一次只能运行一个语句。
  • @a_horse_with_no_name 好吧,我是这么认为的。但是我在网上搜索了一下,我发现了。你是说 PHP 手册在这方面有误导吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2016-03-28
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多