我正在使用PostgreSQL的Server Programming Interface(SPI)来构建我的postgres扩展并执行我的查询。请参见this详细示例,或以下简单代码示例:
int ret = SPI_exec("SELECT * FROM ....", 0);
[我们知道PostgreSQL具有并行查询支持功能,其中使用多个处理器并行执行查询。由于SPI接口隐藏了相当多的复杂性(通信/锁/光标/等),我想知道以这种方式执行查询是否以某种方式限制了此并行查询功能?显然,如果确实存在限制,则可能不值得使用。
您的示例中的特定用法不会抑制并行性,可以通过运行SELECT execq('select count(*) from pgbench_accounts', 0);
并通过auto_explain观察计划来看出。 (我运行过pgbench -i -s20
,所以有2e6行)。
[其他SPI方法,如涉及游标的方法,将禁止并行化。