可以看到走了两个Workers。
下边看一下insert into select:
可以看到并没有Workers的指示,没有启用并行查询。
即使开启强制并行,也无法走并行查询。
原因在官方文档有写:
The query writes any data or locks any database rows. If a query contains a data-modifying operation either at the top level or within a CTE, no parallel plans for that query will be generated. As an exception, the commands CREATE TABLE … AS, SELECT INTO, and CREATE MATERIALIZED VIEW which create a new table and populate it can use a parallel plan.
解决方案有如下三种:
1.select into 2.create table as 3.或者通过导入导出的方式,例如:一些场景下也会比非并行快。
补充:POSTGRESQL: 动态SQL语句中不能使用SELECT INTO?
我的数据库版本是 PostgreSQL 8.4.7 。 下面是出错的存储过程:
执行后出现这样的错误:
SQL error:
ERROR: EXECUTE of SELECT ... INTO is not implemented
CONTEXT: PL/pgSQL function "func_getnextbigid" line 6 at EXECUTE statement
改成这样的就对了:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。如有错误或未考虑完全的地方,望不吝赐教。