OSDN Git Service

Support PostgreSQL 13
authorKyotaro Horiguchi <horikyoga.ntt@gmail.com>
Wed, 7 Oct 2020 08:21:43 +0000 (17:21 +0900)
committerKyotaro Horiguchi <horikyoga.ntt@gmail.com>
Wed, 7 Oct 2020 08:23:24 +0000 (17:23 +0900)
Support PostgreSQL 13, with compression of some of the node new in 13.

expected/convert.out
json2sql.pl
makeplanfile.sql
pg_store_plans.c
pgsp_json.c
pgsp_json_int.h
pgsp_json_text.c
pgsp_json_text.h
sql/convert.sql

index f606bf3..0be0619 100644 (file)
@@ -14,8 +14,8 @@ UPDATE plans SET splan = pg_store_plans_shorten(lplan);
 SELECT splan FROM plans WHERE id in (-1, -2);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     splan                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- {"p":0,"l":0,"t":"a","t":"b","t":"c","t":"d","t":"e","t":"f","t":"g","t":"h","t":"i","t":"j","t":"k","t":"l","t":"m","t":"n","t":"o","t":"p","t":"q","t":"r","t":"s","t":"t","t":"u","t":"v","t":"w","t":"x","t":"y","t":"z","t":"0","t":"1","t":"2","t":"3","t":"4","t":"5","t":"B","t":"6","t":"7","t":"8","t":"9","t":"A","h":"o","h":"i","h":"s","h":"m","h":"I","h":"S","d":"b","d":"n","d":"f","i":0,"n":0,"f":0,"c":0,"s":0,"a":0,"o":"[]","m":"a","g":"p","g":"s","g":"h","g":"m","j":"i","j":"l","j":"f","j":"r","j":"s","j":"a","b":"i","b":"I","b":"e","b":"E","e":"h","e":"q","e":"e","e":"E","e":"s","k":"a","-":"a","=":"a","\\":"a","~":"a","|":"a","`":"true","{":"0","}":"0","[":"x","]":"0","5":"a","6":"a","7":"a","8":"a","9":"a","0":"a","%":"a","@":"a","^":0,"+":0,"_":"a","!":"i","!":"d","!":"u","q":"a","r":0,"u":0,"v":0,"w":0,"x":0,"y":0,"1":0,"2":0,"3":0,"4":0,"A":0,"B":0,"C":0,"D":0,"E":0,"F":0,"G":0,"H":0,"I":0,"J":0,"K":0,"L":0,"M":0,"N":0,"O":0,"P":0,"Q":0,"R":0,"S":"d","S":"m","T":0,"U":0,"*":0}
  {"V":0,"W":0,"X":0,"Y":0,"Z":0,"z":0,"#":0,"$":0,"&":0,"(":0,")":0,"_":"dummy","%":"NOTHING","@":"ia","^":123,"+":234,":":"system",";":["'10'::real"],"<":"'0'::double precision","[":"dummy","]":0}
+ {"p":0,"l":0,"t":"a","t":"b","t":"c","t":"d","t":"e","t":"f","t":"g","t":"h","t":"i","t":"j","t":"k","t":"l","t":"m","t":"n","t":"o","t":"p","t":"q","t":"r","t":"s","t":"t","t":"u","t":"v","t":"w","t":"x","t":"y","t":"z","t":"0","t":"1","t":"2","t":"3","t":"4","t":"5","t":"B","t":"6","t":"7","t":"8","t":"9","t":"A","h":"o","h":"i","h":"s","h":"m","h":"I","h":"S","d":"b","d":"n","d":"f","i":0,"n":0,"f":0,"c":0,"s":0,"a":0,"o":"[]","m":"a","g":"p","g":"s","g":"h","g":"m","j":"i","j":"l","j":"f","j":"r","j":"s","j":"a","b":"i","b":"I","b":"e","b":"E","e":"h","e":"q","e":"e","e":"E","e":"s","k":"a","-":"a","=":"a","\\":"a","~":"a","|":"a","`":"true","{":"0","}":"0","[":"x","]":"0","5":"a","6":"a","7":"a","8":"a","9":"a","0":"a","%":"a","@":"a","^":0,"+":0,"_":"a","!":"i","!":"d","!":"u","q":"a","r":0,"u":0,"v":0,"w":0,"x":0,"y":0,"1":0,"2":0,"3":0,"4":0,"A":0,"B":0,"C":0,"D":0,"E":0,"F":0,"G":0,"H":0,"I":0,"J":0,"K":0,"L":0,"M":0,"N":0,"O":0,"P":0,"Q":0,"R":0,"S":"d","S":"m","T":0,"U":0,"*":0}
 (2 rows)
 
 ###### JSON properties round-trip test: !!! This shouldn't return a row
@@ -38,17 +38,17 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
     Schema: "public"
     Alias: "tt1"
     Startup Cost: 0.00
-    Total Cost: 10.00
-    Plan Rows: 1000
+    Total Cost: 100.01
+    Plan Rows: 10001
     Plan Width: 40
-    Actual Startup Time: 348.383
-    Actual Total Time: 348.383
+    Actual Startup Time: 307.054
+    Actual Total Time: 307.055
     Actual Rows: 0
     Actual Loops: 1
-    Shared Hit Blocks: 29732
-    Shared Read Blocks: 87
+    Shared Hit Blocks: 29736
+    Shared Read Blocks: 3
     Shared Dirtied Blocks: 85
-    Shared Written Blocks: 0
+    Shared Written Blocks: 84
     Local Hit Blocks: 0
     Local Read Blocks: 0
     Local Dirtied Blocks: 0
@@ -63,11 +63,11 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
         Schema: "pg_catalog"
         Alias: "a"
         Startup Cost: 0.00
-        Total Cost: 10.00
-        Plan Rows: 1000
+        Total Cost: 100.01
+        Plan Rows: 10001
         Plan Width: 40
-        Actual Startup Time: 2.530
-        Actual Total Time: 10.954
+        Actual Startup Time: 3.739
+        Actual Total Time: 12.801
         Actual Rows: 10001
         Actual Loops: 1
         Output:
@@ -85,17 +85,29 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
         Local Written Blocks: 0
         Temp Read Blocks: 0
         Temp Written Blocks: 0
-  Planning Time: 0.063
+  
+- Planning:
+    Shared Hit Blocks: 0
+    Shared Read Blocks: 0
+    Shared Dirtied Blocks: 0
+    Shared Written Blocks: 0
+    Local Hit Blocks: 0
+    Local Read Blocks: 0
+    Local Dirtied Blocks: 0
+    Local Written Blocks: 0
+    Temp Read Blocks: 0
+    Temp Written Blocks: 0
+  Planning Time: 0.064
   Triggers:
     - Trigger Name: "tt1_trig_1"
       Relation: "tt1"
-      Time: 120.303
+      Time: 80.641
       Calls: 10001
     - Trigger Name: "tt1_trig_2"
       Relation: "tt1"
-      Time: 95.115
+      Time: 63.621
       Calls: 10001
-  Execution Time: 349.084
+  Execution Time: 308.848
 
 =======
 ### yaml-short       ###### Plan 2: Update, Trigger
@@ -110,14 +122,14 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
     Total Cost: 137.50
     Plan Rows: 6600
     Plan Width: 46
-    Actual Startup Time: 332.064
-    Actual Total Time: 332.064
+    Actual Startup Time: 491.114
+    Actual Total Time: 491.115
     Actual Rows: 0
     Actual Loops: 1
-    Shared Hit Blocks: 50276
-    Shared Read Blocks: 108
-    Shared Dirtied Blocks: 108
-    Shared Written Blocks: 0
+    Shared Hit Blocks: 50222
+    Shared Read Blocks: 0
+    Shared Dirtied Blocks: 81
+    Shared Written Blocks: 81
     Local Hit Blocks: 0
     Local Read Blocks: 0
     Local Dirtied Blocks: 0
@@ -135,8 +147,8 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
         Total Cost: 137.50
         Plan Rows: 6600
         Plan Width: 46
-        Actual Startup Time: 0.031
-        Actual Total Time: 9.136
+        Actual Startup Time: 0.052
+        Actual Total Time: 20.371
         Actual Rows: 10001
         Actual Loops: 1
         Output:
@@ -154,17 +166,29 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
         Local Written Blocks: 0
         Temp Read Blocks: 0
         Temp Written Blocks: 0
-  Planning Time: 0.204
+  
+- Planning:
+    Shared Hit Blocks: 8
+    Shared Read Blocks: 0
+    Shared Dirtied Blocks: 0
+    Shared Written Blocks: 0
+    Local Hit Blocks: 0
+    Local Read Blocks: 0
+    Local Dirtied Blocks: 0
+    Local Written Blocks: 0
+    Temp Read Blocks: 0
+    Temp Written Blocks: 0
+  Planning Time: 0.220
   Triggers:
     - Trigger Name: "tt1_trig_1"
       Relation: "tt1"
-      Time: 98.808
+      Time: 95.170
       Calls: 10001
     - Trigger Name: "tt1_trig_2"
       Relation: "tt1"
-      Time: 71.353
+      Time: 72.762
       Calls: 10001
-  Execution Time: 332.250
+  Execution Time: 492.534
 
 =======
 ### yaml-short       ###### Plan 3: Delete
@@ -179,8 +203,8 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
     Total Cost: 305.20
     Plan Rows: 65
     Plan Width: 6
-    Actual Startup Time: 7.444
-    Actual Total Time: 7.444
+    Actual Startup Time: 15.676
+    Actual Total Time: 15.678
     Actual Rows: 0
     Actual Loops: 1
     Shared Hit Blocks: 1109
@@ -204,8 +228,8 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
         Total Cost: 305.20
         Plan Rows: 65
         Plan Width: 6
-        Actual Startup Time: 2.885
-        Actual Total Time: 5.893
+        Actual Startup Time: 4.301
+        Actual Total Time: 12.640
         Actual Rows: 1000
         Actual Loops: 1
         Output:
@@ -222,9 +246,21 @@ SELECT '### '||'yaml-short       '||title||E'\n'||
         Local Written Blocks: 0
         Temp Read Blocks: 0
         Temp Written Blocks: 0
-  Planning Time: 0.104
+  
+- Planning:
+    Shared Hit Blocks: 0
+    Shared Read Blocks: 6
+    Shared Dirtied Blocks: 0
+    Shared Written Blocks: 0
+    Local Hit Blocks: 0
+    Local Read Blocks: 0
+    Local Dirtied Blocks: 0
+    Local Written Blocks: 0
+    Temp Read Blocks: 0
+    Temp Written Blocks: 0
+  Planning Time: 0.214
   Triggers:
-  Execution Time: 7.583
+  Execution Time: 16.001
 ##################
 SELECT '### '||'xml-short        '||title||E'\n'||
   pg_store_plans_xmlplan(splan)
@@ -240,17 +276,17 @@ SELECT '### '||'xml-short        '||title||E'\n'||
       <Schema>public</Schema>
       <Alias>tt1</Alias>
       <Startup-Cost>0.00</Startup-Cost>
-      <Total-Cost>10.00</Total-Cost>
-      <Plan-Rows>1000</Plan-Rows>
+      <Total-Cost>100.01</Total-Cost>
+      <Plan-Rows>10001</Plan-Rows>
       <Plan-Width>40</Plan-Width>
-      <Actual-Startup-Time>348.383</Actual-Startup-Time>
-      <Actual-Total-Time>348.383</Actual-Total-Time>
+      <Actual-Startup-Time>307.054</Actual-Startup-Time>
+      <Actual-Total-Time>307.055</Actual-Total-Time>
       <Actual-Rows>0</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
-      <Shared-Hit-Blocks>29732</Shared-Hit-Blocks>
-      <Shared-Read-Blocks>87</Shared-Read-Blocks>
+      <Shared-Hit-Blocks>29736</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>3</Shared-Read-Blocks>
       <Shared-Dirtied-Blocks>85</Shared-Dirtied-Blocks>
-      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Shared-Written-Blocks>84</Shared-Written-Blocks>
       <Local-Hit-Blocks>0</Local-Hit-Blocks>
       <Local-Read-Blocks>0</Local-Read-Blocks>
       <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
@@ -266,11 +302,11 @@ SELECT '### '||'xml-short        '||title||E'\n'||
           <Schema>pg_catalog</Schema>
           <Alias>a</Alias>
           <Startup-Cost>0.00</Startup-Cost>
-          <Total-Cost>10.00</Total-Cost>
-          <Plan-Rows>1000</Plan-Rows>
+          <Total-Cost>100.01</Total-Cost>
+          <Plan-Rows>10001</Plan-Rows>
           <Plan-Width>40</Plan-Width>
-          <Actual-Startup-Time>2.530</Actual-Startup-Time>
-          <Actual-Total-Time>10.954</Actual-Total-Time>
+          <Actual-Startup-Time>3.739</Actual-Startup-Time>
+          <Actual-Total-Time>12.801</Actual-Total-Time>
           <Actual-Rows>10001</Actual-Rows>
           <Actual-Loops>1</Actual-Loops>
           <Output>
@@ -292,22 +328,34 @@ SELECT '### '||'xml-short        '||title||E'\n'||
         </Plan>
       </Plans>
     </Plan>
-    <Planning-Time>0.063</Planning-Time>
+    <Planning>
+      <Shared-Hit-Blocks>0</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>0</Shared-Read-Blocks>
+      <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
+      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Local-Hit-Blocks>0</Local-Hit-Blocks>
+      <Local-Read-Blocks>0</Local-Read-Blocks>
+      <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
+      <Local-Written-Blocks>0</Local-Written-Blocks>
+      <Temp-Read-Blocks>0</Temp-Read-Blocks>
+      <Temp-Written-Blocks>0</Temp-Written-Blocks>
+    </Planning>
+    <Planning-Time>0.064</Planning-Time>
     <Triggers>
       <Trigger>
         <Trigger-Name>tt1_trig_1</Trigger-Name>
         <Relation>tt1</Relation>
-        <Time>120.303</Time>
+        <Time>80.641</Time>
         <Calls>10001</Calls>
       </Trigger>
       <Trigger>
         <Trigger-Name>tt1_trig_2</Trigger-Name>
         <Relation>tt1</Relation>
-        <Time>95.115</Time>
+        <Time>63.621</Time>
         <Calls>10001</Calls>
       </Trigger>
     </Triggers>
-    <Execution-Time>349.084</Execution-Time>
+    <Execution-Time>308.848</Execution-Time>
   </Query>
 </explain>
 
@@ -320,11 +368,11 @@ SELECT '### '||'xml-short        '||title||E'\n'||
       <Node-Type>Result</Node-Type>
       <Parallel-Aware>false</Parallel-Aware>
       <Startup-Cost>0.00</Startup-Cost>
-      <Total-Cost>643.04</Total-Cost>
+      <Total-Cost>743.05</Total-Cost>
       <Plan-Rows>20002</Plan-Rows>
       <Plan-Width>12</Plan-Width>
-      <Actual-Startup-Time>2.860</Actual-Startup-Time>
-      <Actual-Total-Time>23.689</Actual-Total-Time>
+      <Actual-Startup-Time>3.022</Actual-Startup-Time>
+      <Actual-Total-Time>32.256</Actual-Total-Time>
       <Actual-Rows>20002</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
       <Output>
@@ -348,11 +396,11 @@ SELECT '### '||'xml-short        '||title||E'\n'||
           <Parent-Relationship>Outer</Parent-Relationship>
           <Parallel-Aware>false</Parallel-Aware>
           <Startup-Cost>0.00</Startup-Cost>
-          <Total-Cost>443.02</Total-Cost>
+          <Total-Cost>543.03</Total-Cost>
           <Plan-Rows>20002</Plan-Rows>
           <Plan-Width>8</Plan-Width>
-          <Actual-Startup-Time>2.856</Actual-Startup-Time>
-          <Actual-Total-Time>16.737</Actual-Total-Time>
+          <Actual-Startup-Time>3.020</Actual-Startup-Time>
+          <Actual-Total-Time>21.682</Actual-Total-Time>
           <Actual-Rows>20002</Actual-Rows>
           <Actual-Loops>1</Actual-Loops>
           <Shared-Hit-Blocks>218</Shared-Hit-Blocks>
@@ -365,6 +413,7 @@ SELECT '### '||'xml-short        '||title||E'\n'||
           <Local-Written-Blocks>0</Local-Written-Blocks>
           <Temp-Read-Blocks>0</Temp-Read-Blocks>
           <Temp-Written-Blocks>0</Temp-Written-Blocks>
+          <Subplans-Removed>0</Subplans-Removed>
           <Plans>
             <Plan>
               <Node-Type>Seq Scan</Node-Type>
@@ -377,8 +426,8 @@ SELECT '### '||'xml-short        '||title||E'\n'||
               <Total-Cost>288.01</Total-Cost>
               <Plan-Rows>10001</Plan-Rows>
               <Plan-Width>8</Plan-Width>
-              <Actual-Startup-Time>2.855</Actual-Startup-Time>
-              <Actual-Total-Time>7.781</Actual-Total-Time>
+              <Actual-Startup-Time>3.018</Actual-Startup-Time>
+              <Actual-Total-Time>9.898</Actual-Total-Time>
               <Actual-Rows>10001</Actual-Rows>
               <Actual-Loops>1</Actual-Loops>
               <Output>
@@ -407,8 +456,8 @@ SELECT '### '||'xml-short        '||title||E'\n'||
               <Total-Cost>155.01</Total-Cost>
               <Plan-Rows>10001</Plan-Rows>
               <Plan-Width>8</Plan-Width>
-              <Actual-Startup-Time>0.015</Actual-Startup-Time>
-              <Actual-Total-Time>4.341</Actual-Total-Time>
+              <Actual-Startup-Time>0.021</Actual-Startup-Time>
+              <Actual-Total-Time>6.514</Actual-Total-Time>
               <Actual-Rows>10001</Actual-Rows>
               <Actual-Loops>1</Actual-Loops>
               <Output>
@@ -430,10 +479,22 @@ SELECT '### '||'xml-short        '||title||E'\n'||
         </Plan>
       </Plans>
     </Plan>
-    <Planning-Time>0.456</Planning-Time>
+    <Planning>
+      <Shared-Hit-Blocks>28</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>0</Shared-Read-Blocks>
+      <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
+      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Local-Hit-Blocks>0</Local-Hit-Blocks>
+      <Local-Read-Blocks>0</Local-Read-Blocks>
+      <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
+      <Local-Written-Blocks>0</Local-Written-Blocks>
+      <Temp-Read-Blocks>0</Temp-Read-Blocks>
+      <Temp-Written-Blocks>0</Temp-Written-Blocks>
+    </Planning>
+    <Planning-Time>0.447</Planning-Time>
     <Triggers>
     </Triggers>
-    <Execution-Time>26.681</Execution-Time>
+    <Execution-Time>36.229</Execution-Time>
   </Query>
 </explain>
 
@@ -454,8 +515,8 @@ SELECT '### '||'xml-short        '||title||E'\n'||
       <Total-Cost>21.21</Total-Cost>
       <Plan-Rows>4</Plan-Rows>
       <Plan-Width>12</Plan-Width>
-      <Actual-Startup-Time>0.040</Actual-Startup-Time>
-      <Actual-Total-Time>0.080</Actual-Total-Time>
+      <Actual-Startup-Time>0.067</Actual-Startup-Time>
+      <Actual-Total-Time>0.215</Actual-Total-Time>
       <Actual-Rows>4</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
       <Output>
@@ -476,10 +537,22 @@ SELECT '### '||'xml-short        '||title||E'\n'||
       <Temp-Read-Blocks>0</Temp-Read-Blocks>
       <Temp-Written-Blocks>0</Temp-Written-Blocks>
     </Plan>
-    <Planning-Time>0.160</Planning-Time>
+    <Planning>
+      <Shared-Hit-Blocks>6</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>0</Shared-Read-Blocks>
+      <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
+      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Local-Hit-Blocks>0</Local-Hit-Blocks>
+      <Local-Read-Blocks>0</Local-Read-Blocks>
+      <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
+      <Local-Written-Blocks>0</Local-Written-Blocks>
+      <Temp-Read-Blocks>0</Temp-Read-Blocks>
+      <Temp-Written-Blocks>0</Temp-Written-Blocks>
+    </Planning>
+    <Planning-Time>0.371</Planning-Time>
     <Triggers>
     </Triggers>
-    <Execution-Time>0.275</Execution-Time>
+    <Execution-Time>0.414</Execution-Time>
   </Query>
 </explain>
 
@@ -492,11 +565,11 @@ SELECT '### '||'xml-short        '||title||E'\n'||
       <Node-Type>Limit</Node-Type>
       <Parallel-Aware>false</Parallel-Aware>
       <Startup-Cost>819.75</Startup-Cost>
-      <Total-Cost>820.79</Total-Cost>
+      <Total-Cost>820.68</Total-Cost>
       <Plan-Rows>10</Plan-Rows>
       <Plan-Width>12</Plan-Width>
-      <Actual-Startup-Time>17.714</Actual-Startup-Time>
-      <Actual-Total-Time>17.714</Actual-Total-Time>
+      <Actual-Startup-Time>24.438</Actual-Startup-Time>
+      <Actual-Total-Time>24.440</Actual-Total-Time>
       <Actual-Rows>0</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
       <Output>
@@ -504,7 +577,7 @@ SELECT '### '||'xml-short        '||title||E'\n'||
         <Item>x.c</Item>
         <Item>x.a</Item>
       </Output>
-      <Shared-Hit-Blocks>61</Shared-Hit-Blocks>
+      <Shared-Hit-Blocks>59</Shared-Hit-Blocks>
       <Shared-Read-Blocks>0</Shared-Read-Blocks>
       <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
       <Shared-Written-Blocks>0</Shared-Written-Blocks>
@@ -521,11 +594,11 @@ SELECT '### '||'xml-short        '||title||E'\n'||
           <Parallel-Aware>false</Parallel-Aware>
           <Join-Type>Inner</Join-Type>
           <Startup-Cost>819.75</Startup-Cost>
-          <Total-Cost>1854.80</Total-Cost>
+          <Total-Cost>1746.80</Total-Cost>
           <Plan-Rows>10001</Plan-Rows>
           <Plan-Width>12</Plan-Width>
-          <Actual-Startup-Time>17.712</Actual-Startup-Time>
-          <Actual-Total-Time>17.712</Actual-Total-Time>
+          <Actual-Startup-Time>24.436</Actual-Startup-Time>
+          <Actual-Total-Time>24.437</Actual-Total-Time>
           <Actual-Rows>0</Actual-Rows>
           <Actual-Loops>1</Actual-Loops>
           <Output>
@@ -535,7 +608,7 @@ SELECT '### '||'xml-short        '||title||E'\n'||
           </Output>
           <Inner-Unique>false</Inner-Unique>
           <Merge-Cond>(x.a = (((- y.b) * 3)))</Merge-Cond>
-          <Shared-Hit-Blocks>61</Shared-Hit-Blocks>
+          <Shared-Hit-Blocks>59</Shared-Hit-Blocks>
           <Shared-Read-Blocks>0</Shared-Read-Blocks>
           <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
           <Shared-Written-Blocks>0</Shared-Written-Blocks>
@@ -556,11 +629,11 @@ SELECT '### '||'xml-short        '||title||E'\n'||
               <Schema>public</Schema>
               <Alias>x</Alias>
               <Startup-Cost>0.29</Startup-Cost>
-              <Total-Cost>760.30</Total-Cost>
+              <Total-Cost>652.30</Total-Cost>
               <Plan-Rows>10001</Plan-Rows>
               <Plan-Width>12</Plan-Width>
-              <Actual-Startup-Time>0.072</Actual-Startup-Time>
-              <Actual-Total-Time>0.072</Actual-Total-Time>
+              <Actual-Startup-Time>0.030</Actual-Startup-Time>
+              <Actual-Total-Time>0.030</Actual-Total-Time>
               <Actual-Rows>1</Actual-Rows>
               <Actual-Loops>1</Actual-Loops>
               <Output>
@@ -568,7 +641,7 @@ SELECT '### '||'xml-short        '||title||E'\n'||
                 <Item>x.b</Item>
                 <Item>x.c</Item>
               </Output>
-              <Shared-Hit-Blocks>6</Shared-Hit-Blocks>
+              <Shared-Hit-Blocks>4</Shared-Hit-Blocks>
               <Shared-Read-Blocks>0</Shared-Read-Blocks>
               <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
               <Shared-Written-Blocks>0</Shared-Written-Blocks>
@@ -587,8 +660,8 @@ SELECT '### '||'xml-short        '||title||E'\n'||
               <Total-Cost>844.47</Total-Cost>
               <Plan-Rows>10001</Plan-Rows>
               <Plan-Width>4</Plan-Width>
-              <Actual-Startup-Time>13.465</Actual-Startup-Time>
-              <Actual-Total-Time>14.609</Actual-Total-Time>
+              <Actual-Startup-Time>19.091</Actual-Startup-Time>
+              <Actual-Total-Time>20.771</Actual-Total-Time>
               <Actual-Rows>10001</Actual-Rows>
               <Actual-Loops>1</Actual-Loops>
               <Output>
@@ -623,8 +696,8 @@ SELECT '### '||'xml-short        '||title||E'\n'||
                   <Total-Cost>155.01</Total-Cost>
                   <Plan-Rows>10001</Plan-Rows>
                   <Plan-Width>4</Plan-Width>
-                  <Actual-Startup-Time>0.017</Actual-Startup-Time>
-                  <Actual-Total-Time>4.767</Actual-Total-Time>
+                  <Actual-Startup-Time>0.022</Actual-Startup-Time>
+                  <Actual-Total-Time>7.774</Actual-Total-Time>
                   <Actual-Rows>10001</Actual-Rows>
                   <Actual-Loops>1</Actual-Loops>
                   <Output>
@@ -648,10 +721,22 @@ SELECT '### '||'xml-short        '||title||E'\n'||
         </Plan>
       </Plans>
     </Plan>
-    <Planning-Time>0.440</Planning-Time>
+    <Planning>
+      <Shared-Hit-Blocks>14</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>0</Shared-Read-Blocks>
+      <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
+      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Local-Hit-Blocks>0</Local-Hit-Blocks>
+      <Local-Read-Blocks>0</Local-Read-Blocks>
+      <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
+      <Local-Written-Blocks>0</Local-Written-Blocks>
+      <Temp-Read-Blocks>0</Temp-Read-Blocks>
+      <Temp-Written-Blocks>0</Temp-Written-Blocks>
+    </Planning>
+    <Planning-Time>0.441</Planning-Time>
     <Triggers>
     </Triggers>
-    <Execution-Time>18.482</Execution-Time>
+    <Execution-Time>25.592</Execution-Time>
   </Query>
 </explain>
 
@@ -660,509 +745,520 @@ SELECT '### '||'TEXT-short       '||title||E'\n'||
   pg_store_plans_textplan(splan)
   FROM plans WHERE id >= 0 ORDER BY id;
 ### TEXT-short       ###### Plan 1: Insert, Trigger
-Insert on public.tt1  (cost=0.00..10.00 rows=1000 width=40) (actual time=348.383..348.383 rows=0 loops=1)
-  Buffers: shared hit=29732 read=87 dirtied=85
-  ->  Function Scan on pg_catalog.generate_series a  (cost=0.00..10.00 rows=1000 width=40) (actual time=2.530..10.954 rows=10001 loops=1)
+Insert on public.tt1  (cost=0.00..100.01 rows=10001 width=40) (actual time=307.054..307.055 rows=0 loops=1)
+  Buffers: shared hit=29736 read=3 dirtied=85 written=84
+  ->  Function Scan on pg_catalog.generate_series a  (cost=0.00..100.01 rows=10001 width=40) (actual time=3.739..12.801 rows=10001 loops=1)
         Output: a.a, NULL::integer, NULL::text
         Function Call: generate_series(0, 10000)
-Planning Time: 0.063 ms
-Trigger tt1_trig_1: time=120.303 calls=10001
-Trigger tt1_trig_2: time=95.115 calls=10001
-Execution Time: 349.084 ms
+Planning Time: 0.064 ms
+Trigger tt1_trig_1: time=80.641 calls=10001
+Trigger tt1_trig_2: time=63.621 calls=10001
+Execution Time: 308.848 ms
 
 =======
 ### TEXT-short       ###### Plan 2: Update, Trigger
-Update on public.tt1  (cost=0.00..137.50 rows=6600 width=46) (actual time=332.064..332.064 rows=0 loops=1)
-  Buffers: shared hit=50276 read=108 dirtied=108
-  ->  Seq Scan on public.tt1  (cost=0.00..137.50 rows=6600 width=46) (actual time=0.031..9.136 rows=10001 loops=1)
+Update on public.tt1  (cost=0.00..137.50 rows=6600 width=46) (actual time=491.114..491.115 rows=0 loops=1)
+  Buffers: shared hit=50222 dirtied=81 written=81
+  ->  Seq Scan on public.tt1  (cost=0.00..137.50 rows=6600 width=46) (actual time=0.052..20.371 rows=10001 loops=1)
         Output: (a + 1), b, c, ctid
         Buffers: shared hit=55
-Planning Time: 0.204 ms
-Trigger tt1_trig_1: time=98.808 calls=10001
-Trigger tt1_trig_2: time=71.353 calls=10001
-Execution Time: 332.250 ms
+Planning Time: 0.220 ms
+Trigger tt1_trig_1: time=95.170 calls=10001
+Trigger tt1_trig_2: time=72.762 calls=10001
+Execution Time: 492.534 ms
 
 =======
 ### TEXT-short       ###### Plan 3: Delete
-Delete on public.tt1  (cost=0.00..305.20 rows=65 width=6) (actual time=7.444..7.444 rows=0 loops=1)
+Delete on public.tt1  (cost=0.00..305.20 rows=65 width=6) (actual time=15.676..15.678 rows=0 loops=1)
   Buffers: shared hit=1109
-  ->  Seq Scan on public.tt1  (cost=0.00..305.20 rows=65 width=6) (actual time=2.885..5.893 rows=1000 loops=1)
+  ->  Seq Scan on public.tt1  (cost=0.00..305.20 rows=65 width=6) (actual time=4.301..12.640 rows=1000 loops=1)
         Output: ctid
         Filter: ((tt1.a % 10) = 0)
         Rows Removed by Filter: 9001
         Buffers: shared hit=109
-Planning Time: 0.104 ms
-Execution Time: 7.583 ms
+Planning Time: 0.214 ms
+Execution Time: 16.001 ms
 
 =======
 ### TEXT-short       ###### Plan 4: Result, Append Seq Scan
-Result  (cost=0.00..643.04 rows=20002 width=12) (actual time=2.860..23.689 rows=20002 loops=1)
+Result  (cost=0.00..743.05 rows=20002 width=12) (actual time=3.022..32.256 rows=20002 loops=1)
   Output: ((tt1.a + 1)), (3), 1
   Buffers: shared hit=218
-  ->  Append  (cost=0.00..443.02 rows=20002 width=8) (actual time=2.856..16.737 rows=20002 loops=1)
+  ->  Append  (cost=0.00..543.03 rows=20002 width=8) (actual time=3.020..21.682 rows=20002 loops=1)
+        Subplans Removed: 0
         Buffers: shared hit=218
-        ->  Seq Scan on public.tt1  (cost=0.00..288.01 rows=10001 width=8) (actual time=2.855..7.781 rows=10001 loops=1)
+        ->  Seq Scan on public.tt1  (cost=0.00..288.01 rows=10001 width=8) (actual time=3.018..9.898 rows=10001 loops=1)
               Output: (tt1.a + 1), 3
               Buffers: shared hit=163
-        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=8) (actual time=0.015..4.341 rows=10001 loops=1)
+        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=8) (actual time=0.021..6.514 rows=10001 loops=1)
               Output: tt2.a, 4
               Buffers: shared hit=55
-Planning Time: 0.456 ms
-Execution Time: 26.681 ms
+Planning Time: 0.447 ms
+Execution Time: 36.229 ms
 
 =======
 ### TEXT-short       ###### Plan 5: Index scan (forward) ANY, array in expr, escape
-Index Scan using i_tt1 on public.tt1 "x""y"  (cost=0.29..21.21 rows=4 width=12) (actual time=0.040..0.080 rows=4 loops=1)
+Index Scan using i_tt1 on public.tt1 "x""y"  (cost=0.29..21.21 rows=4 width=12) (actual time=0.067..0.215 rows=4 loops=1)
   Output: a, b, c
   Index Cond: ("x""y".a = ANY ('{50,120,300,500}'::integer[]))
   Buffers: shared hit=27
-Planning Time: 0.160 ms
-Execution Time: 0.275 ms
+Planning Time: 0.371 ms
+Execution Time: 0.414 ms
 
 =======
 ### TEXT-short       ###### Plan 6: Index scan (backward), MergeJoin, Sort, quicksort, alias
-Limit  (cost=819.75..820.79 rows=10 width=12) (actual time=17.714..17.714 rows=0 loops=1)
+Limit  (cost=819.75..820.68 rows=10 width=12) (actual time=24.438..24.440 rows=0 loops=1)
   Output: x.b, x.c, x.a
-  Buffers: shared hit=61
-  ->  Merge Join  (cost=819.75..1854.80 rows=10001 width=12) (actual time=17.712..17.712 rows=0 loops=1)
+  Buffers: shared hit=59
+  ->  Merge Join  (cost=819.75..1746.80 rows=10001 width=12) (actual time=24.436..24.437 rows=0 loops=1)
         Output: x.b, x.c, x.a
         Merge Cond: (x.a = (((- y.b) * 3)))
-        Buffers: shared hit=61
-        ->  Index Scan Backward using i_tt1 on public.tt1 x  (cost=0.29..760.30 rows=10001 width=12) (actual time=0.072..0.072 rows=1 loops=1)
+        Buffers: shared hit=59
+        ->  Index Scan Backward using i_tt1 on public.tt1 x  (cost=0.29..652.30 rows=10001 width=12) (actual time=0.030..0.030 rows=1 loops=1)
               Output: x.a, x.b, x.c
-              Buffers: shared hit=6
-        ->  Sort  (cost=819.47..844.47 rows=10001 width=4) (actual time=13.465..14.609 rows=10001 loops=1)
+              Buffers: shared hit=4
+        ->  Sort  (cost=819.47..844.47 rows=10001 width=4) (actual time=19.091..20.771 rows=10001 loops=1)
               Output: y.b, (((- y.b) * 3))
               Sort Key: (((- y.b) * 3)) DESC
               Sort Method: quicksort  Memory: 855kB
               Buffers: shared hit=55
-              ->  Seq Scan on public.tt2 y  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.017..4.767 rows=10001 loops=1)
+              ->  Seq Scan on public.tt2 y  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.022..7.774 rows=10001 loops=1)
                     Output: y.b, ((- y.b) * 3)
                     Buffers: shared hit=55
-Planning Time: 0.440 ms
-Execution Time: 18.482 ms
+Planning Time: 0.441 ms
+Execution Time: 25.592 ms
 
 =======
 ### TEXT-short       ###### Plan 7: IndexOnlyScan
-Index Only Scan using i_tt1 on public.tt1  (cost=0.29..8.46 rows=10 width=4) (actual time=0.023..0.058 rows=10 loops=1)
+Index Only Scan using i_tt1 on public.tt1  (cost=0.29..8.46 rows=10 width=4) (actual time=0.062..0.352 rows=10 loops=1)
   Output: a
   Index Cond: (tt1.a < 10)
   Heap Fetches: 29
   Buffers: shared hit=31
-Planning Time: 0.109 ms
-Execution Time: 0.205 ms
+Planning Time: 0.206 ms
+Execution Time: 0.491 ms
 
 =======
 ### TEXT-short       ###### Plan 8: Plain Aggregate, CTE, Recursive Union, WorkTable Scan, CTE Scan
-Aggregate  (cost=3.65..3.66 rows=1 width=8) (actual time=0.061..0.061 rows=1 loops=1)
+Aggregate  (cost=3.65..3.66 rows=1 width=8) (actual time=0.062..0.064 rows=1 loops=1)
   Output: sum(cte1.a)
   CTE cte1
-    ->  Recursive Union  (cost=0.00..2.95 rows=31 width=4) (actual time=0.002..0.039 rows=10 loops=1)
-        ->  Result  (cost=0.00..0.01 rows=1 width=4) (actual time=0.000..0.001 rows=1 loops=1)
+    ->  Recursive Union  (cost=0.00..2.95 rows=31 width=4) (actual time=0.003..0.037 rows=10 loops=1)
+        ->  Result  (cost=0.00..0.01 rows=1 width=4) (actual time=0.002..0.003 rows=1 loops=1)
               Output: 1
         ->  WorkTable Scan on cte1 cte1_1  (cost=0.00..0.23 rows=3 width=4) (actual time=0.001..0.001 rows=1 loops=10)
               Output: (cte1_1.a + 1)
               Filter: (cte1_1.a < 10)
-  ->  CTE Scan on cte1  (cost=0.00..0.62 rows=31 width=4) (actual time=0.004..0.049 rows=10 loops=1)
+  ->  CTE Scan on cte1  (cost=0.00..0.62 rows=31 width=4) (actual time=0.005..0.045 rows=10 loops=1)
         Output: cte1.a
-Planning Time: 0.156 ms
-Execution Time: 0.453 ms
+Planning Time: 0.209 ms
+Execution Time: 0.518 ms
 
 =======
 ### TEXT-short       ###### Plan 9: FunctionScan, Hash/HashJoin, Nested Loop
-Hash Left Join  (cost=1.11..3.37 rows=100 width=64) (actual time=0.094..0.103 rows=7 loops=1)
+Hash Left Join  (cost=1.09..2.37 rows=100 width=64) (actual time=0.207..0.222 rows=6 loops=1)
   Output: d.datname
   Hash Cond: (s.datid = d.oid)
   Buffers: shared hit=1
-  ->  Function Scan on pg_catalog.pg_stat_get_activity s  (cost=0.00..1.00 rows=100 width=8) (actual time=0.066..0.069 rows=7 loops=1)
-        Output: s.datid, s.pid, s.usesysid, s.application_name, s.state, s.query, s.wait_event_type, s.wait_event, s.xact_start, s.query_start, s.backend_start, s.state_change, s.client_addr, s.client_hostname, s.client_port, s.backend_xid, s.backend_xmin, s.backend_type, s.ssl, s.sslversion, s.sslcipher, s.sslbits, s.sslcompression, s.sslclientdn
+  ->  Function Scan on pg_catalog.pg_stat_get_activity s  (cost=0.00..1.00 rows=100 width=8) (actual time=0.122..0.127 rows=6 loops=1)
+        Output: s.datid, s.pid, s.usesysid, s.application_name, s.state, s.query, s.wait_event_type, s.wait_event, s.xact_start, s.query_start, s.backend_start, s.state_change, s.client_addr, s.client_hostname, s.client_port, s.backend_xid, s.backend_xmin, s.backend_type, s.ssl, s.sslversion, s.sslcipher, s.sslbits, s.sslcompression, s.ssl_client_dn, s.ssl_client_serial, s.ssl_issuer_dn, s.gss_auth, s.gss_princ, s.gss_enc, s.leader_pid
         Function Call: pg_stat_get_activity(NULL::integer)
-  ->  Hash  (cost=1.05..1.05 rows=5 width=68) (actual time=0.020..0.020 rows=5 loops=1)
+  ->  Hash  (cost=1.04..1.04 rows=4 width=68) (actual time=0.027..0.028 rows=4 loops=1)
         Output: d.datname, d.oid
         Buckets: 1024  Batches: 1  Memory Usage: 9kB
         Buffers: shared hit=1
-        ->  Seq Scan on pg_catalog.pg_database d  (cost=0.00..1.05 rows=5 width=68) (actual time=0.009..0.012 rows=5 loops=1)
+        ->  Seq Scan on pg_catalog.pg_database d  (cost=0.00..1.04 rows=4 width=68) (actual time=0.017..0.020 rows=4 loops=1)
               Output: d.datname, d.oid
               Buffers: shared hit=1
-Planning Time: 0.565 ms
-Execution Time: 0.644 ms
+Planning Time: 1.071 ms
+Execution Time: 0.904 ms
 
 =======
 ### TEXT-short       ###### Plan 10: MergeAppend, Values
-Merge Append  (cost=0.36..935.42 rows=10004 width=4) (actual time=0.036..33.263 rows=10004 loops=1)
+Merge Append  (cost=0.36..852.43 rows=10004 width=4) (actual time=0.108..133.185 rows=10004 loops=1)
   Sort Key: tt1.a
-  Buffers: shared hit=30069
-  ->  Index Only Scan using i_tt1 on public.tt1  (cost=0.29..760.30 rows=10001 width=4) (actual time=0.021..30.772 rows=10001 loops=1)
+  Subplans Removed: 0
+  Buffers: shared hit=30076
+  ->  Index Only Scan using i_tt1 on public.tt1  (cost=0.29..652.30 rows=10001 width=4) (actual time=0.078..129.755 rows=10001 loops=1)
         Output: tt1.a
-        Heap Fetches: 29973
-        Buffers: shared hit=30069
-  ->  Sort  (cost=0.06..0.07 rows=3 width=4) (actual time=0.014..0.014 rows=3 loops=1)
+        Heap Fetches: 29996
+        Buffers: shared hit=30076
+  ->  Sort  (cost=0.06..0.07 rows=3 width=4) (actual time=0.028..0.030 rows=3 loops=1)
         Output: "*VALUES*".column1
         Sort Key: "*VALUES*".column1
         Sort Method: quicksort  Memory: 25kB
-        ->  Values Scan on "*VALUES*"  (cost=0.00..0.04 rows=3 width=4) (actual time=0.002..0.005 rows=3 loops=1)
+        ->  Values Scan on "*VALUES*"  (cost=0.00..0.04 rows=3 width=4) (actual time=0.005..0.009 rows=3 loops=1)
               Output: "*VALUES*".column1
-Planning Time: 0.193 ms
-Execution Time: 35.065 ms
+Planning Time: 0.281 ms
+Execution Time: 135.846 ms
 
 =======
 ### TEXT-short       ###### Plan 11: Append, HashAggregate
-HashAggregate  (cost=668.04..868.06 rows=20002 width=4) (actual time=21.630..27.849 rows=20002 loops=1)
+HashAggregate  (cost=1793.16..2149.44 rows=20002 width=4) (actual time=39.362..60.508 rows=20002 loops=1)
   Output: tt1.a
   Group Key: tt1.a
-  Buffers: shared hit=218
-  ->  Append  (cost=0.00..618.04 rows=20002 width=4) (actual time=0.162..10.468 rows=20002 loops=1)
+  Planned Partitions: 4
+  HashAgg Batches: 5
+  Disk Usage: 248
+  Buffers: shared hit=218, temp read=29 written=52
+  ->  Append  (cost=0.00..718.05 rows=20002 width=4) (actual time=0.216..16.983 rows=20002 loops=1)
+        Subplans Removed: 0
         Buffers: shared hit=218
-        ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.162..3.517 rows=10001 loops=1)
+        ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.215..6.705 rows=10001 loops=1)
               Output: tt1.a
               Buffers: shared hit=163
-        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.012..3.281 rows=10001 loops=1)
+        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.024..5.101 rows=10001 loops=1)
               Output: tt2.b
               Buffers: shared hit=55
-Planning Time: 0.108 ms
-Execution Time: 30.935 ms
+Planning Time: 0.150 ms
+Execution Time: 64.034 ms
 
 =======
 ### TEXT-short       ###### Plan 12: GroupAggregate
-GroupAggregate  (cost=1067.47..1242.49 rows=10001 width=12) (actual time=13.558..24.047 rows=10001 loops=1)
+GroupAggregate  (cost=1067.47..1242.49 rows=10001 width=12) (actual time=27.917..65.682 rows=10001 loops=1)
   Output: sum(a), b
   Group Key: tt1.b
   Buffers: shared hit=163, temp read=44 written=56
-  ->  Sort  (cost=1067.47..1092.47 rows=10001 width=8) (actual time=13.552..16.191 rows=10001 loops=1)
+  ->  Sort  (cost=1067.47..1092.47 rows=10001 width=8) (actual time=27.901..34.159 rows=10001 loops=1)
         Output: b, a
         Sort Key: tt1.b
         Sort Method: external merge  Disk: 208kB
         Buffers: shared hit=163, temp read=44 written=56
-        ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=8) (actual time=0.147..3.206 rows=10001 loops=1)
+        ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=8) (actual time=0.210..7.632 rows=10001 loops=1)
               Output: b, a
               Buffers: shared hit=163
-Planning Time: 0.115 ms
-Execution Time: 25.808 ms
+Planning Time: 0.095 ms
+Execution Time: 69.397 ms
 
 =======
 ### TEXT-short       ###### Plan 13: Group
-Group  (cost=1067.47..1117.47 rows=10001 width=4) (actual time=12.547..19.383 rows=10001 loops=1)
+Group  (cost=1067.47..1117.47 rows=10001 width=4) (actual time=23.168..37.399 rows=10001 loops=1)
   Output: b
   Group Key: tt1.b
   Buffers: shared hit=163, temp read=36 written=44
-  ->  Sort  (cost=1067.47..1092.47 rows=10001 width=4) (actual time=12.545..14.931 rows=10001 loops=1)
+  ->  Sort  (cost=1067.47..1092.47 rows=10001 width=4) (actual time=23.165..27.281 rows=10001 loops=1)
         Output: b
         Sort Key: tt1.b
         Sort Method: external merge  Disk: 168kB
         Buffers: shared hit=163, temp read=36 written=44
-        ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.133..2.966 rows=10001 loops=1)
+        ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.177..5.974 rows=10001 loops=1)
               Output: b
               Buffers: shared hit=163
-Planning Time: 0.046 ms
-Execution Time: 20.508 ms
+Planning Time: 0.078 ms
+Execution Time: 39.587 ms
 
 =======
 ### TEXT-short       ###### Plan 14: SetOp intersect, SbuqueryScan
-Sort  (cost=1332.50..1357.51 rows=10001 width=8) (actual time=18.874..18.874 rows=0 loops=1)
+Sort  (cost=1432.51..1457.52 rows=10001 width=8) (actual time=44.942..44.945 rows=0 loops=1)
   Output: "*SELECT* 1".a, (0)
   Sort Key: "*SELECT* 1".a
   Sort Method: quicksort  Memory: 25kB
   Buffers: shared hit=218
-  ->  HashSetOp Intersect  (cost=0.00..668.04 rows=10001 width=8) (actual time=18.869..18.869 rows=0 loops=1)
+  ->  HashSetOp Intersect  (cost=0.00..768.05 rows=10001 width=8) (actual time=44.934..44.936 rows=0 loops=1)
         Output: "*SELECT* 1".a, (0)
         Buffers: shared hit=218
-        ->  Append  (cost=0.00..618.04 rows=20002 width=8) (actual time=0.166..12.521 rows=20002 loops=1)
+        ->  Append  (cost=0.00..718.05 rows=20002 width=8) (actual time=0.278..29.908 rows=20002 loops=1)
+              Subplans Removed: 0
               Buffers: shared hit=218
-              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.166..5.461 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.277..10.485 rows=10001 loops=1)
                     Output: "*SELECT* 1".a, 0
                     Buffers: shared hit=163
-                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.165..3.005 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.273..5.540 rows=10001 loops=1)
                           Output: tt1.a
                           Buffers: shared hit=163
-              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.009..4.507 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.022..12.693 rows=10001 loops=1)
                     Output: "*SELECT* 2".b, 1
                     Buffers: shared hit=55
-                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.009..2.416 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.020..6.760 rows=10001 loops=1)
                           Output: tt2.b
                           Buffers: shared hit=55
-Planning Time: 0.091 ms
-Execution Time: 19.535 ms
+Planning Time: 0.204 ms
+Execution Time: 46.074 ms
 
 =======
 ### TEXT-short       ###### Plan 15: Sorted SetOp, Sort on Disk
-SetOp Intersect  (cost=2323.47..2423.48 rows=10001 width=8) (actual time=42.218..42.218 rows=0 loops=1)
+SetOp Intersect  (cost=2423.48..2523.49 rows=10001 width=8) (actual time=85.013..85.017 rows=0 loops=1)
   Output: "*SELECT* 1".a, (0)
-  Buffers: shared hit=218, temp read=113 written=126
-  ->  Sort  (cost=2323.47..2373.47 rows=20002 width=8) (actual time=31.621..35.575 rows=20002 loops=1)
+  Buffers: shared hit=218, temp read=109 written=134
+  ->  Sort  (cost=2423.48..2473.48 rows=20002 width=8) (actual time=59.500..68.824 rows=20002 loops=1)
         Output: "*SELECT* 1".a, (0)
         Sort Key: "*SELECT* 1".a
-        Sort Method: external merge  Disk: 384kB
-        Buffers: shared hit=218, temp read=113 written=126
-        ->  Append  (cost=0.00..618.04 rows=20002 width=8) (actual time=0.116..11.983 rows=20002 loops=1)
+        Sort Method: external merge  Disk: 376kB
+        Buffers: shared hit=218, temp read=109 written=134
+        ->  Append  (cost=0.00..718.05 rows=20002 width=8) (actual time=0.206..27.164 rows=20002 loops=1)
+              Subplans Removed: 0
               Buffers: shared hit=218
-              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.116..4.795 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.205..11.202 rows=10001 loops=1)
                     Output: "*SELECT* 1".a, 0
                     Buffers: shared hit=163
-                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.115..2.492 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.202..5.926 rows=10001 loops=1)
                           Output: tt1.a
                           Buffers: shared hit=163
-              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.008..4.778 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.024..10.268 rows=10001 loops=1)
                     Output: "*SELECT* 2".b, 1
                     Buffers: shared hit=55
-                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.008..2.517 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.022..5.398 rows=10001 loops=1)
                           Output: tt2.b
                           Buffers: shared hit=55
-Planning Time: 0.082 ms
-Execution Time: 42.624 ms
+Planning Time: 0.185 ms
+Execution Time: 85.810 ms
 
 =======
 ### TEXT-short       ###### Plan 16: HashSetOp intersect All, SubqueryScan
-Sort  (cost=1332.50..1357.51 rows=10001 width=8) (actual time=18.612..18.612 rows=0 loops=1)
+Sort  (cost=1432.51..1457.52 rows=10001 width=8) (actual time=41.088..41.091 rows=0 loops=1)
   Output: "*SELECT* 1".a, (0)
   Sort Key: "*SELECT* 1".a
   Sort Method: quicksort  Memory: 25kB
   Buffers: shared hit=218
-  ->  HashSetOp Intersect All  (cost=0.00..668.04 rows=10001 width=8) (actual time=18.606..18.606 rows=0 loops=1)
+  ->  HashSetOp Intersect All  (cost=0.00..768.05 rows=10001 width=8) (actual time=41.081..41.083 rows=0 loops=1)
         Output: "*SELECT* 1".a, (0)
         Buffers: shared hit=218
-        ->  Append  (cost=0.00..618.04 rows=20002 width=8) (actual time=0.129..12.270 rows=20002 loops=1)
+        ->  Append  (cost=0.00..718.05 rows=20002 width=8) (actual time=0.221..27.530 rows=20002 loops=1)
+              Subplans Removed: 0
               Buffers: shared hit=218
-              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.129..5.147 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.220..11.527 rows=10001 loops=1)
                     Output: "*SELECT* 1".a, 0
                     Buffers: shared hit=163
-                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.128..2.886 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.217..6.389 rows=10001 loops=1)
                           Output: tt1.a
                           Buffers: shared hit=163
-              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.010..4.666 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.025..10.452 rows=10001 loops=1)
                     Output: "*SELECT* 2".b, 1
                     Buffers: shared hit=55
-                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.010..2.546 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.023..5.465 rows=10001 loops=1)
                           Output: tt2.b
                           Buffers: shared hit=55
-Planning Time: 0.089 ms
-Execution Time: 19.308 ms
+Planning Time: 0.239 ms
+Execution Time: 43.479 ms
 
 =======
 ### TEXT-short       ###### Plan 17: HashSetOp except, SubqueryScan
-Sort  (cost=1332.50..1357.51 rows=10001 width=8) (actual time=22.556..23.380 rows=10001 loops=1)
+Sort  (cost=1432.51..1457.52 rows=10001 width=8) (actual time=46.663..48.678 rows=10001 loops=1)
   Output: "*SELECT* 1".a, (0)
   Sort Key: "*SELECT* 1".a
   Sort Method: quicksort  Memory: 855kB
   Buffers: shared hit=218
-  ->  HashSetOp Except  (cost=0.00..668.04 rows=10001 width=8) (actual time=17.434..18.500 rows=10001 loops=1)
+  ->  HashSetOp Except  (cost=0.00..768.05 rows=10001 width=8) (actual time=35.260..37.531 rows=10001 loops=1)
         Output: "*SELECT* 1".a, (0)
         Buffers: shared hit=218
-        ->  Append  (cost=0.00..618.04 rows=20002 width=8) (actual time=0.136..11.989 rows=20002 loops=1)
+        ->  Append  (cost=0.00..718.05 rows=20002 width=8) (actual time=0.295..24.671 rows=20002 loops=1)
+              Subplans Removed: 0
               Buffers: shared hit=218
-              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.136..4.805 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.293..9.504 rows=10001 loops=1)
                     Output: "*SELECT* 1".a, 0
                     Buffers: shared hit=163
-                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.135..2.625 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.290..5.273 rows=10001 loops=1)
                           Output: tt1.a
                           Buffers: shared hit=163
-              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.010..4.669 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.020..9.883 rows=10001 loops=1)
                     Output: "*SELECT* 2".b, 1
                     Buffers: shared hit=55
-                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.010..2.538 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.018..5.317 rows=10001 loops=1)
                           Output: tt2.b
                           Buffers: shared hit=55
-Planning Time: 0.099 ms
-Execution Time: 25.727 ms
+Planning Time: 0.206 ms
+Execution Time: 53.924 ms
 
 =======
 ### TEXT-short       ###### Plan 18: HashSetOp except all, SubqueryScan
-Sort  (cost=1332.50..1357.51 rows=10001 width=8) (actual time=22.101..22.924 rows=10001 loops=1)
+Sort  (cost=1432.51..1457.52 rows=10001 width=8) (actual time=48.922..51.025 rows=10001 loops=1)
   Output: "*SELECT* 1".a, (0)
   Sort Key: "*SELECT* 1".a
   Sort Method: quicksort  Memory: 855kB
   Buffers: shared hit=218
-  ->  HashSetOp Except All  (cost=0.00..668.04 rows=10001 width=8) (actual time=17.050..17.997 rows=10001 loops=1)
+  ->  HashSetOp Except All  (cost=0.00..768.05 rows=10001 width=8) (actual time=34.965..38.291 rows=10001 loops=1)
         Output: "*SELECT* 1".a, (0)
         Buffers: shared hit=218
-        ->  Append  (cost=0.00..618.04 rows=20002 width=8) (actual time=0.139..11.633 rows=20002 loops=1)
+        ->  Append  (cost=0.00..718.05 rows=20002 width=8) (actual time=0.244..24.592 rows=20002 loops=1)
+              Subplans Removed: 0
               Buffers: shared hit=218
-              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.138..4.680 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 1"  (cost=0.00..363.02 rows=10001 width=8) (actual time=0.243..10.070 rows=10001 loops=1)
                     Output: "*SELECT* 1".a, 0
                     Buffers: shared hit=163
-                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.138..2.536 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.240..5.278 rows=10001 loops=1)
                           Output: tt1.a
                           Buffers: shared hit=163
-              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.009..4.554 rows=10001 loops=1)
+              ->  Subquery Scan on "*SELECT* 2"  (cost=0.00..255.02 rows=10001 width=8) (actual time=0.022..9.503 rows=10001 loops=1)
                     Output: "*SELECT* 2".b, 1
                     Buffers: shared hit=55
-                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.008..2.495 rows=10001 loops=1)
+                    ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.020..5.101 rows=10001 loops=1)
                           Output: tt2.b
                           Buffers: shared hit=55
-Planning Time: 0.097 ms
-Execution Time: 25.260 ms
+Planning Time: 0.146 ms
+Execution Time: 58.119 ms
 
 =======
 ### TEXT-short       ###### Plan 19: merge LEFT join
-Merge Left Join  (cost=0.71..4293.92 rows=33292 width=4) (actual time=0.032..65.448 rows=60003 loops=1)
+Merge Left Join  (cost=0.71..3860.52 rows=33557 width=4) (actual time=0.105..226.400 rows=60003 loops=1)
   Output: x.b
   Merge Cond: (x.a = y.a)
-  Buffers: shared hit=20946
-  ->  Index Scan using i_tt1 on public.tt1 x  (cost=0.29..760.30 rows=10001 width=8) (actual time=0.008..5.025 rows=10001 loops=1)
+  Buffers: shared hit=35794
+  ->  Index Scan using i_tt1 on public.tt1 x  (cost=0.29..652.30 rows=10001 width=8) (actual time=0.055..100.454 rows=10001 loops=1)
         Output: x.a, x.b, x.c
-        Buffers: shared hit=165
-  ->  Index Only Scan using i_tt3_a on public.tt3 y  (cost=0.42..9030.73 rows=180003 width=4) (actual time=0.020..38.025 rows=60004 loops=1)
+        Buffers: shared hit=15484
+  ->  Index Only Scan using i_tt3_a on public.tt3 y  (cost=0.42..8175.04 rows=180003 width=4) (actual time=0.046..80.236 rows=60004 loops=1)
         Output: y.a
         Heap Fetches: 60004
-        Buffers: shared hit=20781
-Planning Time: 0.374 ms
-Execution Time: 70.459 ms
+        Buffers: shared hit=20310
+Planning Time: 0.775 ms
+Execution Time: 238.174 ms
 
 =======
 ### TEXT-short       ###### Plan 20: hash FULL join
-Hash Full Join  (cost=280.02..680.55 rows=10001 width=4) (actual time=5.466..11.552 rows=17001 loops=1)
+Hash Full Join  (cost=280.02..680.55 rows=10001 width=4) (actual time=10.794..25.225 rows=17001 loops=1)
   Output: x.b
   Hash Cond: (x.a = y.a)
   Buffers: shared hit=218
-  ->  Seq Scan on public.tt1 x  (cost=0.00..263.01 rows=10001 width=8) (actual time=0.126..1.575 rows=10001 loops=1)
+  ->  Seq Scan on public.tt1 x  (cost=0.00..263.01 rows=10001 width=8) (actual time=0.171..3.347 rows=10001 loops=1)
         Output: x.a, x.b, x.c
         Buffers: shared hit=163
-  ->  Hash  (cost=155.01..155.01 rows=10001 width=4) (actual time=5.326..5.326 rows=10001 loops=1)
+  ->  Hash  (cost=155.01..155.01 rows=10001 width=4) (actual time=10.580..10.583 rows=10001 loops=1)
         Output: y.a
         Buckets: 16384  Batches: 1  Memory Usage: 480kB
         Buffers: shared hit=55
-        ->  Seq Scan on public.tt2 y  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.012..2.530 rows=10001 loops=1)
+        ->  Seq Scan on public.tt2 y  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.131..4.929 rows=10001 loops=1)
               Output: y.a
               Buffers: shared hit=55
-Planning Time: 0.121 ms
-Execution Time: 13.019 ms
+Planning Time: 0.318 ms
+Execution Time: 28.549 ms
 
 =======
 ### TEXT-short       ###### Plan 21: hash SEMI join
-Hash Semi Join  (cost=280.02..680.55 rows=10001 width=12) (actual time=8.862..8.862 rows=0 loops=1)
+Hash Semi Join  (cost=280.02..680.55 rows=10001 width=12) (actual time=20.909..20.912 rows=0 loops=1)
   Output: tt1.a, tt1.b, tt1.c
   Hash Cond: (tt1.a = tt2.b)
   Buffers: shared hit=218
-  ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=12) (actual time=0.106..1.502 rows=10001 loops=1)
+  ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=12) (actual time=0.188..3.024 rows=10001 loops=1)
         Output: tt1.a, tt1.b, tt1.c
         Buffers: shared hit=163
-  ->  Hash  (cost=155.01..155.01 rows=10001 width=4) (actual time=5.222..5.222 rows=10001 loops=1)
+  ->  Hash  (cost=155.01..155.01 rows=10001 width=4) (actual time=13.797..13.798 rows=10001 loops=1)
         Output: tt2.b
         Buckets: 16384  Batches: 1  Memory Usage: 480kB
         Buffers: shared hit=55
-        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.008..2.498 rows=10001 loops=1)
+        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.015..6.167 rows=10001 loops=1)
               Output: tt2.b
               Buffers: shared hit=55
-Planning Time: 0.192 ms
-Execution Time: 9.096 ms
+Planning Time: 0.570 ms
+Execution Time: 21.391 ms
 
 =======
 ### TEXT-short       ###### Plan 22: Hash Anti Join
-Hash Anti Join  (cost=280.02..580.54 rows=1 width=12) (actual time=5.858..10.988 rows=10001 loops=1)
+Hash Anti Join  (cost=280.02..580.54 rows=1 width=12) (actual time=14.232..27.140 rows=10001 loops=1)
   Output: tt1.a, tt1.b, tt1.c
   Hash Cond: (tt1.a = tt2.b)
   Buffers: shared hit=218
-  ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=12) (actual time=0.107..1.538 rows=10001 loops=1)
+  ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=12) (actual time=0.294..3.730 rows=10001 loops=1)
         Output: tt1.a, tt1.b, tt1.c
         Buffers: shared hit=163
-  ->  Hash  (cost=155.01..155.01 rows=10001 width=4) (actual time=5.741..5.741 rows=10001 loops=1)
+  ->  Hash  (cost=155.01..155.01 rows=10001 width=4) (actual time=13.916..13.919 rows=10001 loops=1)
         Output: tt2.b
         Buckets: 16384  Batches: 1  Memory Usage: 480kB
         Buffers: shared hit=55
-        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.008..2.697 rows=10001 loops=1)
+        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.023..6.598 rows=10001 loops=1)
               Output: tt2.b
               Buffers: shared hit=55
-Planning Time: 0.141 ms
-Execution Time: 11.936 ms
+Planning Time: 0.677 ms
+Execution Time: 29.567 ms
 
 =======
 ### TEXT-short       ###### Plan 23: WindowAgg
-WindowAgg  (cost=952.47..1152.49 rows=10001 width=8) (actual time=4.993..16.485 rows=10001 loops=1)
+WindowAgg  (cost=952.47..1152.49 rows=10001 width=8) (actual time=12.556..42.738 rows=10001 loops=1)
   Output: first_value(a) OVER (?), ((a / 10))
   Buffers: shared hit=163
-  ->  Sort  (cost=952.47..977.47 rows=10001 width=8) (actual time=4.985..5.858 rows=10001 loops=1)
+  ->  Sort  (cost=952.47..977.47 rows=10001 width=8) (actual time=12.544..14.802 rows=10001 loops=1)
         Output: ((a / 10)), a
         Sort Key: ((tt1.a / 10))
         Sort Method: quicksort  Memory: 855kB
         Buffers: shared hit=163
-        ->  Seq Scan on public.tt1  (cost=0.00..288.01 rows=10001 width=8) (actual time=0.110..2.504 rows=10001 loops=1)
+        ->  Seq Scan on public.tt1  (cost=0.00..288.01 rows=10001 width=8) (actual time=0.361..7.458 rows=10001 loops=1)
               Output: (a / 10), a
               Buffers: shared hit=163
-Planning Time: 0.058 ms
-Execution Time: 17.937 ms
+Planning Time: 0.128 ms
+Execution Time: 46.257 ms
 
 =======
 ### TEXT-short       ###### Plan 24: Unique
-Unique  (cost=0.29..785.30 rows=10001 width=4) (actual time=0.017..8.763 rows=10001 loops=1)
+Unique  (cost=0.29..677.30 rows=10001 width=4) (actual time=0.089..129.670 rows=10001 loops=1)
   Output: a
-  Buffers: shared hit=165
-  ->  Index Only Scan using i_tt1 on public.tt1  (cost=0.29..760.30 rows=10001 width=4) (actual time=0.016..4.962 rows=10001 loops=1)
+  Buffers: shared hit=15403
+  ->  Index Only Scan using i_tt1 on public.tt1  (cost=0.29..652.30 rows=10001 width=4) (actual time=0.087..118.564 rows=10001 loops=1)
         Output: a
-        Heap Fetches: 10001
-        Buffers: shared hit=165
-Planning Time: 0.051 ms
-Execution Time: 9.638 ms
+        Heap Fetches: 20208
+        Buffers: shared hit=15403
+Planning Time: 0.153 ms
+Execution Time: 131.893 ms
 
 =======
 ### TEXT-short       ###### Plan 25: PlainAggregate
-Aggregate  (cost=288.01..288.02 rows=1 width=8) (actual time=3.420..3.420 rows=1 loops=1)
+Aggregate  (cost=288.01..288.02 rows=1 width=8) (actual time=6.445..6.446 rows=1 loops=1)
   Output: sum(a)
   Buffers: shared hit=163
-  ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.113..1.452 rows=10001 loops=1)
+  ->  Seq Scan on public.tt1  (cost=0.00..263.01 rows=10001 width=4) (actual time=0.190..2.847 rows=10001 loops=1)
         Output: a, b, c
         Buffers: shared hit=163
-Planning Time: 0.062 ms
-Execution Time: 3.537 ms
+Planning Time: 0.205 ms
+Execution Time: 6.684 ms
 
 =======
 ### TEXT-short       ###### Plan 26: BitmapIndexScan/BitmapHeapScan, BitmapOr, lossy
-Bitmap Heap Scan on public.tt3  (cost=4239.43..7462.44 rows=180001 width=12) (actual time=26.037..64.054 rows=180000 loops=1)
+Bitmap Heap Scan on public.tt3  (cost=3947.41..7170.40 rows=179999 width=12) (actual time=55.836..128.723 rows=180000 loops=1)
   Output: a, b, c
   Recheck Cond: (tt3.b > '-99998'::integer)
   Heap Blocks: exact=973
-  Buffers: shared hit=1682
-  ->  Bitmap Index Scan using i_tt3_b  (cost=0.00..4194.43 rows=180001 width=0) (actual time=25.838..25.838 rows=180000 loops=1)
+  Buffers: shared hit=1609
+  ->  Bitmap Index Scan using i_tt3_b  (cost=0.00..3902.41 rows=179999 width=0) (actual time=55.082..55.082 rows=180000 loops=1)
         Index Cond: (tt3.b > '-99998'::integer)
-        Buffers: shared hit=709
-Planning Time: 0.124 ms
-Execution Time: 77.880 ms
+        Buffers: shared hit=636
+Planning Time: 0.181 ms
+Execution Time: 156.537 ms
 
 =======
 ### TEXT-short       ###### Plan 27: Join Filter
-Limit  (cost=0.00..21.52 rows=100 width=12) (actual time=5.615..5.725 rows=100 loops=1)
+Limit  (cost=0.00..21.52 rows=100 width=12) (actual time=18.516..18.804 rows=100 loops=1)
   Output: tt2.a, tt2.b, tt2.c
   Buffers: shared hit=40, temp written=12
-  ->  Nested Loop  (cost=0.00..43048282.11 rows=200023334 width=12) (actual time=5.614..5.712 rows=100 loops=1)
+  ->  Nested Loop  (cost=0.00..43048282.11 rows=200023334 width=12) (actual time=18.514..18.773 rows=100 loops=1)
         Output: tt2.a, tt2.b, tt2.c
         Join Filter: ((tt2.a < tt3.a) AND ((tt3.a + tt2.a) < 100000))
         Rows Removed by Join Filter: 7001
         Buffers: shared hit=40, temp written=12
-        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=12) (actual time=0.014..0.014 rows=1 loops=1)
+        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=12) (actual time=0.041..0.042 rows=1 loops=1)
               Output: tt2.a, tt2.b, tt2.c
               Buffers: shared hit=1
-        ->  Materialize  (cost=0.00..4377.05 rows=180003 width=4) (actual time=0.010..4.634 rows=7101 loops=1)
+        ->  Materialize  (cost=0.00..4377.05 rows=180003 width=4) (actual time=0.024..15.020 rows=7101 loops=1)
               Output: tt3.a
               Buffers: shared hit=39, temp written=12
-              ->  Seq Scan on public.tt3  (cost=0.00..2773.03 rows=180003 width=4) (actual time=0.008..1.872 rows=7101 loops=1)
+              ->  Seq Scan on public.tt3  (cost=0.00..2773.03 rows=180003 width=4) (actual time=0.019..4.949 rows=7101 loops=1)
                     Output: tt3.a
                     Buffers: shared hit=39
-Planning Time: 0.274 ms
-Execution Time: 6.070 ms
+Planning Time: 0.410 ms
+Execution Time: 19.629 ms
 
 =======
 ### TEXT-short       ###### Plan 28: TidScan
-Tid Scan on public.tt3  (cost=0.00..4.01 rows=1 width=12) (actual time=0.004..0.004 rows=1 loops=1)
+Tid Scan on public.tt3  (cost=0.00..4.01 rows=1 width=12) (actual time=0.006..0.007 rows=1 loops=1)
   Output: a, b, c
   Tid Cond: (tt3.ctid = '(0,28)'::tid)
   Buffers: shared hit=1
-Planning Time: 0.068 ms
-Execution Time: 0.080 ms
+Planning Time: 0.126 ms
+Execution Time: 0.171 ms
 
 =======
 ### TEXT-short       ###### Plan 29: LockRows
-LockRows  (cost=0.00..313.51 rows=50 width=10) (actual time=0.247..3.890 rows=1001 loops=1)
+LockRows  (cost=0.00..313.51 rows=50 width=10) (actual time=0.194..9.193 rows=1001 loops=1)
   Output: a, ctid
   Buffers: shared hit=1164
-  ->  Seq Scan on public.tt1  (cost=0.00..313.01 rows=50 width=10) (actual time=0.236..2.665 rows=1001 loops=1)
+  ->  Seq Scan on public.tt1  (cost=0.00..313.01 rows=50 width=10) (actual time=0.174..6.703 rows=1001 loops=1)
         Output: a, ctid
         Filter: ((tt1.a % 10) = 0)
         Rows Removed by Filter: 9000
         Buffers: shared hit=163
-Planning Time: 0.041 ms
-Execution Time: 4.146 ms
+Planning Time: 0.090 ms
+Execution Time: 9.816 ms
 
 =======
 ### TEXT-short       ###### Plan 30: Materialize
-Seq Scan on public.tt1  (cost=0.00..1150490.52 rows=5000 width=12) (actual time=5.303..5.303 rows=0 loops=1)
+Seq Scan on public.tt1  (cost=0.00..1150490.52 rows=5000 width=12) (actual time=283.105..283.171 rows=0 loops=1)
   Output: tt1.a, tt1.b, tt1.c
   Filter: (SubPlan 1)
   Rows Removed by Filter: 10001
@@ -1171,180 +1267,205 @@ Seq Scan on public.tt1  (cost=0.00..1150490.52 rows=5000 width=12) (actual time=
     ->  Materialize  (cost=0.00..205.01 rows=10001 width=4) (actual time=0.000..0.000 rows=1 loops=10001)
           Output: tt2.b
           Buffers: shared hit=1
-        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.007..0.007 rows=1 loops=1)
+        ->  Seq Scan on public.tt2  (cost=0.00..155.01 rows=10001 width=4) (actual time=0.042..0.043 rows=1 loops=1)
               Output: tt2.b
               Buffers: shared hit=1
-Planning Time: 0.058 ms
-Execution Time: 5.462 ms
+Planning Time: 0.226 ms
+Execution Time: 324.140 ms
 
 =======
 ### TEXT-short       ###### Plan 31: Update on partitioned tables
-Update on public.p  (cost=0.00..3691.07 rows=200006 width=18) (actual time=4815.842..4815.842 rows=0 loops=1)
+Update on public.p  (cost=0.00..3691.07 rows=200006 width=18) (actual time=6593.618..6593.620 rows=0 loops=1)
   Update on public.p
-  Update on public.tt1
-  Update on public.tt2
-  Update on public.tt3
-  Buffers: shared hit=1563330 read=2644 dirtied=2644
-  ->  Seq Scan on public.p  (cost=0.00..0.00 rows=1 width=46) (actual time=0.001..0.001 rows=0 loops=1)
+  Update on public.tt1 p_1
+  Update on public.tt2 p_2
+  Update on public.tt3 p_3
+  Buffers: shared hit=1533945 dirtied=1554 written=1554
+  ->  Seq Scan on public.p  (cost=0.00..0.00 rows=1 width=46) (actual time=0.005..0.005 rows=0 loops=1)
         Output: p.a, (p.b + 1), p.c, p.ctid
-  ->  Seq Scan on public.tt1  (cost=0.00..288.01 rows=10001 width=18) (actual time=0.104..8.404 rows=10001 loops=1)
-        Output: tt1.a, (tt1.b + 1), tt1.c, tt1.ctid
+  ->  Seq Scan on public.tt1 p_1  (cost=0.00..288.01 rows=10001 width=18) (actual time=0.194..19.441 rows=10001 loops=1)
+        Output: p_1.a, (p_1.b + 1), p_1.c, p_1.ctid
         Buffers: shared hit=163
-  ->  Seq Scan on public.tt2  (cost=0.00..180.01 rows=10001 width=18) (actual time=0.010..5.678 rows=10001 loops=1)
-        Output: tt2.a, (tt2.b + 1), tt2.c, tt2.ctid
+  ->  Seq Scan on public.tt2 p_2  (cost=0.00..180.01 rows=10001 width=18) (actual time=0.036..12.870 rows=10001 loops=1)
+        Output: p_2.a, (p_2.b + 1), p_2.c, p_2.ctid
         Buffers: shared hit=55
-  ->  Seq Scan on public.tt3  (cost=0.00..3223.04 rows=180003 width=18) (actual time=0.010..113.138 rows=180003 loops=1)
-        Output: tt3.a, (tt3.b + 1), tt3.c, tt3.ctid
+  ->  Seq Scan on public.tt3 p_3  (cost=0.00..3223.04 rows=180003 width=18) (actual time=0.023..215.144 rows=180003 loops=1)
+        Output: p_3.a, (p_3.b + 1), p_3.c, p_3.ctid
         Buffers: shared hit=973
-Planning Time: 0.174 ms
-Trigger tt1_trig_1: time=96.575 calls=10001
-Trigger tt1_trig_2: time=69.629 calls=10001
-Execution Time: 4816.260 ms
+Planning Time: 0.837 ms
+Trigger tt1_trig_1: time=89.516 calls=10001
+Trigger tt1_trig_2: time=69.948 calls=10001
+Execution Time: 6594.881 ms
 
 =======
 ### TEXT-short       ###### Plan 32: Delete on partitioned tables
-Delete on public.p  (cost=0.00..32.80 rows=6 width=6) (actual time=0.499..0.499 rows=0 loops=1)
+Delete on public.p  (cost=0.00..32.80 rows=6 width=6) (actual time=0.580..0.581 rows=0 loops=1)
   Delete on public.p
-  Delete on public.tt1
-  Delete on public.tt2
-  Delete on public.tt3
+  Delete on public.tt1 p_1
+  Delete on public.tt2 p_2
+  Delete on public.tt3 p_3
   Buffers: shared hit=18
-  ->  Seq Scan on public.p  (cost=0.00..0.00 rows=1 width=6) (actual time=0.005..0.005 rows=0 loops=1)
+  ->  Seq Scan on public.p  (cost=0.00..0.00 rows=1 width=6) (actual time=0.009..0.009 rows=0 loops=1)
         Output: p.ctid
         Filter: (p.a = 100)
-  ->  Index Scan using i_tt1 on public.tt1  (cost=0.29..8.30 rows=1 width=6) (actual time=0.144..0.239 rows=1 loops=1)
-        Output: tt1.ctid
-        Index Cond: (tt1.a = 100)
+  ->  Index Scan using i_tt1 on public.tt1 p_1  (cost=0.29..8.30 rows=1 width=6) (actual time=0.326..0.335 rows=1 loops=1)
+        Output: p_1.ctid
+        Index Cond: (p_1.a = 100)
         Buffers: shared hit=5
-  ->  Index Scan using i_tt2 on public.tt2  (cost=0.29..8.30 rows=1 width=6) (actual time=0.011..0.011 rows=0 loops=1)
-        Output: tt2.ctid
-        Index Cond: (tt2.a = 100)
+  ->  Index Scan using i_tt2 on public.tt2 p_2  (cost=0.29..8.30 rows=1 width=6) (actual time=0.015..0.015 rows=0 loops=1)
+        Output: p_2.ctid
+        Index Cond: (p_2.a = 100)
         Buffers: shared hit=2
-  ->  Index Scan using i_tt3_a on public.tt3  (cost=0.42..16.20 rows=3 width=6) (actual time=0.016..0.216 rows=2 loops=1)
-        Output: tt3.ctid
-        Index Cond: (tt3.a = 100)
+  ->  Index Scan using i_tt3_a on public.tt3 p_3  (cost=0.42..16.20 rows=3 width=6) (actual time=0.160..0.175 rows=2 loops=1)
+        Output: p_3.ctid
+        Index Cond: (p_3.a = 100)
         Buffers: shared hit=8
-Planning Time: 0.452 ms
-Execution Time: 1.191 ms
+Planning Time: 0.577 ms
+Execution Time: 1.330 ms
 
 =======
 ### TEXT-short       ###### Plan 33: ON CONFLICT
-Insert on public.ct1  (cost=0.00..0.01 rows=1 width=8) (actual time=0.068..0.068 rows=0 loops=1)
+Insert on public.ct1  (cost=0.00..0.01 rows=1 width=8) (actual time=0.088..0.089 rows=0 loops=1)
   Conflict Resolution: UPDATE
   Conflict Arbiter Indexes: ct1_a_key
   Tuples Inserted: 0
   Conflicting Tuples: 1
   Buffers: shared hit=5
-  ->  Result  (cost=0.00..0.01 rows=1 width=8) (actual time=0.002..0.002 rows=1 loops=1)
+  ->  Result  (cost=0.00..0.01 rows=1 width=8) (actual time=0.003..0.004 rows=1 loops=1)
         Output: 1, 1
-Planning Time: 0.107 ms
-Execution Time: 0.373 ms
+Planning Time: 0.133 ms
+Execution Time: 0.533 ms
 
 =======
 ### TEXT-short       ###### Plan 34: GROUP BY
-HashAggregate  (cost=450.00..583.13 rows=13314 width=40) (actual time=23.255..32.379 rows=10000 loops=1)
+HashAggregate  (cost=450.00..583.13 rows=13314 width=40) (actual time=25.192..34.691 rows=10000 loops=1)
   Output: a, b, max(c)
   Group Key: tt1.a, tt1.b
+  Planned Partitions: 0
+  HashAgg Batches: 1
+  Disk Usage: 0
   Buffers: shared hit=217
-  ->  Seq Scan on public.tt1  (cost=0.00..350.14 rows=13314 width=12) (actual time=0.238..9.547 rows=10000 loops=1)
+  ->  Seq Scan on public.tt1  (cost=0.00..350.14 rows=13314 width=12) (actual time=0.271..9.164 rows=10000 loops=1)
         Output: a, b, c
         Buffers: shared hit=217
-Planning Time: 0.148 ms
-Execution Time: 35.078 ms
+Planning Time: 0.184 ms
+Execution Time: 37.008 ms
 
 =======
 ### TEXT-short       ###### Plan 35: GROUPING SETS
-MixedAggregate  (cost=0.00..782.86 rows=26629 width=40) (actual time=24.354..39.455 rows=20001 loops=1)
+MixedAggregate  (cost=0.29..1155.42 rows=26629 width=40) (actual time=0.078..174.931 rows=20001 loops=1)
   Output: a, b, max(c)
-  Hash Key: tt1.a
   Hash Key: tt1.b
+  Group Key: tt1.a
   Group Key: ()
-  Buffers: shared hit=217
-  ->  Seq Scan on public.tt1  (cost=0.00..350.14 rows=13314 width=12) (actual time=0.228..3.187 rows=10000 loops=1)
+  Planned Partitions: 0
+  HashAgg Batches: 1
+  Disk Usage: 0
+  Buffers: shared hit=30354
+  ->  Index Scan using i_tt1 on public.tt1  (cost=0.29..755.99 rows=13314 width=12) (actual time=0.057..121.202 rows=10000 loops=1)
         Output: a, b, c
-        Buffers: shared hit=217
-Planning Time: 0.160 ms
-Execution Time: 44.202 ms
+        Buffers: shared hit=30354
+Planning Time: 0.187 ms
+Execution Time: 179.709 ms
 
 =======
 ### TEXT-short       ###### Plan 36: Table sample
-Sample Scan  (cost=0.00..9.33 rows=133 width=12) (actual time=0.020..0.071 rows=185 loops=1)
+Sample Scan  (cost=0.00..9.33 rows=133 width=12) (actual time=0.030..0.122 rows=185 loops=1)
   Output: a, b, c
   Sampling: system ('1'::real) REPEATABLE ('1'::double precision)
   Buffers: shared hit=1
-Planning Time: 0.074 ms
-Execution Time: 0.236 ms
+Planning Time: 0.081 ms
+Execution Time: 0.265 ms
 
 =======
 ### TEXT-short       ###### Plan 37: Project Set
-Table Function Scan  (cost=0.00..1.00 rows=100 width=32) (actual time=0.098..0.098 rows=2 loops=1)
+Table Function Scan  (cost=0.00..1.00 rows=100 width=32) (actual time=0.069..0.070 rows=2 loops=1)
   Output: name
   Table Function Call: XMLTABLE(('//towns/town'::text) PASSING ('<towns><town><name>Toronto</name></town><town><name>Ottawa</name></town></towns>'::xml) COLUMNS name text)
-Planning Time: 0.025 ms
-Execution Time: 0.216 ms
-
-=======
-### TEXT-short       ###### Plan 38: Named Tuplestore Scan
-Aggregate  (cost=0.00..0.01 rows=1 width=8) (actual time=0.005..0.005 rows=1 loops=1)
-  ->  Named Tuplestore Scan  (cost=0.00..0.00 rows=1 width=4) (actual time=0.001..0.001 rows=1 loops=1)
-
-=======
-### TEXT-short       ###### Plan 39: Parallel Seq Scan
-Gather  (cost=0.00..21845.68 rows=1814322 width=36) (actual time=0.443..110.055 rows=100000 loops=1)
+Planning Time: 0.026 ms
+Execution Time: 0.314 ms
+
+=======
+### TEXT-short       ###### Plan 38: Incremental Sort
+Limit  (cost=67.50..69.11 rows=31 width=8) (actual time=2.004..2.021 rows=31 loops=1)
+  Output: (((i.i / 100) + 1)), ((i.i + 1))
+  ->  Incremental Sort  (cost=67.50..119.38 rows=1000 width=8) (actual time=2.003..2.010 rows=31 loops=1)
+        Output: (((i.i / 100) + 1)), ((i.i + 1))
+        Sort Key: (((i.i / 100) + 1)), ((i.i + 1))
+        ->  Sort  (cost=67.33..69.83 rows=1000 width=8) (actual time=1.760..1.779 rows=101 loops=1)
+              Output: (((i.i / 100) + 1)), ((i.i + 1))
+              Sort Key: (((i.i / 100) + 1))
+              Sort Method: quicksort  Memory: 79kB
+              ->  Function Scan on pg_catalog.generate_series i  (cost=0.00..17.50 rows=1000 width=8) (actual time=0.287..1.104 rows=1000 loops=1)
+                    Output: ((i.i / 100) + 1), (i.i + 1)
+                    Function Call: generate_series(0, 999)
+Planning Time: 0.162 ms
+Execution Time: 3.038 ms
+
+=======
+### TEXT-short       ###### Plan 39: Named Tuplestore Scan
+Aggregate  (cost=0.02..0.03 rows=1 width=8) (actual time=0.007..0.008 rows=1 loops=1)
+  ->  Named Tuplestore Scan  (cost=0.00..0.02 rows=1 width=4) (actual time=0.001..0.002 rows=1 loops=1)
+
+=======
+### TEXT-short       ###### Plan 40: Parallel Seq Scan
+Gather  (cost=0.00..21845.68 rows=1814322 width=36) (actual time=1.231..147.766 rows=100000 loops=1)
   Output: a, b
   Workers Planned: 2
   Workers Launched: 2
   Single Copy: false
-  Buffers: shared hit=11376 read=3020 dirtied=3025 written=3013
-  ->  Parallel Seq Scan on public.lt1  (cost=0.00..21845.68 rows=755968 width=36) (actual time=0.042..49.223 rows=33333 loops=3)
+  Buffers: shared hit=14286
+  ->  Parallel Seq Scan on public.lt1  (cost=0.00..21845.68 rows=755968 width=36) (actual time=0.023..45.673 rows=33333 loops=3)
         Output: a, b
-        Buffers: shared hit=11271 read=3015 dirtied=3025 written=3009
-        Worker 0 (actual time=0.041..64.126 rows=43328 loops=1)
-          Buffers: shared hit=4998 read=1192 dirtied=1192 written=1190
-        Worker 1 (actual time=0.035..64.204 rows=43204 loops=1)
-          Buffers: shared hit=5000 read=1172 dirtied=1172 written=1169
-Planning Time: 0.134 ms
-Execution Time: 125.149 ms
+        Buffers: shared hit=14286
+        Worker 0 (actual time=0.027..45.602 rows=28364 loops=1)
+          Buffers: shared hit=4052
+        Worker 1 (actual time=0.029..45.180 rows=28040 loops=1)
+          Buffers: shared hit=4006
+Planning Time: 0.426 ms
+Execution Time: 169.896 ms
 
 =======
-### TEXT-short       ###### Plan 40: Parallel Index Scan
-Gather  (cost=0.29..16.06 rows=133 width=12) (actual time=0.243..8.954 rows=100 loops=1)
+### TEXT-short       ###### Plan 41: Parallel Index Scan
+Gather  (cost=0.29..12.05 rows=132 width=12) (actual time=0.595..54.680 rows=100 loops=1)
   Output: a, b, c
   Workers Planned: 1
   Workers Launched: 1
   Single Copy: false
-  Buffers: shared hit=284 read=6
-  ->  Parallel Index Scan using i_tt1 on public.tt1  (cost=0.29..16.06 rows=78 width=12) (actual time=0.011..0.096 rows=50 loops=2)
+  Buffers: shared hit=368
+  ->  Parallel Index Scan using i_tt1 on public.tt1  (cost=0.29..12.05 rows=78 width=12) (actual time=0.049..1.496 rows=50 loops=2)
         Output: a, b, c
         Index Cond: (tt1.a < 100)
-        Buffers: shared hit=166
-        Worker 0 (actual time=0.002..0.002 rows=0 loops=1)
-Planning Time: 0.152 ms
-Execution Time: 9.620 ms
+        Buffers: shared hit=368
+        Worker 0 (actual time=0.003..0.003 rows=0 loops=1)
+Planning Time: 0.437 ms
+Execution Time: 55.017 ms
 
 =======
-### TEXT-short       ###### Plan 41: Gather Merge
-Gather Merge  (cost=617.52..747.07 rows=11096 width=4) (actual time=8.062..12.057 rows=10000 loops=1)
+### TEXT-short       ###### Plan 42: Gather Merge
+Gather Merge  (cost=617.52..747.07 rows=11096 width=4) (actual time=52.306..58.163 rows=10000 loops=1)
   Output: a
   Workers Planned: 2
   Workers Launched: 2
-  Buffers: shared hit=217
-  ->  Sort  (cost=617.50..631.37 rows=5548 width=4) (actual time=2.169..2.511 rows=3333 loops=3)
+  Buffers: shared hit=331
+  ->  Sort  (cost=617.50..631.37 rows=5548 width=4) (actual time=4.948..5.669 rows=3333 loops=3)
         Output: a
         Sort Key: tt1.a
         Sort Method: quicksort  Memory: 931kB
-        Buffers: shared hit=313
-        Worker 0 (actual time=0.247..0.247 rows=0 loops=1)
-          Buffers: shared hit=48
-        Worker 1 (actual time=0.247..0.247 rows=0 loops=1)
-          Buffers: shared hit=48
-        ->  Parallel Seq Scan on public.tt1  (cost=0.00..272.48 rows=5548 width=4) (actual time=0.056..0.982 rows=3333 loops=3)
+        Buffers: shared hit=331
+        Worker 0 (actual time=0.443..0.443 rows=0 loops=1)
+          Sort Method: quicksort  Memory: 25kB
+          Buffers: shared hit=57
+        Worker 1 (actual time=0.443..0.444 rows=0 loops=1)
+          Sort Method: quicksort  Memory: 25kB
+          Buffers: shared hit=57
+        ->  Parallel Seq Scan on public.tt1  (cost=0.00..272.48 rows=5548 width=4) (actual time=0.108..2.529 rows=3333 loops=3)
               Output: a
               Buffers: shared hit=217
-              Worker 0 (actual time=0.001..0.001 rows=0 loops=1)
-              Worker 1 (actual time=0.001..0.001 rows=0 loops=1)
-Planning Time: 0.079 ms
-Execution Time: 13.579 ms
+              Worker 0 (actual time=0.002..0.002 rows=0 loops=1)
+              Worker 1 (actual time=0.002..0.002 rows=0 loops=1)
+Planning Time: 0.109 ms
+Execution Time: 61.122 ms
 ###### long-json-as-a-source test
 SELECT '### '||'yaml-long JSON   '||title||E'\n'||
   pg_store_plans_yamlplan(lplan)
@@ -1358,17 +1479,17 @@ SELECT '### '||'yaml-long JSON   '||title||E'\n'||
     Schema: "public"
     Alias: "tt1"
     Startup Cost: 0.00
-    Total Cost: 10.00
-    Plan Rows: 1000
+    Total Cost: 100.01
+    Plan Rows: 10001
     Plan Width: 40
-    Actual Startup Time: 348.383
-    Actual Total Time: 348.383
+    Actual Startup Time: 307.054
+    Actual Total Time: 307.055
     Actual Rows: 0
     Actual Loops: 1
-    Shared Hit Blocks: 29732
-    Shared Read Blocks: 87
+    Shared Hit Blocks: 29736
+    Shared Read Blocks: 3
     Shared Dirtied Blocks: 85
-    Shared Written Blocks: 0
+    Shared Written Blocks: 84
     Local Hit Blocks: 0
     Local Read Blocks: 0
     Local Dirtied Blocks: 0
@@ -1383,11 +1504,11 @@ SELECT '### '||'yaml-long JSON   '||title||E'\n'||
         Schema: "pg_catalog"
         Alias: "a"
         Startup Cost: 0.00
-        Total Cost: 10.00
-        Plan Rows: 1000
+        Total Cost: 100.01
+        Plan Rows: 10001
         Plan Width: 40
-        Actual Startup Time: 2.530
-        Actual Total Time: 10.954
+        Actual Startup Time: 3.739
+        Actual Total Time: 12.801
         Actual Rows: 10001
         Actual Loops: 1
         Output:
@@ -1405,17 +1526,29 @@ SELECT '### '||'yaml-long JSON   '||title||E'\n'||
         Local Written Blocks: 0
         Temp Read Blocks: 0
         Temp Written Blocks: 0
-  Planning Time: 0.063
+  
+- Planning:
+    Shared Hit Blocks: 0
+    Shared Read Blocks: 0
+    Shared Dirtied Blocks: 0
+    Shared Written Blocks: 0
+    Local Hit Blocks: 0
+    Local Read Blocks: 0
+    Local Dirtied Blocks: 0
+    Local Written Blocks: 0
+    Temp Read Blocks: 0
+    Temp Written Blocks: 0
+  Planning Time: 0.064
   Triggers:
     - Trigger Name: "tt1_trig_1"
       Relation: "tt1"
-      Time: 120.303
+      Time: 80.641
       Calls: 10001
     - Trigger Name: "tt1_trig_2"
       Relation: "tt1"
-      Time: 95.115
+      Time: 63.621
       Calls: 10001
-  Execution Time: 349.084
+  Execution Time: 308.848
 ##################
 SELECT '### '||'xml-long JSON    '||title||E'\n'||
   pg_store_plans_xmlplan(lplan)
@@ -1431,17 +1564,17 @@ SELECT '### '||'xml-long JSON    '||title||E'\n'||
       <Schema>public</Schema>
       <Alias>tt1</Alias>
       <Startup-Cost>0.00</Startup-Cost>
-      <Total-Cost>10.00</Total-Cost>
-      <Plan-Rows>1000</Plan-Rows>
+      <Total-Cost>100.01</Total-Cost>
+      <Plan-Rows>10001</Plan-Rows>
       <Plan-Width>40</Plan-Width>
-      <Actual-Startup-Time>348.383</Actual-Startup-Time>
-      <Actual-Total-Time>348.383</Actual-Total-Time>
+      <Actual-Startup-Time>307.054</Actual-Startup-Time>
+      <Actual-Total-Time>307.055</Actual-Total-Time>
       <Actual-Rows>0</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
-      <Shared-Hit-Blocks>29732</Shared-Hit-Blocks>
-      <Shared-Read-Blocks>87</Shared-Read-Blocks>
+      <Shared-Hit-Blocks>29736</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>3</Shared-Read-Blocks>
       <Shared-Dirtied-Blocks>85</Shared-Dirtied-Blocks>
-      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Shared-Written-Blocks>84</Shared-Written-Blocks>
       <Local-Hit-Blocks>0</Local-Hit-Blocks>
       <Local-Read-Blocks>0</Local-Read-Blocks>
       <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
@@ -1457,11 +1590,11 @@ SELECT '### '||'xml-long JSON    '||title||E'\n'||
           <Schema>pg_catalog</Schema>
           <Alias>a</Alias>
           <Startup-Cost>0.00</Startup-Cost>
-          <Total-Cost>10.00</Total-Cost>
-          <Plan-Rows>1000</Plan-Rows>
+          <Total-Cost>100.01</Total-Cost>
+          <Plan-Rows>10001</Plan-Rows>
           <Plan-Width>40</Plan-Width>
-          <Actual-Startup-Time>2.530</Actual-Startup-Time>
-          <Actual-Total-Time>10.954</Actual-Total-Time>
+          <Actual-Startup-Time>3.739</Actual-Startup-Time>
+          <Actual-Total-Time>12.801</Actual-Total-Time>
           <Actual-Rows>10001</Actual-Rows>
           <Actual-Loops>1</Actual-Loops>
           <Output>
@@ -1483,22 +1616,34 @@ SELECT '### '||'xml-long JSON    '||title||E'\n'||
         </Item>
       </Plans>
     </Plan>
-    <Planning-Time>0.063</Planning-Time>
+    <Planning>
+      <Shared-Hit-Blocks>0</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>0</Shared-Read-Blocks>
+      <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
+      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Local-Hit-Blocks>0</Local-Hit-Blocks>
+      <Local-Read-Blocks>0</Local-Read-Blocks>
+      <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
+      <Local-Written-Blocks>0</Local-Written-Blocks>
+      <Temp-Read-Blocks>0</Temp-Read-Blocks>
+      <Temp-Written-Blocks>0</Temp-Written-Blocks>
+    </Planning>
+    <Planning-Time>0.064</Planning-Time>
     <Triggers>
       <Item>
         <Trigger-Name>tt1_trig_1</Trigger-Name>
         <Relation>tt1</Relation>
-        <Time>120.303</Time>
+        <Time>80.641</Time>
         <Calls>10001</Calls>
       </Item>
       <Item>
         <Trigger-Name>tt1_trig_2</Trigger-Name>
         <Relation>tt1</Relation>
-        <Time>95.115</Time>
+        <Time>63.621</Time>
         <Calls>10001</Calls>
       </Item>
     </Triggers>
-    <Execution-Time>349.084</Execution-Time>
+    <Execution-Time>308.848</Execution-Time>
   </Query>
 </explain>
 
@@ -1517,17 +1662,17 @@ SELECT '### '||'text-long JSON   '||title||E'\n'||
       <Schema>public</Schema>
       <Alias>tt1</Alias>
       <Startup-Cost>0.00</Startup-Cost>
-      <Total-Cost>10.00</Total-Cost>
-      <Plan-Rows>1000</Plan-Rows>
+      <Total-Cost>100.01</Total-Cost>
+      <Plan-Rows>10001</Plan-Rows>
       <Plan-Width>40</Plan-Width>
-      <Actual-Startup-Time>348.383</Actual-Startup-Time>
-      <Actual-Total-Time>348.383</Actual-Total-Time>
+      <Actual-Startup-Time>307.054</Actual-Startup-Time>
+      <Actual-Total-Time>307.055</Actual-Total-Time>
       <Actual-Rows>0</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
-      <Shared-Hit-Blocks>29732</Shared-Hit-Blocks>
-      <Shared-Read-Blocks>87</Shared-Read-Blocks>
+      <Shared-Hit-Blocks>29736</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>3</Shared-Read-Blocks>
       <Shared-Dirtied-Blocks>85</Shared-Dirtied-Blocks>
-      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Shared-Written-Blocks>84</Shared-Written-Blocks>
       <Local-Hit-Blocks>0</Local-Hit-Blocks>
       <Local-Read-Blocks>0</Local-Read-Blocks>
       <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
@@ -1543,11 +1688,11 @@ SELECT '### '||'text-long JSON   '||title||E'\n'||
           <Schema>pg_catalog</Schema>
           <Alias>a</Alias>
           <Startup-Cost>0.00</Startup-Cost>
-          <Total-Cost>10.00</Total-Cost>
-          <Plan-Rows>1000</Plan-Rows>
+          <Total-Cost>100.01</Total-Cost>
+          <Plan-Rows>10001</Plan-Rows>
           <Plan-Width>40</Plan-Width>
-          <Actual-Startup-Time>2.530</Actual-Startup-Time>
-          <Actual-Total-Time>10.954</Actual-Total-Time>
+          <Actual-Startup-Time>3.739</Actual-Startup-Time>
+          <Actual-Total-Time>12.801</Actual-Total-Time>
           <Actual-Rows>10001</Actual-Rows>
           <Actual-Loops>1</Actual-Loops>
           <Output>
@@ -1569,22 +1714,34 @@ SELECT '### '||'text-long JSON   '||title||E'\n'||
         </Item>
       </Plans>
     </Plan>
-    <Planning-Time>0.063</Planning-Time>
+    <Planning>
+      <Shared-Hit-Blocks>0</Shared-Hit-Blocks>
+      <Shared-Read-Blocks>0</Shared-Read-Blocks>
+      <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
+      <Shared-Written-Blocks>0</Shared-Written-Blocks>
+      <Local-Hit-Blocks>0</Local-Hit-Blocks>
+      <Local-Read-Blocks>0</Local-Read-Blocks>
+      <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
+      <Local-Written-Blocks>0</Local-Written-Blocks>
+      <Temp-Read-Blocks>0</Temp-Read-Blocks>
+      <Temp-Written-Blocks>0</Temp-Written-Blocks>
+    </Planning>
+    <Planning-Time>0.064</Planning-Time>
     <Triggers>
       <Item>
         <Trigger-Name>tt1_trig_1</Trigger-Name>
         <Relation>tt1</Relation>
-        <Time>120.303</Time>
+        <Time>80.641</Time>
         <Calls>10001</Calls>
       </Item>
       <Item>
         <Trigger-Name>tt1_trig_2</Trigger-Name>
         <Relation>tt1</Relation>
-        <Time>95.115</Time>
+        <Time>63.621</Time>
         <Calls>10001</Calls>
       </Item>
     </Triggers>
-    <Execution-Time>349.084</Execution-Time>
+    <Execution-Time>308.848</Execution-Time>
   </Query>
 </explain>
 
@@ -1597,12 +1754,12 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
   "Plan": {
     "Node Type": "Sort",
     "Parallel Aware": false,
-    "Startup Cost": 1332.50,
-    "Total Cost": 1357.51,
+    "Startup Cost": 1432.51,
+    "Total Cost": 1457.52,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 18.612,
-    "Actual Total Time": 18.612,
+    "Actual Startup Time": 41.088,
+    "Actual Total Time": 41.091,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Output": ["\"*SELECT* 1\".a", "(0)"],
@@ -1628,11 +1785,11 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
         "Parallel Aware": false,
         "Command": "Intersect All",
         "Startup Cost": 0.00,
-        "Total Cost": 668.04,
+        "Total Cost": 768.05,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 18.606,
-        "Actual Total Time": 18.606,
+        "Actual Startup Time": 41.081,
+        "Actual Total Time": 41.083,
         "Actual Rows": 0,
         "Actual Loops": 1,
         "Output": ["\"*SELECT* 1\".a", "(0)"],
@@ -1652,7 +1809,11 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
             "Startup Cost": 0.00,
-            "Total Cost": 618.0
+            "Total Cost": 718.05,
+            "Plan Rows": 20002,
+            "Plan Width": 8,
+            "Actual Startup Time": 0.221,
+            "Actual Total Time": 
 <truncated>
 
 =======
@@ -1661,12 +1822,12 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
   "Plan": {
     "Node Type": "Sort",
     "Parallel Aware": false,
-    "Startup Cost": 1332.50,
-    "Total Cost": 1357.51,
+    "Startup Cost": 1432.51,
+    "Total Cost": 1457.52,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 22.556,
-    "Actual Total Time": 23.380,
+    "Actual Startup Time": 46.663,
+    "Actual Total Time": 48.678,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["\"*SELECT* 1\".a", "(0)"],
@@ -1692,11 +1853,11 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
         "Parallel Aware": false,
         "Command": "Except",
         "Startup Cost": 0.00,
-        "Total Cost": 668.04,
+        "Total Cost": 768.05,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 17.434,
-        "Actual Total Time": 18.500,
+        "Actual Startup Time": 35.260,
+        "Actual Total Time": 37.531,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["\"*SELECT* 1\".a", "(0)"],
@@ -1715,7 +1876,11 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
             "Node Type": "Append",
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
-            "Startup Cost": 0.00
+            "Startup Cost": 0.00,
+            "Total Cost": 718.05,
+            "Plan Rows": 20002,
+            "Plan Width": 8,
+            "Actual Startup Time": 0.2
 <truncated>
 
 =======
@@ -1724,12 +1889,12 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
   "Plan": {
     "Node Type": "Sort",
     "Parallel Aware": false,
-    "Startup Cost": 1332.50,
-    "Total Cost": 1357.51,
+    "Startup Cost": 1432.51,
+    "Total Cost": 1457.52,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 22.101,
-    "Actual Total Time": 22.924,
+    "Actual Startup Time": 48.922,
+    "Actual Total Time": 51.025,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["\"*SELECT* 1\".a", "(0)"],
@@ -1755,11 +1920,11 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
         "Parallel Aware": false,
         "Command": "Except All",
         "Startup Cost": 0.00,
-        "Total Cost": 668.04,
+        "Total Cost": 768.05,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 17.050,
-        "Actual Total Time": 17.997,
+        "Actual Startup Time": 34.965,
+        "Actual Total Time": 38.291,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["\"*SELECT* 1\".a", "(0)"],
@@ -1778,7 +1943,11 @@ SELECT '### '||'inflate-chopped  '||title||E'\n'||
             "Node Type": "Append",
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
-            "Startup Cost": 0.00
+            "Startup Cost": 0.00,
+            "Total Cost": 718.05,
+            "Plan Rows": 20002,
+            "Plan Width": 8,
+            "Actual Startup Time": 0.2
 <truncated>
 ##################
 SELECT '### '||'yaml-chopped     '||title||E'\n'||
@@ -1790,18 +1959,18 @@ SELECT '### '||'yaml-chopped     '||title||E'\n'||
     Parallel Aware: false
     Join Type: "Left"
     Startup Cost: 0.71
-    Total Cost: 4293.92
-    Plan Rows: 33292
+    Total Cost: 3860.52
+    Plan Rows: 33557
     Plan Width: 4
-    Actual Startup Time: 0.032
-    Actual Total Time: 65.448
+    Actual Startup Time: 0.105
+    Actual Total Time: 226.400
     Actual Rows: 60003
     Actual Loops: 1
     Output:
       - "x.b"
     Inner Unique: false
     Merge Cond: "(x.a = y.a)"
-    Shared Hit Blocks: 20946
+    Shared Hit Blocks: 35794
     Shared Read Blocks: 0
     Shared Dirtied Blocks: 0
     Shared Written Blocks: 0
@@ -1815,6 +1984,8 @@ SELECT '### '||'yaml-chopped     '||title||E'\n'||
       - Node Type: "Index Scan"
         Parent Relationship: "Outer"
         Parallel Aware: false
+        Scan Direction: "Forward"
+        Index Name: "i_tt1"
 <truncated>
 
 =======
@@ -1827,8 +1998,8 @@ SELECT '### '||'yaml-chopped     '||title||E'\n'||
     Total Cost: 680.55
     Plan Rows: 10001
     Plan Width: 4
-    Actual Startup Time: 5.466
-    Actual Total Time: 11.552
+    Actual Startup Time: 10.794
+    Actual Total Time: 25.225
     Actual Rows: 17001
     Actual Loops: 1
     Output:
@@ -1854,6 +2025,9 @@ SELECT '### '||'yaml-chopped     '||title||E'\n'||
         Alias: "x"
         Startup Cost: 0.00
         Total Cost: 263.01
+        Plan Rows: 10001
+        Plan Width: 8
+        Actual Startup Time: 0.171
 <truncated>
 
 =======
@@ -1866,8 +2040,8 @@ SELECT '### '||'yaml-chopped     '||title||E'\n'||
     Total Cost: 680.55
     Plan Rows: 10001
     Plan Width: 12
-    Actual Startup Time: 8.862
-    Actual Total Time: 8.862
+    Actual Startup Time: 20.909
+    Actual Total Time: 20.912
     Actual Rows: 0
     Actual Loops: 1
     Output:
@@ -1894,7 +2068,9 @@ SELECT '### '||'yaml-chopped     '||title||E'\n'||
         Schema: "public"
         Alias: "tt1"
         Startup Cost: 0.00
-        Total Cost: 2
+        Total Cost: 263.01
+        Plan Rows: 10001
+        Plan Width: 12
 <truncated>
 ##################
 SELECT '### '||'xml-chopped      '||title||E'\n'||
@@ -1911,8 +2087,8 @@ SELECT '### '||'xml-chopped      '||title||E'\n'||
       <Total-Cost>580.54</Total-Cost>
       <Plan-Rows>1</Plan-Rows>
       <Plan-Width>12</Plan-Width>
-      <Actual-Startup-Time>5.858</Actual-Startup-Time>
-      <Actual-Total-Time>10.988</Actual-Total-Time>
+      <Actual-Startup-Time>14.232</Actual-Startup-Time>
+      <Actual-Total-Time>27.140</Actual-Total-Time>
       <Actual-Rows>10001</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
       <Output>
@@ -1941,7 +2117,9 @@ SELECT '### '||'xml-chopped      '||title||E'\n'||
           <Schema>public</Schema>
           <Alias>tt1</Alias>
           <Startup-Cost>0.00</Startup-Cost>
-          <Total-Cost>
+          <Total-Cost>263.01</Total-Cost>
+          <Plan-Rows>10001</Plan-Rows>
+          <Plan-Width>12</Plan-Width>
 <truncated>
 
 =======
@@ -1955,8 +2133,8 @@ SELECT '### '||'xml-chopped      '||title||E'\n'||
       <Total-Cost>1152.49</Total-Cost>
       <Plan-Rows>10001</Plan-Rows>
       <Plan-Width>8</Plan-Width>
-      <Actual-Startup-Time>4.993</Actual-Startup-Time>
-      <Actual-Total-Time>16.485</Actual-Total-Time>
+      <Actual-Startup-Time>12.556</Actual-Startup-Time>
+      <Actual-Total-Time>42.738</Actual-Total-Time>
       <Actual-Rows>10001</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
       <Output>
@@ -1977,6 +2155,9 @@ SELECT '### '||'xml-chopped      '||title||E'\n'||
         <Plan>
           <Node-Type>Sort</Node-Type>
           <Parent-Relationship>Outer</Parent-Relationship>
+          <Parallel-Aware>false</Parallel-Aware>
+          <Startup-Cost>952.47</Startup-Cost>
+          <Total-Cost>977</Total-Cost>
 <truncated>
 
 =======
@@ -1987,45 +2168,50 @@ SELECT '### '||'xml-chopped      '||title||E'\n'||
       <Node-Type>Unique</Node-Type>
       <Parallel-Aware>false</Parallel-Aware>
       <Startup-Cost>0.29</Startup-Cost>
-      <Total-Cost>785.30</Total-Cost>
+      <Total-Cost>677.30</Total-Cost>
       <Plan-Rows>10001</Plan-Rows>
       <Plan-Width>4</Plan-Width>
-      <Actual-Startup-Time>0.017</Actual-Startup-Time>
-      <Actual-Total-Time>8.763</Actual-Total-Time>
+      <Actual-Startup-Time>0.089</Actual-Startup-Time>
+      <Actual-Total-Time>129.670</Actual-Total-Time>
       <Actual-Rows>10001</Actual-Rows>
       <Actual-Loops>1</Actual-Loops>
       <Output>
         <Item>a</Item>
       </Output>
-      <Shared-Hit-Blocks>165</Shared-Hit-Blocks>
+      <Shared-Hit-Blocks>15403</Shared-Hit-Blocks>
       <Shared-Read-Blocks>0</Shared-Read-Blocks>
       <Shared-Dirtied-Blocks>0</Shared-Dirtied-Blocks>
       <Shared-Written-Blocks>0</Shared-Written-Blocks>
       <Local-Hit-Blocks>0</Local-Hit-Blocks>
       <Local-Read-Blocks>0</Local-Read-Blocks>
+      <Local-Dirtied-Blocks>0</Local-Dirtied-Blocks>
+      <Local-Written-Blocks>0</Local-Written-Blocks>
+      <Temp-Read-Blocks>0</Temp-Read-Blocks>
+      <Temp-Written-Blocks>0</Temp-Written-Blocks>
 <truncated>
 ##################
 SELECT '### '||'text-chopped     '||title||E'\n'||
   pg_store_plans_textplan(substring(splan from 1 for char_length(splan) / 3))
   FROM plans WHERE id BETWEEN 25 AND 27 ORDER BY id;
 ### text-chopped     ###### Plan 25: PlainAggregate
-Aggregate  (cost=288.01..288.02 rows=1 width=8) (actual time=3.420..3.420 rows=1 loops=1)
+Aggregate  (cost=288.01..288.02 rows=1 width=8) (actual time=6.445..6.446 rows=1 loops=1)
   Output: sum(a)
   Buffers: shared hit=163
 <truncated>
 
 =======
 ### text-chopped     ###### Plan 26: BitmapIndexScan/BitmapHeapScan, BitmapOr, lossy
-Bitmap Heap Scan on public.tt3  (cost=4239.43..7462.44 rows=180001 width=12) (actual time=26.037..64.054 rows=180000 loops=1)
+Bitmap Heap Scan on public.tt3  (cost=3947.41..7170.40 rows=179999 width=12) (actual time=55.836..128.723 rows=180000 loops=1)
   Output: a, b, c
+  Recheck Cond: (tt3.b > '-99998'::integer)
 <truncated>
 
 =======
 ### text-chopped     ###### Plan 27: Join Filter
-Limit  (cost=0.00..21.52 rows=100 width=12) (actual time=5.615..5.725 rows=100 loops=1)
+Limit  (cost=0.00..21.52 rows=100 width=12) (actual time=18.516..18.804 rows=100 loops=1)
   Output: tt2.a, tt2.b, tt2.c
   Buffers: shared hit=40, temp written=12
-  ->  Nested Loop  (cost=0.00..43048282.11 rows=200023334 width=12) (actual time=5.614..5.712 rows=100 loops=1)
+  ->  Nested Loop  (cost=0.00..43048282.11 rows=200023334 width=12) (actual time=18.514..18.773 rows=100 loops=1)
         Output: tt2.a, tt2.b, tt2.c
 <truncated>
 ###### shorten test
@@ -2051,164 +2237,168 @@ SELECT '### '||'normalize        '||title||E'\n'||
 
 =======
 ### normalize        ###### Plan 1: Insert, Trigger
-{"p":{"t":"b","!":"i","`":false,"n":"tt1","s":"public","a":"tt1","l":[{"t":"o","h":"m","`":false,"f":"generate_series","s":"pg_catalog","a":"a","o":["a.a","?::INTEGER","?::TEXT"]}]},"r":[{"v":"tt1_trig_1","w":"tt1"}{"v":"tt1_trig_2","w":"tt1"}]}
+{"p":{"t":"b","!":"i","`":false,"n":"tt1","s":"public","a":"tt1","l":[{"t":"o","h":"m","`":false,"f":"generate_series","s":"pg_catalog","a":"a","o":["a.a","?::INTEGER","?::TEXT"]}]}{},"r":[{"v":"tt1_trig_1","w":"tt1"}{"v":"tt1_trig_2","w":"tt1"}]}
 
 =======
 ### normalize        ###### Plan 2: Update, Trigger
-{"p":{"t":"b","!":"u","`":false,"n":"tt1","s":"public","a":"tt1","l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["(a + ?)","b","c","ctid"]}]},"r":[{"v":"tt1_trig_1","w":"tt1"}{"v":"tt1_trig_2","w":"tt1"}]}
+{"p":{"t":"b","!":"u","`":false,"n":"tt1","s":"public","a":"tt1","l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["(a + ?)","b","c","ctid"]}]}{},"r":[{"v":"tt1_trig_1","w":"tt1"}{"v":"tt1_trig_2","w":"tt1"}]}
 
 =======
 ### normalize        ###### Plan 3: Delete
-{"p":{"t":"b","!":"d","`":false,"n":"tt1","s":"public","a":"tt1","l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["ctid"],"5":"((tt1.a % ?) = ?)"}]},"r":[]}
+{"p":{"t":"b","!":"d","`":false,"n":"tt1","s":"public","a":"tt1","l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["ctid"],"5":"((tt1.a % ?) = ?)"}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 4: Result, Append Seq Scan
-{"p":{"t":"a","`":false,"o":["((tt1.a + ?))","?","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["(tt1.a + ?)","?"]}{"t":"h","h":"m","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.a","?"]}]}]},"r":[]}
+{"p":{"t":"a","`":false,"o":["((tt1.a + ?))","?","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["(tt1.a + ?)","?"]}{"t":"h","h":"m","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.a","?"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 5: Index scan (forward) ANY, array in expr, escape
-{"p":{"t":"i","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"x\"y","o":["a","b","c"],"8":"(\"x\"\"y\".a = ANY (?::INTEGER[]))"},"r":[]}
+{"p":{"t":"i","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"x\"y","o":["a","b","c"],"8":"(\"x\"\"y\".a = ANY (?::INTEGER[]))"}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 6: Index scan (backward), MergeJoin, Sort, quicksort, alias
-{"p":{"t":"5","`":false,"o":["x.b","x.c","x.a"],"l":[{"t":"u","h":"o","`":false,"j":"i","o":["x.b","x.c","x.a"],"?":false,"m":"(x.a = (((y.b) * ?)))","l":[{"t":"i","h":"o","`":false,"d":"b","i":"i_tt1","n":"tt1","s":"public","a":"x","o":["x.a","x.b","x.c"]}{"t":"x","h":"i","`":false,"o":["y.b","(((y.b) * ?))"],"k":["(((y.b) * ?)) DESC"],"e":"q","l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"y","o":["y.b","((y.b) * ?)"]}]}]}]},"r":[]}
+{"p":{"t":"5","`":false,"o":["x.b","x.c","x.a"],"l":[{"t":"u","h":"o","`":false,"j":"i","o":["x.b","x.c","x.a"],"?":false,"m":"(x.a = (((y.b) * ?)))","l":[{"t":"i","h":"o","`":false,"d":"b","i":"i_tt1","n":"tt1","s":"public","a":"x","o":["x.a","x.b","x.c"]}{"t":"x","h":"i","`":false,"o":["y.b","(((y.b) * ?))"],"k":["(((y.b) * ?)) DESC"],"e":"q","l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"y","o":["y.b","((y.b) * ?)"]}]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 7: IndexOnlyScan
-{"p":{"t":"j","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["a"],"8":"(tt1.a < ?)"},"r":[]}
+{"p":{"t":"j","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["a"],"8":"(tt1.a < ?)"}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 8: Plain Aggregate, CTE, Recursive Union, WorkTable Scan, CTE Scan
-{"p":{"t":"z","g":"p",">":"s","`":false,"o":["sum(cte1.a)"],"l":[{"t":"e","h":"I","q":"CTE cte1","`":false,"l":[{"t":"a","h":"o","`":false,"o":["?"]}{"t":"r","h":"i","`":false,"c":"cte1","a":"cte1_1","o":["(cte1_1.a + ?)"],"5":"(cte1_1.a < ?)"}]}{"t":"q","h":"o","`":false,"c":"cte1","a":"cte1","o":["cte1.a"]}]},"r":[]}
+{"p":{"t":"z","g":"p",">":"s","`":false,"o":["sum(cte1.a)"],"l":[{"t":"e","h":"I","q":"CTE cte1","`":false,"l":[{"t":"a","h":"o","`":false,"o":["?"]}{"t":"r","h":"i","`":false,"c":"cte1","a":"cte1_1","o":["(cte1_1.a + ?)"],"5":"(cte1_1.a < ?)"}]}{"t":"q","h":"o","`":false,"c":"cte1","a":"cte1","o":["cte1.a"]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 9: FunctionScan, Hash/HashJoin, Nested Loop
-{"p":{"t":"v","`":false,"j":"l","o":["d.datname"],"?":true,"7":"(s.datid = d.oid)","l":[{"t":"o","h":"o","`":false,"f":"pg_stat_get_activity","s":"pg_catalog","a":"s","o":["s.datid","s.pid","s.usesysid","s.application_name","s.state","s.query","s.wait_event_type","s.wait_event","s.xact_start","s.query_start","s.backend_start","s.state_change","s.client_addr","s.client_hostname","s.client_port","s.backend_xid","s.backend_xmin","s.backend_type","s.ssl","s.sslversion","s.sslcipher","s.sslbits","s.sslcompression","s.sslclientdn"]}{"t":"2","h":"i","`":false,"o":["d.datname","d.oid"],"l":[{"t":"h","h":"o","`":false,"n":"pg_database","s":"pg_catalog","a":"d","o":["d.datname","d.oid"]}]}]},"r":[]}
+{"p":{"t":"v","`":false,"j":"l","o":["d.datname"],"?":true,"7":"(s.datid = d.oid)","l":[{"t":"o","h":"o","`":false,"f":"pg_stat_get_activity","s":"pg_catalog","a":"s","o":["s.datid","s.pid","s.usesysid","s.application_name","s.state","s.query","s.wait_event_type","s.wait_event","s.xact_start","s.query_start","s.backend_start","s.state_change","s.client_addr","s.client_hostname","s.client_port","s.backend_xid","s.backend_xmin","s.backend_type","s.ssl","s.sslversion","s.sslcipher","s.sslbits","s.sslcompression","s.ssl_client_dn","s.ssl_client_serial","s.ssl_issuer_dn","s.gss_auth","s.gss_princ","s.gss_enc","s.leader_pid"]}{"t":"2","h":"i","`":false,"o":["d.datname","d.oid"],"l":[{"t":"h","h":"o","`":false,"n":"pg_database","s":"pg_catalog","a":"d","o":["d.datname","d.oid"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 10: MergeAppend, Values
-{"p":{"t":"d","`":false,"k":["tt1.a"],"l":[{"t":"j","h":"m","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}{"t":"x","h":"m","`":false,"o":["\"*VALUES*\".column1"],"k":["\"*VALUES*\".column1"],"e":"q","l":[{"t":"p","h":"o","`":false,"a":"*VALUES*","o":["\"*VALUES*\".column1"]}]}]},"r":[]}
+{"p":{"t":"d","`":false,"k":["tt1.a"],"l":[{"t":"j","h":"m","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}{"t":"x","h":"m","`":false,"o":["\"*VALUES*\".column1"],"k":["\"*VALUES*\".column1"],"e":"q","l":[{"t":"p","h":"o","`":false,"a":"*VALUES*","o":["\"*VALUES*\".column1"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 11: Append, HashAggregate
-{"p":{"t":"z","g":"h",">":"s","`":false,"o":["tt1.a"],"-":["tt1.a"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}{"t":"h","h":"m","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]},"r":[]}
+{"p":{"t":"z","g":"h",">":"s","`":false,"o":["tt1.a"],"-":["tt1.a"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}{"t":"h","h":"m","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 12: GroupAggregate
-{"p":{"t":"z","g":"s",">":"s","`":false,"o":["sum(a)","b"],"-":["tt1.b"],"l":[{"t":"x","h":"o","`":false,"o":["b","a"],"k":["tt1.b"],"e":"E","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["b","a"]}]}]},"r":[]}
+{"p":{"t":"z","g":"s",">":"s","`":false,"o":["sum(a)","b"],"-":["tt1.b"],"l":[{"t":"x","h":"o","`":false,"o":["b","a"],"k":["tt1.b"],"e":"E","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["b","a"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 13: Group
-{"p":{"t":"y","`":false,"o":["b"],"-":["tt1.b"],"l":[{"t":"x","h":"o","`":false,"o":["b"],"k":["tt1.b"],"e":"E","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["b"]}]}]},"r":[]}
+{"p":{"t":"y","`":false,"o":["b"],"-":["tt1.b"],"l":[{"t":"x","h":"o","`":false,"o":["b"],"k":["tt1.b"],"e":"E","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["b"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 14: SetOp intersect, SbuqueryScan
-{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"i","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]},"r":[]}
+{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"i","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 15: Sorted SetOp, Sort on Disk
-{"p":{"t":"3","g":"s","`":false,"b":"i","o":["\"*SELECT* .a","?"],"l":[{"t":"x","h":"o","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"E","l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]},"r":[]}
+{"p":{"t":"3","g":"s","`":false,"b":"i","o":["\"*SELECT* .a","?"],"l":[{"t":"x","h":"o","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"E","l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 16: HashSetOp intersect All, SubqueryScan
-{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"I","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]},"r":[]}
+{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"I","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 17: HashSetOp except, SubqueryScan
-{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"e","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]},"r":[]}
+{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"e","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 18: HashSetOp except all, SubqueryScan
-{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"E","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]},"r":[]}
+{"p":{"t":"x","`":false,"o":["\"*SELECT* .a","?"],"k":["\"*SELECT* .a"],"e":"q","l":[{"t":"3","g":"h","h":"o","`":false,"b":"E","o":["\"*SELECT* .a","?"],"l":[{"t":"c","h":"o","`":false,"l":[{"t":"n","h":"m","`":false,"a":"*SELECT* 1","o":["\"*SELECT* .a","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a"]}]}{"t":"n","h":"m","`":false,"a":"*SELECT* 2","o":["\"*SELECT* .b","?"],"l":[{"t":"h","h":"s","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 19: merge LEFT join
-{"p":{"t":"u","`":false,"j":"l","o":["x.b"],"?":false,"m":"(x.a = y.a)","l":[{"t":"i","h":"o","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"x","o":["x.a","x.b","x.c"]}{"t":"j","h":"i","`":false,"d":"f","i":"i_tt3_a","n":"tt3","s":"public","a":"y","o":["y.a"]}]},"r":[]}
+{"p":{"t":"u","`":false,"j":"l","o":["x.b"],"?":false,"m":"(x.a = y.a)","l":[{"t":"i","h":"o","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"x","o":["x.a","x.b","x.c"]}{"t":"j","h":"i","`":false,"d":"f","i":"i_tt3_a","n":"tt3","s":"public","a":"y","o":["y.a"]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 20: hash FULL join
-{"p":{"t":"v","`":false,"j":"f","o":["x.b"],"?":false,"7":"(x.a = y.a)","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"x","o":["x.a","x.b","x.c"]}{"t":"2","h":"i","`":false,"o":["y.a"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"y","o":["y.a"]}]}]},"r":[]}
+{"p":{"t":"v","`":false,"j":"f","o":["x.b"],"?":false,"7":"(x.a = y.a)","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"x","o":["x.a","x.b","x.c"]}{"t":"2","h":"i","`":false,"o":["y.a"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"y","o":["y.a"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 21: hash SEMI join
-{"p":{"t":"v","`":false,"j":"s","o":["tt1.a","tt1.b","tt1.c"],"?":false,"7":"(tt1.a = tt2.b)","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a","tt1.b","tt1.c"]}{"t":"2","h":"i","`":false,"o":["tt2.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]},"r":[]}
+{"p":{"t":"v","`":false,"j":"s","o":["tt1.a","tt1.b","tt1.c"],"?":false,"7":"(tt1.a = tt2.b)","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a","tt1.b","tt1.c"]}{"t":"2","h":"i","`":false,"o":["tt2.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 22: Hash Anti Join
-{"p":{"t":"v","`":false,"j":"a","o":["tt1.a","tt1.b","tt1.c"],"?":false,"7":"(tt1.a = tt2.b)","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a","tt1.b","tt1.c"]}{"t":"2","h":"i","`":false,"o":["tt2.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]},"r":[]}
+{"p":{"t":"v","`":false,"j":"a","o":["tt1.a","tt1.b","tt1.c"],"?":false,"7":"(tt1.a = tt2.b)","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a","tt1.b","tt1.c"]}{"t":"2","h":"i","`":false,"o":["tt2.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 23: WindowAgg
-{"p":{"t":"0","`":false,"o":["first_value(a) OVER ?","((a / ?))"],"l":[{"t":"x","h":"o","`":false,"o":["((a / ?))","a"],"k":["((tt1.a / ?))"],"e":"q","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["(a / ?)","a"]}]}]},"r":[]}
+{"p":{"t":"0","`":false,"o":["first_value(a) OVER ?","((a / ?))"],"l":[{"t":"x","h":"o","`":false,"o":["((a / ?))","a"],"k":["((tt1.a / ?))"],"e":"q","l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["(a / ?)","a"]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 24: Unique
-{"p":{"t":"1","`":false,"o":["a"],"l":[{"t":"j","h":"o","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["a"]}]},"r":[]}
+{"p":{"t":"1","`":false,"o":["a"],"l":[{"t":"j","h":"o","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["a"]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 25: PlainAggregate
-{"p":{"t":"z","g":"p",">":"s","`":false,"o":["sum(a)"],"l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","b","c"]}]},"r":[]}
+{"p":{"t":"z","g":"p",">":"s","`":false,"o":["sum(a)"],"l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","b","c"]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 26: BitmapIndexScan/BitmapHeapScan, BitmapOr, lossy
-{"p":{"t":"l","`":false,"n":"tt3","s":"public","a":"tt3","o":["a","b","c"],"0":"(tt3.b > ?::INTEGER)","l":[{"t":"k","h":"o","`":false,"i":"i_tt3_b","8":"(tt3.b > ?::INTEGER)"}]},"r":[]}
+{"p":{"t":"l","`":false,"n":"tt3","s":"public","a":"tt3","o":["a","b","c"],"0":"(tt3.b > ?::INTEGER)","l":[{"t":"k","h":"o","`":false,"i":"i_tt3_b","8":"(tt3.b > ?::INTEGER)"}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 27: Join Filter
-{"p":{"t":"5","`":false,"o":["tt2.a","tt2.b","tt2.c"],"l":[{"t":"t","h":"o","`":false,"j":"i","o":["tt2.a","tt2.b","tt2.c"],"?":false,"6":"((tt2.a < tt3.a) AND ((tt3.a + tt2.a) < ?))","l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.a","tt2.b","tt2.c"]}{"t":"w","h":"i","`":false,"o":["tt3.a"],"l":[{"t":"h","h":"o","`":false,"n":"tt3","s":"public","a":"tt3","o":["tt3.a"]}]}]}]},"r":[]}
+{"p":{"t":"5","`":false,"o":["tt2.a","tt2.b","tt2.c"],"l":[{"t":"t","h":"o","`":false,"j":"i","o":["tt2.a","tt2.b","tt2.c"],"?":false,"6":"((tt2.a < tt3.a) AND ((tt3.a + tt2.a) < ?))","l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.a","tt2.b","tt2.c"]}{"t":"w","h":"i","`":false,"o":["tt3.a"],"l":[{"t":"h","h":"o","`":false,"n":"tt3","s":"public","a":"tt3","o":["tt3.a"]}]}]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 28: TidScan
-{"p":{"t":"m","`":false,"n":"tt3","s":"public","a":"tt3","o":["a","b","c"],"9":"(tt3.ctid = ?::tid)"},"r":[]}
+{"p":{"t":"m","`":false,"n":"tt3","s":"public","a":"tt3","o":["a","b","c"],"9":"(tt3.ctid = ?::tid)"}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 29: LockRows
-{"p":{"t":"4","`":false,"o":["a","ctid"],"l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","ctid"],"5":"((tt1.a % ?) = ?)"}]},"r":[]}
+{"p":{"t":"4","`":false,"o":["a","ctid"],"l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","ctid"],"5":"((tt1.a % ?) = ?)"}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 30: Materialize
-{"p":{"t":"h","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a","tt1.b","tt1.c"],"5":"(SubPlan ?)","l":[{"t":"w","h":"S","q":"SubPlan 1","`":false,"o":["tt2.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]},"r":[]}
+{"p":{"t":"h","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a","tt1.b","tt1.c"],"5":"(SubPlan ?)","l":[{"t":"w","h":"S","q":"SubPlan 1","`":false,"o":["tt2.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.b"]}]}]}{},"r":[]{{}{}}}
 
 =======
 ### normalize        ###### Plan 31: Update on partitioned tables
-{"p":{"t":"b","!":"u","`":false,"n":"p","s":"public","a":"p"[{"n":"p","s":"public","a":"p"},{"n":"tt1","s":"public","a":"tt1"},{"n":"tt2","s":"public","a":"tt2"},{"n":"tt3","s":"public","a":"tt3"}],"l":[{"t":"h","h":"m","`":false,"n":"p","s":"public","a":"p","o":["p.a","(p.b + ?)","p.c","p.ctid"]}{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"tt1","o":["tt1.a","(tt1.b + ?)","tt1.c","tt1.ctid"]}{"t":"h","h":"m","`":false,"n":"tt2","s":"public","a":"tt2","o":["tt2.a","(tt2.b + ?)","tt2.c","tt2.ctid"]}{"t":"h","h":"m","`":false,"n":"tt3","s":"public","a":"tt3","o":["tt3.a","(tt3.b + ?)","tt3.c","tt3.ctid"]}]},"r":[{"v":"tt1_trig_1","w":"tt1"}{"v":"tt1_trig_2","w":"tt1"}]}
+{"p":{"t":"b","!":"u","`":false,"n":"p","s":"public","a":"p"[{"n":"p","s":"public","a":"p"},{"n":"tt1","s":"public","a":"p_1"},{"n":"tt2","s":"public","a":"p_2"},{"n":"tt3","s":"public","a":"p_3"}],"l":[{"t":"h","h":"m","`":false,"n":"p","s":"public","a":"p","o":["p.a","(p.b + ?)","p.c","p.ctid"]}{"t":"h","h":"m","`":false,"n":"tt1","s":"public","a":"p_1","o":["p_1.a","(p_1.b + ?)","p_1.c","p_1.ctid"]}{"t":"h","h":"m","`":false,"n":"tt2","s":"public","a":"p_2","o":["p_2.a","(p_2.b + ?)","p_2.c","p_2.ctid"]}{"t":"h","h":"m","`":false,"n":"tt3","s":"public","a":"p_3","o":["p_3.a","(p_3.b + ?)","p_3.c","p_3.ctid"]}]}{},"r":[{"v":"tt1_trig_1","w":"tt1"}{"v":"tt1_trig_2","w":"tt1"}]}
 
 =======
 ### normalize        ###### Plan 32: Delete on partitioned tables
-{"p":{"t":"b","!":"d","`":false,"n":"p","s":"public","a":"p"[{"n":"p","s":"public","a":"p"},{"n":"tt1","s":"public","a":"tt1"},{"n":"tt2","s":"public","a":"tt2"},{"n":"tt3","s":"public","a":"tt3"}],"l":[{"t":"h","h":"m","`":false,"n":"p","s":"public","a":"p","o":["p.ctid"],"5":"(p.a = ?)"}{"t":"i","h":"m","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["tt1.ctid"],"8":"(tt1.a = ?)"}{"t":"i","h":"m","`":false,"d":"f","i":"i_tt2","n":"tt2","s":"public","a":"tt2","o":["tt2.ctid"],"8":"(tt2.a = ?)"}{"t":"i","h":"m","`":false,"d":"f","i":"i_tt3_a","n":"tt3","s":"public","a":"tt3","o":["tt3.ctid"],"8":"(tt3.a = ?)"}]},"r":[]}
+{"p":{"t":"b","!":"d","`":false,"n":"p","s":"public","a":"p"[{"n":"p","s":"public","a":"p"},{"n":"tt1","s":"public","a":"p_1"},{"n":"tt2","s":"public","a":"p_2"},{"n":"tt3","s":"public","a":"p_3"}],"l":[{"t":"h","h":"m","`":false,"n":"p","s":"public","a":"p","o":["p.ctid"],"5":"(p.a = ?)"}{"t":"i","h":"m","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"p_1","o":["p_1.ctid"],"8":"(p_1.a = ?)"}{"t":"i","h":"m","`":false,"d":"f","i":"i_tt2","n":"tt2","s":"public","a":"p_2","o":["p_2.ctid"],"8":"(p_2.a = ?)"}{"t":"i","h":"m","`":false,"d":"f","i":"i_tt3_a","n":"tt3","s":"public","a":"p_3","o":["p_3.ctid"],"8":"(p_3.a = ?)"}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 33: ON CONFLICT
-{"p":{"t":"b","!":"i","`":false,"n":"ct1","s":"public","a":"ct1"[],"l":[{"t":"a","h":"m","`":false,"o":["?","?"]}]},"r":[]}
+{"p":{"t":"b","!":"i","`":false,"n":"ct1","s":"public","a":"ct1"[],"l":[{"t":"a","h":"m","`":false,"o":["?","?"]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 34: GROUP BY
-{"p":{"t":"z","g":"h",">":"s","`":false,"o":["a","b","max(c)"],"-":["tt1.a","tt1.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","b","c"]}]},"r":[]}
+{"p":{"t":"z","g":"h",">":"s","`":false,"o":["a","b","max(c)"],"-":["tt1.a","tt1.b"],"l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","b","c"]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 35: GROUPING SETS
-{"p":{"t":"z","g":"m",">":"s","`":false,"o":["a","b","max(c)"],"=":[{"~":[["tt1.a"]]},{"~":[["tt1.b"]]},{"\\":[[]]}],"l":[{"t":"h","h":"o","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","b","c"]}]},"r":[]}
+{"p":{"t":"z","g":"m",">":"s","`":false,"o":["a","b","max(c)"],"=":[{"~":[["tt1.b"]]},{"\\":[["tt1.a"],[]]}],"l":[{"t":"i","h":"o","`":false,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["a","b","c"]}]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 36: Table sample
-{"p":{"t":"B","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","b","c"][]},"r":[]}
+{"p":{"t":"B","`":false,"n":"tt1","s":"public","a":"tt1","o":["a","b","c"][]}{},"r":[]}
 
 =======
 ### normalize        ###### Plan 37: Project Set
-{"p":{"t":"8","`":false,"a":"xmltable","o":["NAME"]},"r":[]}
+{"p":{"t":"8","`":false,"a":"xmltable","o":["NAME"]}{},"r":[]}
+
+=======
+### normalize        ###### Plan 38: Incremental Sort
+{"p":{"t":"5","`":false,"o":["(((i.i / ?) + ?))","((i.i + ?))"],"l":[{"t":"C","h":"o","`":false,"o":["(((i.i / ?) + ?))","((i.i + ?))"],"k":["(((i.i / ?) + ?))","((i.i + ?))"][]{[]{}}{[]{}},"l":[{"t":"x","h":"o","`":false,"o":["(((i.i / ?) + ?))","((i.i + ?))"],"k":["(((i.i / ?) + ?))"],"e":"q","l":[{"t":"o","h":"o","`":false,"f":"generate_series","s":"pg_catalog","a":"i","o":["((i.i / ?) + ?)","(i.i + ?)"]}]}]}]}{},"r":[]}
 
 =======
-### normalize        ###### Plan 38: Named Tuplestore Scan
+### normalize        ###### Plan 39: Named Tuplestore Scan
 {"p":{"t":"z","g":"p",">":"s","`":false,"l":[{"t":"9","h":"o","`":false}]}}
 
 =======
-### normalize        ###### Plan 39: Parallel Seq Scan
-{"p":{"t":"6","`":false,"o":["a","b"],"{":2,"}":2,"l":[{"t":"h","h":"o","`":true,"n":"lt1","s":"public","a":"lt1","o":["a","b"][{}{}]}]},"r":[]}
+### normalize        ###### Plan 40: Parallel Seq Scan
+{"p":{"t":"6","`":false,"o":["a","b"],"{":2,"}":2,"l":[{"t":"h","h":"o","`":true,"n":"lt1","s":"public","a":"lt1","o":["a","b"][{}{}]}]}{},"r":[]}
 
 =======
-### normalize        ###### Plan 40: Parallel Index Scan
-{"p":{"t":"6","`":false,"o":["a","b","c"],"{":1,"}":1,"l":[{"t":"i","h":"o","`":true,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["a","b","c"],"8":"(tt1.a < ?)"[{}]}]},"r":[]}
+### normalize        ###### Plan 41: Parallel Index Scan
+{"p":{"t":"6","`":false,"o":["a","b","c"],"{":1,"}":1,"l":[{"t":"i","h":"o","`":true,"d":"f","i":"i_tt1","n":"tt1","s":"public","a":"tt1","o":["a","b","c"],"8":"(tt1.a < ?)"[{}]}]}{},"r":[]}
 
 =======
-### normalize        ###### Plan 41: Gather Merge
-{"p":{"t":"A","`":false,"o":["a"],"{":2,"}":2,"l":[{"t":"x","h":"o","`":false,"o":["a"],"k":["tt1.a"],"e":"q"[{}{}],"l":[{"t":"h","h":"o","`":true,"n":"tt1","s":"public","a":"tt1","o":["a"][{}{}]}]}]},"r":[]}
+### normalize        ###### Plan 42: Gather Merge
+{"p":{"t":"A","`":false,"o":["a"],"{":2,"}":2,"l":[{"t":"x","h":"o","`":false,"o":["a"],"k":["tt1.a"],"e":"q"[{"e":"q"}{"e":"q"}],"l":[{"t":"h","h":"o","`":true,"n":"tt1","s":"public","a":"tt1","o":["a"][{}{}]}]}]}{},"r":[]}
index a83d824..e9930c7 100755 (executable)
@@ -48,7 +48,7 @@ while(<>) {
                if (/[}\]:,]/) {
                        die("??? : $_");
                }
-               next if (!/^( *){ *\+?$/);
+               next if (!/^( *)\{ *\+?$/);
         $indent = $1;
                $plan = $_;
                $plan =~ s/^   (.*[^ ]) *\+$/$1\n/;
index e272064..e6a72c9 100644 (file)
@@ -189,6 +189,11 @@ explain (analyze on, buffers on, verbose on, format :format)
     PASSING BY REF '<towns><town><name>Toronto</name></town><town><name>Ottawa</name></town></towns>'
         COLUMNS name text);
 
+\echo ###### Incremental Sort
+explain (analyze on, buffers on, verbose on, format :format)
+       WITH x AS (SELECT i/100 + 1 AS a, i + 1 AS b FROM generate_series(0, 999) i)
+         SELECT * FROM (SELECT * FROM x ORDER BY a) s ORDER BY a, b LIMIT 31;
+
 -- Named Tuplestore Scan -- requires auto_explain
 DROP TABLE IF EXISTS e1 CASCADE;
 CREATE TABLE e1 (a int, b int);
index c98f6aa..ef83cae 100644 (file)
@@ -249,6 +249,12 @@ PG_FUNCTION_INFO_V1(pg_store_plans_textplan);
 PG_FUNCTION_INFO_V1(pg_store_plans_yamlplan);
 PG_FUNCTION_INFO_V1(pg_store_plans_xmlplan);
 
+#if PG_VERSION_NUM < 130000
+#define COMPTAG_TYPE char
+#else
+#define COMPTAG_TYPE QueryCompletion
+#endif
+
 static void pgsp_shmem_startup(void);
 static void pgsp_shmem_shutdown(int code, Datum arg);
 static void pgsp_ExecutorStart(QueryDesc *queryDesc, int eflags);
@@ -260,7 +266,7 @@ static void pgsp_ExecutorEnd(QueryDesc *queryDesc);
 static void pgsp_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
                                        ProcessUtilityContext context, ParamListInfo params,
                                        QueryEnvironment *queryEnv,
-                                       DestReceiver *dest, char *completionTag);
+                                       DestReceiver *dest, COMPTAG_TYPE *completionTag);
 static uint32 hash_query(const char* query);
 static void store_entry(char *plan, uint32 queryId, queryid_t queryId_pgss,
                   double total_time, uint64 rows,
@@ -822,7 +828,7 @@ static void
 pgsp_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
                                        ProcessUtilityContext context, ParamListInfo params,
                                        QueryEnvironment *queryEnv,
-                                       DestReceiver *dest, char *completionTag)
+                                       DestReceiver *dest, COMPTAG_TYPE *completionTag)
 {
        if (prev_ProcessUtility)
                prev_ProcessUtility(pstmt, queryString,
index 177ddc6..e70902a 100644 (file)
 #include "parser/gram.h"
 #include "utils/xml.h"
 #include "utils/json.h"
+#if PG_VERSION_NUM < 130000
 #include "utils/jsonapi.h"
-
+#else
+#include "common/jsonapi.h"
+#endif
 #include "pgsp_json.h"
 #include "pgsp_json_int.h"
 
@@ -156,7 +159,16 @@ word_table propfields[] =
        {P_RepeatableSeed,  "<"  ,"Repeatable Seed" ,   NULL, false,  NULL,                             SETTER(repeatable_seed)},
        {P_Workers,             "[" ,"Workers",                         NULL, false,  NULL,                             NULL},
        {P_WorkerNumber,    "]" ,"Worker Number",               NULL, false,  NULL,                             SETTER(worker_number)},
-       {P_TableFuncName,    "aa" ,"Table Function Name",NULL, false,  NULL,                    SETTER(table_func_name)},
+       {P_TableFuncName,   "aa" ,"Table Function Name",NULL, false,  NULL,                     SETTER(table_func_name)},
+
+       {P_PresortedKey,    "pk" ,"Presorted Key"          ,NULL, false,  NULL,                 SETTER(presorted_key)},
+       {P_FullsortGroups,  "fg" ,"Full-sort Groups"   ,NULL, false,  NULL,                     NULL},
+       {P_SortMethodsUsed, "su" ,"Sort Methods Used"  ,NULL, false,  NULL,                     SETTER(sortmethod_used)},
+       {P_SortSpaceMemory, "sm" ,"Sort Space Memory"  ,NULL, false,  NULL,                     SETTER(sortspace_mem)},
+       {P_GroupCount,          "gc" ,"Group Count"        ,NULL, false,  NULL,                 SETTER(group_count)},
+       {P_AvgSortSpcUsed,  "as" ,"Average Sort Space Used",NULL, false,  NULL,         SETTER(avg_sortspc_used)},
+       {P_PeakSortSpcUsed, "ps" ,"Peak Sort Space Used",NULL, false,  NULL,            SETTER(peak_sortspc_used)},
+       {P_PreSortedGroups, "pg" ,"Pre-sorted Groups"  ,NULL, false,  NULL,                     NULL},
 
        {P_Invalid, NULL, NULL, NULL, false, NULL, NULL}
 };
@@ -199,15 +211,18 @@ word_table nodetypes[] =
        {T_Limit,               "5" ,"Limit",                   NULL, false, NULL, NULL},
 #if PG_VERSION_NUM >= 90500
        {T_SampleScan,  "B" ,"Sample Scan",             NULL, false, NULL, NULL},
+#endif
 #if PG_VERSION_NUM >= 90600
        {T_Gather,              "6" ,"Gather",                  NULL, false, NULL, NULL},
+#endif
 #if PG_VERSION_NUM >= 100000
        {T_ProjectSet,  "7" ,"ProjectSet",              NULL, false, NULL, NULL},
        {T_TableFuncScan,"8","Table Function Scan",     NULL, false, NULL, NULL},
        {T_NamedTuplestoreScan,"9","Named Tuplestore Scan",     NULL, false, NULL, NULL},
        {T_GatherMerge, "A" ,"Gather Merge",    NULL, false, NULL, NULL},
 #endif
-#endif
+#if PG_VERSION_NUM >= 130000
+       {T_IncrementalSort,     "C" ,"Incremental Sort", NULL, false, NULL, NULL},
 #endif
 
        {T_Invalid,             NULL, NULL, NULL, false, NULL, NULL}
@@ -294,6 +309,7 @@ word_table partialmode[] =
        {T_Invalid, NULL, NULL, NULL, false, NULL, NULL}
 };
 
+
 word_table *
 search_word_table(word_table *tbl, const char *word, int mode)
 {
@@ -1187,6 +1203,9 @@ init_parser_context(pgspParserContext *ctx, int mode,
 bool
 run_pg_parse_json(JsonLexContext *lex, JsonSemAction *sem)
 {
+#if PG_VERSION_NUM >= 130000
+       return pg_parse_json(lex, sem) == JSON_SUCCESS;
+#else
        MemoryContext ccxt = CurrentMemoryContext;
        uint32 saved_IntrHoldoffCount;
 
@@ -1225,6 +1244,7 @@ run_pg_parse_json(JsonLexContext *lex, JsonSemAction *sem)
        PG_END_TRY();
 
        return true;
+#endif
 }
 
 void
index 35ae830..f6825ac 100644 (file)
@@ -125,7 +125,15 @@ typedef enum
        P_WorkersLaunched,
        P_WorkerNumber,
        P_InnerUnique,
-       P_TableFuncName
+       P_TableFuncName,
+       P_PresortedKey,
+       P_FullsortGroups,
+       P_SortMethodsUsed,
+       P_SortSpaceMemory,
+       P_GroupCount,
+       P_AvgSortSpcUsed,
+       P_PeakSortSpcUsed,
+       P_PreSortedGroups
 } pgsp_prop_tags;
 
 typedef struct
index 89a896d..ffd1067 100644 (file)
 #include "nodes/bitmapset.h"
 #include "nodes/pg_list.h"
 #include "utils/json.h"
+#if PG_VERSION_NUM < 130000
 #include "utils/jsonapi.h"
+#else
+#include "common/jsonapi.h"
+#endif
 #include "utils/builtins.h"
 
 #include "pgsp_json_text.h"
@@ -187,6 +191,12 @@ DEFAULT_SETTER(workers_planned);
 DEFAULT_SETTER(workers_launched);
 BOOL_SETTER(inner_unique);
 DEFAULT_SETTER(table_func_name);
+LIST_SETTER(presorted_key);
+LIST_SETTER(sortmethod_used);
+DEFAULT_SETTER(sortspace_mem);
+DEFAULT_SETTER(group_count);
+DEFAULT_SETTER(avg_sortspc_used);
+DEFAULT_SETTER(peak_sortspc_used);
 
 #define ISZERO(s) (!s || strcmp(s, "0") == 0 || strcmp(s, "0.000") == 0 )
 #define HASSTRING(s) (s && strlen(s) > 0)
index 2584957..18cb0bf 100644 (file)
@@ -101,6 +101,12 @@ typedef struct
        const char *workers_launched;
        bool            inner_unique;
        const char *table_func_name;
+       StringInfo      presorted_key;
+       StringInfo      sortmethod_used;
+       const char *sortspace_mem;
+       const char *group_count;
+       const char *avg_sortspc_used;
+       const char *peak_sortspc_used;
 
        const char *tmp_obj_name;
        const char *tmp_schema_name;
@@ -220,3 +226,9 @@ SETTERDECL(workers_planned);
 SETTERDECL(workers_launched);
 SETTERDECL(inner_unique);
 SETTERDECL(table_func_name);
+SETTERDECL(presorted_key);
+SETTERDECL(sortmethod_used);
+SETTERDECL(sortspace_mem);
+SETTERDECL(group_count);
+SETTERDECL(avg_sortspc_used);
+SETTERDECL(peak_sortspc_used);
index 4ec6143..a3b8423 100644 (file)
@@ -318,17 +318,17 @@ INSERT INTO plans (VALUES
     "Schema": "public",
     "Alias": "tt1",
     "Startup Cost": 0.00,
-    "Total Cost": 10.00,
-    "Plan Rows": 1000,
+    "Total Cost": 100.01,
+    "Plan Rows": 10001,
     "Plan Width": 40,
-    "Actual Startup Time": 348.383,
-    "Actual Total Time": 348.383,
+    "Actual Startup Time": 307.054,
+    "Actual Total Time": 307.055,
     "Actual Rows": 0,
     "Actual Loops": 1,
-    "Shared Hit Blocks": 29732,
-    "Shared Read Blocks": 87,
+    "Shared Hit Blocks": 29736,
+    "Shared Read Blocks": 3,
     "Shared Dirtied Blocks": 85,
-    "Shared Written Blocks": 0,
+    "Shared Written Blocks": 84,
     "Local Hit Blocks": 0,
     "Local Read Blocks": 0,
     "Local Dirtied Blocks": 0,
@@ -344,11 +344,11 @@ INSERT INTO plans (VALUES
         "Schema": "pg_catalog",
         "Alias": "a",
         "Startup Cost": 0.00,
-        "Total Cost": 10.00,
-        "Plan Rows": 1000,
+        "Total Cost": 100.01,
+        "Plan Rows": 10001,
         "Plan Width": 40,
-        "Actual Startup Time": 2.530,
-        "Actual Total Time": 10.954,
+        "Actual Startup Time": 3.739,
+        "Actual Total Time": 12.801,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["a.a", "NULL::integer", "NULL::text"],
@@ -366,22 +366,34 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.063,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.064,
   "Triggers": [
     {
       "Trigger Name": "tt1_trig_1",
       "Relation": "tt1",
-      "Time": 120.303,
+      "Time": 80.641,
       "Calls": 10001
     },
     {
       "Trigger Name": "tt1_trig_2",
       "Relation": "tt1",
-      "Time": 95.115,
+      "Time": 63.621,
       "Calls": 10001
     }
   ],
-  "Execution Time": 349.084
+  "Execution Time": 308.848
 }'),
 (2, '###### Plan 2: Update, Trigger',
  '{
@@ -396,14 +408,14 @@ INSERT INTO plans (VALUES
     "Total Cost": 137.50,
     "Plan Rows": 6600,
     "Plan Width": 46,
-    "Actual Startup Time": 332.064,
-    "Actual Total Time": 332.064,
+    "Actual Startup Time": 491.114,
+    "Actual Total Time": 491.115,
     "Actual Rows": 0,
     "Actual Loops": 1,
-    "Shared Hit Blocks": 50276,
-    "Shared Read Blocks": 108,
-    "Shared Dirtied Blocks": 108,
-    "Shared Written Blocks": 0,
+    "Shared Hit Blocks": 50222,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 81,
+    "Shared Written Blocks": 81,
     "Local Hit Blocks": 0,
     "Local Read Blocks": 0,
     "Local Dirtied Blocks": 0,
@@ -422,8 +434,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 137.50,
         "Plan Rows": 6600,
         "Plan Width": 46,
-        "Actual Startup Time": 0.031,
-        "Actual Total Time": 9.136,
+        "Actual Startup Time": 0.052,
+        "Actual Total Time": 20.371,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["(a + 1)", "b", "c", "ctid"],
@@ -440,22 +452,34 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.204,
+  "Planning": {
+    "Shared Hit Blocks": 8,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.220,
   "Triggers": [
     {
       "Trigger Name": "tt1_trig_1",
       "Relation": "tt1",
-      "Time": 98.808,
+      "Time": 95.170,
       "Calls": 10001
     },
     {
       "Trigger Name": "tt1_trig_2",
       "Relation": "tt1",
-      "Time": 71.353,
+      "Time": 72.762,
       "Calls": 10001
     }
   ],
-  "Execution Time": 332.250
+  "Execution Time": 492.534
 }'),
 (3, '###### Plan 3: Delete',
  '{
@@ -470,8 +494,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 305.20,
     "Plan Rows": 65,
     "Plan Width": 6,
-    "Actual Startup Time": 7.444,
-    "Actual Total Time": 7.444,
+    "Actual Startup Time": 15.676,
+    "Actual Total Time": 15.678,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Shared Hit Blocks": 1109,
@@ -496,8 +520,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 305.20,
         "Plan Rows": 65,
         "Plan Width": 6,
-        "Actual Startup Time": 2.885,
-        "Actual Total Time": 5.893,
+        "Actual Startup Time": 4.301,
+        "Actual Total Time": 12.640,
         "Actual Rows": 1000,
         "Actual Loops": 1,
         "Output": ["ctid"],
@@ -516,10 +540,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.104,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 6,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.214,
   "Triggers": [
   ],
-  "Execution Time": 7.583
+  "Execution Time": 16.001
 }'),
 (4, '###### Plan 4: Result, Append Seq Scan',
  '{
@@ -527,11 +563,11 @@ INSERT INTO plans (VALUES
     "Node Type": "Result",
     "Parallel Aware": false,
     "Startup Cost": 0.00,
-    "Total Cost": 643.04,
+    "Total Cost": 743.05,
     "Plan Rows": 20002,
     "Plan Width": 12,
-    "Actual Startup Time": 2.860,
-    "Actual Total Time": 23.689,
+    "Actual Startup Time": 3.022,
+    "Actual Total Time": 32.256,
     "Actual Rows": 20002,
     "Actual Loops": 1,
     "Output": ["((tt1.a + 1))", "(3)", "1"],
@@ -551,11 +587,11 @@ INSERT INTO plans (VALUES
         "Parent Relationship": "Outer",
         "Parallel Aware": false,
         "Startup Cost": 0.00,
-        "Total Cost": 443.02,
+        "Total Cost": 543.03,
         "Plan Rows": 20002,
         "Plan Width": 8,
-        "Actual Startup Time": 2.856,
-        "Actual Total Time": 16.737,
+        "Actual Startup Time": 3.020,
+        "Actual Total Time": 21.682,
         "Actual Rows": 20002,
         "Actual Loops": 1,
         "Shared Hit Blocks": 218,
@@ -568,6 +604,7 @@ INSERT INTO plans (VALUES
         "Local Written Blocks": 0,
         "Temp Read Blocks": 0,
         "Temp Written Blocks": 0,
+        "Subplans Removed": 0,
         "Plans": [
           {
             "Node Type": "Seq Scan",
@@ -580,8 +617,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 288.01,
             "Plan Rows": 10001,
             "Plan Width": 8,
-            "Actual Startup Time": 2.855,
-            "Actual Total Time": 7.781,
+            "Actual Startup Time": 3.018,
+            "Actual Total Time": 9.898,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["(tt1.a + 1)", "3"],
@@ -607,8 +644,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 155.01,
             "Plan Rows": 10001,
             "Plan Width": 8,
-            "Actual Startup Time": 0.015,
-            "Actual Total Time": 4.341,
+            "Actual Startup Time": 0.021,
+            "Actual Total Time": 6.514,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["tt2.a", "4"],
@@ -627,10 +664,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.456,
+  "Planning": {
+    "Shared Hit Blocks": 28,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.447,
   "Triggers": [
   ],
-  "Execution Time": 26.681
+  "Execution Time": 36.229
 }'),
 (5, '###### Plan 5: Index scan (forward) ANY, array in expr, escape',
  E'{
@@ -646,8 +695,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 21.21,
     "Plan Rows": 4,
     "Plan Width": 12,
-    "Actual Startup Time": 0.040,
-    "Actual Total Time": 0.080,
+    "Actual Startup Time": 0.067,
+    "Actual Total Time": 0.215,
     "Actual Rows": 4,
     "Actual Loops": 1,
     "Output": ["a", "b", "c"],
@@ -664,10 +713,22 @@ INSERT INTO plans (VALUES
     "Temp Read Blocks": 0,
     "Temp Written Blocks": 0
   },
-  "Planning Time": 0.160,
+  "Planning": {
+    "Shared Hit Blocks": 6,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.371,
   "Triggers": [
   ],
-  "Execution Time": 0.275
+  "Execution Time": 0.414
 }'),
 (6, '###### Plan 6: Index scan (backward), MergeJoin, Sort, quicksort, alias',
  '{
@@ -675,15 +736,15 @@ INSERT INTO plans (VALUES
     "Node Type": "Limit",
     "Parallel Aware": false,
     "Startup Cost": 819.75,
-    "Total Cost": 820.79,
+    "Total Cost": 820.68,
     "Plan Rows": 10,
     "Plan Width": 12,
-    "Actual Startup Time": 17.714,
-    "Actual Total Time": 17.714,
+    "Actual Startup Time": 24.438,
+    "Actual Total Time": 24.440,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Output": ["x.b", "x.c", "x.a"],
-    "Shared Hit Blocks": 61,
+    "Shared Hit Blocks": 59,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
@@ -700,17 +761,17 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Join Type": "Inner",
         "Startup Cost": 819.75,
-        "Total Cost": 1854.80,
+        "Total Cost": 1746.80,
         "Plan Rows": 10001,
         "Plan Width": 12,
-        "Actual Startup Time": 17.712,
-        "Actual Total Time": 17.712,
+        "Actual Startup Time": 24.436,
+        "Actual Total Time": 24.437,
         "Actual Rows": 0,
         "Actual Loops": 1,
         "Output": ["x.b", "x.c", "x.a"],
         "Inner Unique": false,
         "Merge Cond": "(x.a = (((- y.b) * 3)))",
-        "Shared Hit Blocks": 61,
+        "Shared Hit Blocks": 59,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -731,15 +792,15 @@ INSERT INTO plans (VALUES
             "Schema": "public",
             "Alias": "x",
             "Startup Cost": 0.29,
-            "Total Cost": 760.30,
+            "Total Cost": 652.30,
             "Plan Rows": 10001,
             "Plan Width": 12,
-            "Actual Startup Time": 0.072,
-            "Actual Total Time": 0.072,
+            "Actual Startup Time": 0.030,
+            "Actual Total Time": 0.030,
             "Actual Rows": 1,
             "Actual Loops": 1,
             "Output": ["x.a", "x.b", "x.c"],
-            "Shared Hit Blocks": 6,
+            "Shared Hit Blocks": 4,
             "Shared Read Blocks": 0,
             "Shared Dirtied Blocks": 0,
             "Shared Written Blocks": 0,
@@ -758,8 +819,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 844.47,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 13.465,
-            "Actual Total Time": 14.609,
+            "Actual Startup Time": 19.091,
+            "Actual Total Time": 20.771,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["y.b", "(((- y.b) * 3))"],
@@ -789,8 +850,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 155.01,
                 "Plan Rows": 10001,
                 "Plan Width": 4,
-                "Actual Startup Time": 0.017,
-                "Actual Total Time": 4.767,
+                "Actual Startup Time": 0.022,
+                "Actual Total Time": 7.774,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["y.b", "((- y.b) * 3)"],
@@ -811,10 +872,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.440,
+  "Planning": {
+    "Shared Hit Blocks": 14,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.441,
   "Triggers": [
   ],
-  "Execution Time": 18.482
+  "Execution Time": 25.592
 }'),
 (7, '###### Plan 7: IndexOnlyScan',
  '{
@@ -830,8 +903,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 8.46,
     "Plan Rows": 10,
     "Plan Width": 4,
-    "Actual Startup Time": 0.023,
-    "Actual Total Time": 0.058,
+    "Actual Startup Time": 0.062,
+    "Actual Total Time": 0.352,
     "Actual Rows": 10,
     "Actual Loops": 1,
     "Output": ["a"],
@@ -849,10 +922,22 @@ INSERT INTO plans (VALUES
     "Temp Read Blocks": 0,
     "Temp Written Blocks": 0
   },
-  "Planning Time": 0.109,
+  "Planning": {
+    "Shared Hit Blocks": 4,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.206,
   "Triggers": [
   ],
-  "Execution Time": 0.205
+  "Execution Time": 0.491
 }'),
 (8, '###### Plan 8: Plain Aggregate, CTE, Recursive Union, WorkTable Scan, CTE Scan',
  '{
@@ -865,8 +950,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 3.66,
     "Plan Rows": 1,
     "Plan Width": 8,
-    "Actual Startup Time": 0.061,
-    "Actual Total Time": 0.061,
+    "Actual Startup Time": 0.062,
+    "Actual Total Time": 0.064,
     "Actual Rows": 1,
     "Actual Loops": 1,
     "Output": ["sum(cte1.a)"],
@@ -890,8 +975,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 2.95,
         "Plan Rows": 31,
         "Plan Width": 4,
-        "Actual Startup Time": 0.002,
-        "Actual Total Time": 0.039,
+        "Actual Startup Time": 0.003,
+        "Actual Total Time": 0.037,
         "Actual Rows": 10,
         "Actual Loops": 1,
         "Shared Hit Blocks": 0,
@@ -913,8 +998,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 0.01,
             "Plan Rows": 1,
             "Plan Width": 4,
-            "Actual Startup Time": 0.000,
-            "Actual Total Time": 0.001,
+            "Actual Startup Time": 0.002,
+            "Actual Total Time": 0.003,
             "Actual Rows": 1,
             "Actual Loops": 1,
             "Output": ["1"],
@@ -969,8 +1054,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 0.62,
         "Plan Rows": 31,
         "Plan Width": 4,
-        "Actual Startup Time": 0.004,
-        "Actual Total Time": 0.049,
+        "Actual Startup Time": 0.005,
+        "Actual Total Time": 0.045,
         "Actual Rows": 10,
         "Actual Loops": 1,
         "Output": ["cte1.a"],
@@ -987,10 +1072,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.156,
+  "Planning": {
+    "Shared Hit Blocks": 2,
+    "Shared Read Blocks": 1,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.209,
   "Triggers": [
   ],
-  "Execution Time": 0.453
+  "Execution Time": 0.518
 }'),
 (9, '###### Plan 9: FunctionScan, Hash/HashJoin, Nested Loop',
  '{
@@ -998,13 +1095,13 @@ INSERT INTO plans (VALUES
     "Node Type": "Hash Join",
     "Parallel Aware": false,
     "Join Type": "Left",
-    "Startup Cost": 1.11,
-    "Total Cost": 3.37,
+    "Startup Cost": 1.09,
+    "Total Cost": 2.37,
     "Plan Rows": 100,
     "Plan Width": 64,
-    "Actual Startup Time": 0.094,
-    "Actual Total Time": 0.103,
-    "Actual Rows": 7,
+    "Actual Startup Time": 0.207,
+    "Actual Total Time": 0.222,
+    "Actual Rows": 6,
     "Actual Loops": 1,
     "Output": ["d.datname"],
     "Inner Unique": true,
@@ -1031,11 +1128,11 @@ INSERT INTO plans (VALUES
         "Total Cost": 1.00,
         "Plan Rows": 100,
         "Plan Width": 8,
-        "Actual Startup Time": 0.066,
-        "Actual Total Time": 0.069,
-        "Actual Rows": 7,
+        "Actual Startup Time": 0.122,
+        "Actual Total Time": 0.127,
+        "Actual Rows": 6,
         "Actual Loops": 1,
-        "Output": ["s.datid", "s.pid", "s.usesysid", "s.application_name", "s.state", "s.query", "s.wait_event_type", "s.wait_event", "s.xact_start", "s.query_start", "s.backend_start", "s.state_change", "s.client_addr", "s.client_hostname", "s.client_port", "s.backend_xid", "s.backend_xmin", "s.backend_type", "s.ssl", "s.sslversion", "s.sslcipher", "s.sslbits", "s.sslcompression", "s.sslclientdn"],
+        "Output": ["s.datid", "s.pid", "s.usesysid", "s.application_name", "s.state", "s.query", "s.wait_event_type", "s.wait_event", "s.xact_start", "s.query_start", "s.backend_start", "s.state_change", "s.client_addr", "s.client_hostname", "s.client_port", "s.backend_xid", "s.backend_xmin", "s.backend_type", "s.ssl", "s.sslversion", "s.sslcipher", "s.sslbits", "s.sslcompression", "s.ssl_client_dn", "s.ssl_client_serial", "s.ssl_issuer_dn", "s.gss_auth", "s.gss_princ", "s.gss_enc", "s.leader_pid"],
         "Function Call": "pg_stat_get_activity(NULL::integer)",
         "Shared Hit Blocks": 0,
         "Shared Read Blocks": 0,
@@ -1052,13 +1149,13 @@ INSERT INTO plans (VALUES
         "Node Type": "Hash",
         "Parent Relationship": "Inner",
         "Parallel Aware": false,
-        "Startup Cost": 1.05,
-        "Total Cost": 1.05,
-        "Plan Rows": 5,
+        "Startup Cost": 1.04,
+        "Total Cost": 1.04,
+        "Plan Rows": 4,
         "Plan Width": 68,
-        "Actual Startup Time": 0.020,
-        "Actual Total Time": 0.020,
-        "Actual Rows": 5,
+        "Actual Startup Time": 0.027,
+        "Actual Total Time": 0.028,
+        "Actual Rows": 4,
         "Actual Loops": 1,
         "Output": ["d.datname", "d.oid"],
         "Hash Buckets": 1024,
@@ -1085,12 +1182,12 @@ INSERT INTO plans (VALUES
             "Schema": "pg_catalog",
             "Alias": "d",
             "Startup Cost": 0.00,
-            "Total Cost": 1.05,
-            "Plan Rows": 5,
+            "Total Cost": 1.04,
+            "Plan Rows": 4,
             "Plan Width": 68,
-            "Actual Startup Time": 0.009,
-            "Actual Total Time": 0.012,
-            "Actual Rows": 5,
+            "Actual Startup Time": 0.017,
+            "Actual Total Time": 0.020,
+            "Actual Rows": 4,
             "Actual Loops": 1,
             "Output": ["d.datname", "d.oid"],
             "Shared Hit Blocks": 1,
@@ -1108,10 +1205,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.565,
+  "Planning": {
+    "Shared Hit Blocks": 28,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 1.071,
   "Triggers": [
   ],
-  "Execution Time": 0.644
+  "Execution Time": 0.904
 }'),
 (10, '###### Plan 10: MergeAppend, Values',
  E'{
@@ -1119,15 +1228,15 @@ INSERT INTO plans (VALUES
     "Node Type": "Merge Append",
     "Parallel Aware": false,
     "Startup Cost": 0.36,
-    "Total Cost": 935.42,
+    "Total Cost": 852.43,
     "Plan Rows": 10004,
     "Plan Width": 4,
-    "Actual Startup Time": 0.036,
-    "Actual Total Time": 33.263,
+    "Actual Startup Time": 0.108,
+    "Actual Total Time": 133.185,
     "Actual Rows": 10004,
     "Actual Loops": 1,
     "Sort Key": ["tt1.a"],
-    "Shared Hit Blocks": 30069,
+    "Shared Hit Blocks": 30076,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
@@ -1137,6 +1246,7 @@ INSERT INTO plans (VALUES
     "Local Written Blocks": 0,
     "Temp Read Blocks": 0,
     "Temp Written Blocks": 0,
+    "Subplans Removed": 0,
     "Plans": [
       {
         "Node Type": "Index Only Scan",
@@ -1148,16 +1258,16 @@ INSERT INTO plans (VALUES
         "Schema": "public",
         "Alias": "tt1",
         "Startup Cost": 0.29,
-        "Total Cost": 760.30,
+        "Total Cost": 652.30,
         "Plan Rows": 10001,
         "Plan Width": 4,
-        "Actual Startup Time": 0.021,
-        "Actual Total Time": 30.772,
+        "Actual Startup Time": 0.078,
+        "Actual Total Time": 129.755,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["tt1.a"],
-        "Heap Fetches": 29973,
-        "Shared Hit Blocks": 30069,
+        "Heap Fetches": 29996,
+        "Shared Hit Blocks": 30076,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -1176,8 +1286,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 0.07,
         "Plan Rows": 3,
         "Plan Width": 4,
-        "Actual Startup Time": 0.014,
-        "Actual Total Time": 0.014,
+        "Actual Startup Time": 0.028,
+        "Actual Total Time": 0.030,
         "Actual Rows": 3,
         "Actual Loops": 1,
         "Output": ["\\"*VALUES*\\".column1"],
@@ -1205,8 +1315,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 0.04,
             "Plan Rows": 3,
             "Plan Width": 4,
-            "Actual Startup Time": 0.002,
-            "Actual Total Time": 0.005,
+            "Actual Startup Time": 0.005,
+            "Actual Total Time": 0.009,
             "Actual Rows": 3,
             "Actual Loops": 1,
             "Output": ["\\"*VALUES*\\".column1"],
@@ -1225,10 +1335,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.193,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.281,
   "Triggers": [
   ],
-  "Execution Time": 35.065
+  "Execution Time": 135.846
 }'),
 (11, '###### Plan 11: Append, HashAggregate',
  '{
@@ -1237,16 +1359,20 @@ INSERT INTO plans (VALUES
     "Strategy": "Hashed",
     "Partial Mode": "Simple",
     "Parallel Aware": false,
-    "Startup Cost": 668.04,
-    "Total Cost": 868.06,
+    "Startup Cost": 1793.16,
+    "Total Cost": 2149.44,
     "Plan Rows": 20002,
     "Plan Width": 4,
-    "Actual Startup Time": 21.630,
-    "Actual Total Time": 27.849,
+    "Actual Startup Time": 39.362,
+    "Actual Total Time": 60.508,
     "Actual Rows": 20002,
     "Actual Loops": 1,
     "Output": ["tt1.a"],
     "Group Key": ["tt1.a"],
+    "Planned Partitions": 4,
+    "HashAgg Batches": 5,
+    "Peak Memory Usage": 1073,
+    "Disk Usage": 248,
     "Shared Hit Blocks": 218,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
@@ -1255,19 +1381,19 @@ INSERT INTO plans (VALUES
     "Local Read Blocks": 0,
     "Local Dirtied Blocks": 0,
     "Local Written Blocks": 0,
-    "Temp Read Blocks": 0,
-    "Temp Written Blocks": 0,
+    "Temp Read Blocks": 29,
+    "Temp Written Blocks": 52,
     "Plans": [
       {
         "Node Type": "Append",
         "Parent Relationship": "Outer",
         "Parallel Aware": false,
         "Startup Cost": 0.00,
-        "Total Cost": 618.04,
+        "Total Cost": 718.05,
         "Plan Rows": 20002,
         "Plan Width": 4,
-        "Actual Startup Time": 0.162,
-        "Actual Total Time": 10.468,
+        "Actual Startup Time": 0.216,
+        "Actual Total Time": 16.983,
         "Actual Rows": 20002,
         "Actual Loops": 1,
         "Shared Hit Blocks": 218,
@@ -1280,6 +1406,7 @@ INSERT INTO plans (VALUES
         "Local Written Blocks": 0,
         "Temp Read Blocks": 0,
         "Temp Written Blocks": 0,
+        "Subplans Removed": 0,
         "Plans": [
           {
             "Node Type": "Seq Scan",
@@ -1292,8 +1419,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 263.01,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 0.162,
-            "Actual Total Time": 3.517,
+            "Actual Startup Time": 0.215,
+            "Actual Total Time": 6.705,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["tt1.a"],
@@ -1319,8 +1446,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 155.01,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 0.012,
-            "Actual Total Time": 3.281,
+            "Actual Startup Time": 0.024,
+            "Actual Total Time": 5.101,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["tt2.b"],
@@ -1339,10 +1466,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.108,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.150,
   "Triggers": [
   ],
-  "Execution Time": 30.935
+  "Execution Time": 64.034
 }'),
 (12, '###### Plan 12: GroupAggregate',
  '{
@@ -1355,8 +1494,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 1242.49,
     "Plan Rows": 10001,
     "Plan Width": 12,
-    "Actual Startup Time": 13.558,
-    "Actual Total Time": 24.047,
+    "Actual Startup Time": 27.917,
+    "Actual Total Time": 65.682,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["sum(a)", "b"],
@@ -1380,8 +1519,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 1092.47,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 13.552,
-        "Actual Total Time": 16.191,
+        "Actual Startup Time": 27.901,
+        "Actual Total Time": 34.159,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["b", "a"],
@@ -1411,8 +1550,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 263.01,
             "Plan Rows": 10001,
             "Plan Width": 8,
-            "Actual Startup Time": 0.147,
-            "Actual Total Time": 3.206,
+            "Actual Startup Time": 0.210,
+            "Actual Total Time": 7.632,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["b", "a"],
@@ -1431,10 +1570,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.115,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.095,
   "Triggers": [
   ],
-  "Execution Time": 25.808
+  "Execution Time": 69.397
 }'),
 (13, '###### Plan 13: Group',
  '{
@@ -1445,8 +1596,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 1117.47,
     "Plan Rows": 10001,
     "Plan Width": 4,
-    "Actual Startup Time": 12.547,
-    "Actual Total Time": 19.383,
+    "Actual Startup Time": 23.168,
+    "Actual Total Time": 37.399,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["b"],
@@ -1470,8 +1621,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 1092.47,
         "Plan Rows": 10001,
         "Plan Width": 4,
-        "Actual Startup Time": 12.545,
-        "Actual Total Time": 14.931,
+        "Actual Startup Time": 23.165,
+        "Actual Total Time": 27.281,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["b"],
@@ -1501,8 +1652,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 263.01,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 0.133,
-            "Actual Total Time": 2.966,
+            "Actual Startup Time": 0.177,
+            "Actual Total Time": 5.974,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["b"],
@@ -1521,22 +1672,34 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.046,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.078,
   "Triggers": [
   ],
-  "Execution Time": 20.508
+  "Execution Time": 39.587
 }'),
 (14, '###### Plan 14: SetOp intersect, SbuqueryScan',
  E'{
   "Plan": {
     "Node Type": "Sort",
     "Parallel Aware": false,
-    "Startup Cost": 1332.50,
-    "Total Cost": 1357.51,
+    "Startup Cost": 1432.51,
+    "Total Cost": 1457.52,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 18.874,
-    "Actual Total Time": 18.874,
+    "Actual Startup Time": 44.942,
+    "Actual Total Time": 44.945,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -1562,11 +1725,11 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Command": "Intersect",
         "Startup Cost": 0.00,
-        "Total Cost": 668.04,
+        "Total Cost": 768.05,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 18.869,
-        "Actual Total Time": 18.869,
+        "Actual Startup Time": 44.934,
+        "Actual Total Time": 44.936,
         "Actual Rows": 0,
         "Actual Loops": 1,
         "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -1586,11 +1749,11 @@ INSERT INTO plans (VALUES
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
             "Startup Cost": 0.00,
-            "Total Cost": 618.04,
+            "Total Cost": 718.05,
             "Plan Rows": 20002,
             "Plan Width": 8,
-            "Actual Startup Time": 0.166,
-            "Actual Total Time": 12.521,
+            "Actual Startup Time": 0.278,
+            "Actual Total Time": 29.908,
             "Actual Rows": 20002,
             "Actual Loops": 1,
             "Shared Hit Blocks": 218,
@@ -1603,6 +1766,7 @@ INSERT INTO plans (VALUES
             "Local Written Blocks": 0,
             "Temp Read Blocks": 0,
             "Temp Written Blocks": 0,
+            "Subplans Removed": 0,
             "Plans": [
               {
                 "Node Type": "Subquery Scan",
@@ -1613,8 +1777,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 363.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.166,
-                "Actual Total Time": 5.461,
+                "Actual Startup Time": 0.277,
+                "Actual Total Time": 10.485,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 1\\".a", "0"],
@@ -1640,8 +1804,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 263.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.165,
-                    "Actual Total Time": 3.005,
+                    "Actual Startup Time": 0.273,
+                    "Actual Total Time": 5.540,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt1.a"],
@@ -1667,8 +1831,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 255.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.009,
-                "Actual Total Time": 4.507,
+                "Actual Startup Time": 0.022,
+                "Actual Total Time": 12.693,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 2\\".b", "1"],
@@ -1694,8 +1858,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 155.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.009,
-                    "Actual Total Time": 2.416,
+                    "Actual Startup Time": 0.020,
+                    "Actual Total Time": 6.760,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt2.b"],
@@ -1718,10 +1882,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.091,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.204,
   "Triggers": [
   ],
-  "Execution Time": 19.535
+  "Execution Time": 46.074
 }'),
 (15, '###### Plan 15: Sorted SetOp, Sort on Disk',
  E'{
@@ -1730,12 +1906,12 @@ INSERT INTO plans (VALUES
     "Strategy": "Sorted",
     "Parallel Aware": false,
     "Command": "Intersect",
-    "Startup Cost": 2323.47,
-    "Total Cost": 2423.48,
+    "Startup Cost": 2423.48,
+    "Total Cost": 2523.49,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 42.218,
-    "Actual Total Time": 42.218,
+    "Actual Startup Time": 85.013,
+    "Actual Total Time": 85.017,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -1747,25 +1923,25 @@ INSERT INTO plans (VALUES
     "Local Read Blocks": 0,
     "Local Dirtied Blocks": 0,
     "Local Written Blocks": 0,
-    "Temp Read Blocks": 113,
-    "Temp Written Blocks": 126,
+    "Temp Read Blocks": 109,
+    "Temp Written Blocks": 134,
     "Plans": [
       {
         "Node Type": "Sort",
         "Parent Relationship": "Outer",
         "Parallel Aware": false,
-        "Startup Cost": 2323.47,
-        "Total Cost": 2373.47,
+        "Startup Cost": 2423.48,
+        "Total Cost": 2473.48,
         "Plan Rows": 20002,
         "Plan Width": 8,
-        "Actual Startup Time": 31.621,
-        "Actual Total Time": 35.575,
+        "Actual Startup Time": 59.500,
+        "Actual Total Time": 68.824,
         "Actual Rows": 20002,
         "Actual Loops": 1,
         "Output": ["\\"*SELECT* 1\\".a", "(0)"],
         "Sort Key": ["\\"*SELECT* 1\\".a"],
         "Sort Method": "external merge",
-        "Sort Space Used": 384,
+        "Sort Space Used": 376,
         "Sort Space Type": "Disk",
         "Shared Hit Blocks": 218,
         "Shared Read Blocks": 0,
@@ -1775,19 +1951,19 @@ INSERT INTO plans (VALUES
         "Local Read Blocks": 0,
         "Local Dirtied Blocks": 0,
         "Local Written Blocks": 0,
-        "Temp Read Blocks": 113,
-        "Temp Written Blocks": 126,
+        "Temp Read Blocks": 109,
+        "Temp Written Blocks": 134,
         "Plans": [
           {
             "Node Type": "Append",
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
             "Startup Cost": 0.00,
-            "Total Cost": 618.04,
+            "Total Cost": 718.05,
             "Plan Rows": 20002,
             "Plan Width": 8,
-            "Actual Startup Time": 0.116,
-            "Actual Total Time": 11.983,
+            "Actual Startup Time": 0.206,
+            "Actual Total Time": 27.164,
             "Actual Rows": 20002,
             "Actual Loops": 1,
             "Shared Hit Blocks": 218,
@@ -1800,6 +1976,7 @@ INSERT INTO plans (VALUES
             "Local Written Blocks": 0,
             "Temp Read Blocks": 0,
             "Temp Written Blocks": 0,
+            "Subplans Removed": 0,
             "Plans": [
               {
                 "Node Type": "Subquery Scan",
@@ -1810,8 +1987,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 363.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.116,
-                "Actual Total Time": 4.795,
+                "Actual Startup Time": 0.205,
+                "Actual Total Time": 11.202,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 1\\".a", "0"],
@@ -1837,8 +2014,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 263.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.115,
-                    "Actual Total Time": 2.492,
+                    "Actual Startup Time": 0.202,
+                    "Actual Total Time": 5.926,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt1.a"],
@@ -1864,8 +2041,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 255.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.008,
-                "Actual Total Time": 4.778,
+                "Actual Startup Time": 0.024,
+                "Actual Total Time": 10.268,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 2\\".b", "1"],
@@ -1891,8 +2068,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 155.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.008,
-                    "Actual Total Time": 2.517,
+                    "Actual Startup Time": 0.022,
+                    "Actual Total Time": 5.398,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt2.b"],
@@ -1915,22 +2092,34 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.082,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.185,
   "Triggers": [
   ],
-  "Execution Time": 42.624
+  "Execution Time": 85.810
 }'),
 (16, '###### Plan 16: HashSetOp intersect All, SubqueryScan',
  E'{
   "Plan": {
     "Node Type": "Sort",
     "Parallel Aware": false,
-    "Startup Cost": 1332.50,
-    "Total Cost": 1357.51,
+    "Startup Cost": 1432.51,
+    "Total Cost": 1457.52,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 18.612,
-    "Actual Total Time": 18.612,
+    "Actual Startup Time": 41.088,
+    "Actual Total Time": 41.091,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -1956,11 +2145,11 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Command": "Intersect All",
         "Startup Cost": 0.00,
-        "Total Cost": 668.04,
+        "Total Cost": 768.05,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 18.606,
-        "Actual Total Time": 18.606,
+        "Actual Startup Time": 41.081,
+        "Actual Total Time": 41.083,
         "Actual Rows": 0,
         "Actual Loops": 1,
         "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -1980,11 +2169,11 @@ INSERT INTO plans (VALUES
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
             "Startup Cost": 0.00,
-            "Total Cost": 618.04,
+            "Total Cost": 718.05,
             "Plan Rows": 20002,
             "Plan Width": 8,
-            "Actual Startup Time": 0.129,
-            "Actual Total Time": 12.270,
+            "Actual Startup Time": 0.221,
+            "Actual Total Time": 27.530,
             "Actual Rows": 20002,
             "Actual Loops": 1,
             "Shared Hit Blocks": 218,
@@ -1997,6 +2186,7 @@ INSERT INTO plans (VALUES
             "Local Written Blocks": 0,
             "Temp Read Blocks": 0,
             "Temp Written Blocks": 0,
+            "Subplans Removed": 0,
             "Plans": [
               {
                 "Node Type": "Subquery Scan",
@@ -2007,8 +2197,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 363.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.129,
-                "Actual Total Time": 5.147,
+                "Actual Startup Time": 0.220,
+                "Actual Total Time": 11.527,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 1\\".a", "0"],
@@ -2034,8 +2224,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 263.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.128,
-                    "Actual Total Time": 2.886,
+                    "Actual Startup Time": 0.217,
+                    "Actual Total Time": 6.389,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt1.a"],
@@ -2061,8 +2251,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 255.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.010,
-                "Actual Total Time": 4.666,
+                "Actual Startup Time": 0.025,
+                "Actual Total Time": 10.452,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 2\\".b", "1"],
@@ -2088,8 +2278,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 155.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.010,
-                    "Actual Total Time": 2.546,
+                    "Actual Startup Time": 0.023,
+                    "Actual Total Time": 5.465,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt2.b"],
@@ -2112,22 +2302,34 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.089,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.239,
   "Triggers": [
   ],
-  "Execution Time": 19.308
+  "Execution Time": 43.479
 }'),
 (17, '###### Plan 17: HashSetOp except, SubqueryScan',
  E'{
   "Plan": {
     "Node Type": "Sort",
     "Parallel Aware": false,
-    "Startup Cost": 1332.50,
-    "Total Cost": 1357.51,
+    "Startup Cost": 1432.51,
+    "Total Cost": 1457.52,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 22.556,
-    "Actual Total Time": 23.380,
+    "Actual Startup Time": 46.663,
+    "Actual Total Time": 48.678,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -2153,11 +2355,11 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Command": "Except",
         "Startup Cost": 0.00,
-        "Total Cost": 668.04,
+        "Total Cost": 768.05,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 17.434,
-        "Actual Total Time": 18.500,
+        "Actual Startup Time": 35.260,
+        "Actual Total Time": 37.531,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -2177,11 +2379,11 @@ INSERT INTO plans (VALUES
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
             "Startup Cost": 0.00,
-            "Total Cost": 618.04,
+            "Total Cost": 718.05,
             "Plan Rows": 20002,
             "Plan Width": 8,
-            "Actual Startup Time": 0.136,
-            "Actual Total Time": 11.989,
+            "Actual Startup Time": 0.295,
+            "Actual Total Time": 24.671,
             "Actual Rows": 20002,
             "Actual Loops": 1,
             "Shared Hit Blocks": 218,
@@ -2194,6 +2396,7 @@ INSERT INTO plans (VALUES
             "Local Written Blocks": 0,
             "Temp Read Blocks": 0,
             "Temp Written Blocks": 0,
+            "Subplans Removed": 0,
             "Plans": [
               {
                 "Node Type": "Subquery Scan",
@@ -2204,8 +2407,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 363.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.136,
-                "Actual Total Time": 4.805,
+                "Actual Startup Time": 0.293,
+                "Actual Total Time": 9.504,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 1\\".a", "0"],
@@ -2231,8 +2434,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 263.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.135,
-                    "Actual Total Time": 2.625,
+                    "Actual Startup Time": 0.290,
+                    "Actual Total Time": 5.273,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt1.a"],
@@ -2258,8 +2461,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 255.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.010,
-                "Actual Total Time": 4.669,
+                "Actual Startup Time": 0.020,
+                "Actual Total Time": 9.883,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 2\\".b", "1"],
@@ -2285,8 +2488,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 155.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.010,
-                    "Actual Total Time": 2.538,
+                    "Actual Startup Time": 0.018,
+                    "Actual Total Time": 5.317,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt2.b"],
@@ -2309,22 +2512,34 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.099,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.206,
   "Triggers": [
   ],
-  "Execution Time": 25.727
+  "Execution Time": 53.924
 }'),
 (18, '###### Plan 18: HashSetOp except all, SubqueryScan',
  E'{
   "Plan": {
     "Node Type": "Sort",
     "Parallel Aware": false,
-    "Startup Cost": 1332.50,
-    "Total Cost": 1357.51,
+    "Startup Cost": 1432.51,
+    "Total Cost": 1457.52,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 22.101,
-    "Actual Total Time": 22.924,
+    "Actual Startup Time": 48.922,
+    "Actual Total Time": 51.025,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -2350,11 +2565,11 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Command": "Except All",
         "Startup Cost": 0.00,
-        "Total Cost": 668.04,
+        "Total Cost": 768.05,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 17.050,
-        "Actual Total Time": 17.997,
+        "Actual Startup Time": 34.965,
+        "Actual Total Time": 38.291,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["\\"*SELECT* 1\\".a", "(0)"],
@@ -2374,11 +2589,11 @@ INSERT INTO plans (VALUES
             "Parent Relationship": "Outer",
             "Parallel Aware": false,
             "Startup Cost": 0.00,
-            "Total Cost": 618.04,
+            "Total Cost": 718.05,
             "Plan Rows": 20002,
             "Plan Width": 8,
-            "Actual Startup Time": 0.139,
-            "Actual Total Time": 11.633,
+            "Actual Startup Time": 0.244,
+            "Actual Total Time": 24.592,
             "Actual Rows": 20002,
             "Actual Loops": 1,
             "Shared Hit Blocks": 218,
@@ -2391,6 +2606,7 @@ INSERT INTO plans (VALUES
             "Local Written Blocks": 0,
             "Temp Read Blocks": 0,
             "Temp Written Blocks": 0,
+            "Subplans Removed": 0,
             "Plans": [
               {
                 "Node Type": "Subquery Scan",
@@ -2401,8 +2617,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 363.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.138,
-                "Actual Total Time": 4.680,
+                "Actual Startup Time": 0.243,
+                "Actual Total Time": 10.070,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 1\\".a", "0"],
@@ -2428,8 +2644,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 263.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.138,
-                    "Actual Total Time": 2.536,
+                    "Actual Startup Time": 0.240,
+                    "Actual Total Time": 5.278,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt1.a"],
@@ -2455,8 +2671,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 255.02,
                 "Plan Rows": 10001,
                 "Plan Width": 8,
-                "Actual Startup Time": 0.009,
-                "Actual Total Time": 4.554,
+                "Actual Startup Time": 0.022,
+                "Actual Total Time": 9.503,
                 "Actual Rows": 10001,
                 "Actual Loops": 1,
                 "Output": ["\\"*SELECT* 2\\".b", "1"],
@@ -2482,8 +2698,8 @@ INSERT INTO plans (VALUES
                     "Total Cost": 155.01,
                     "Plan Rows": 10001,
                     "Plan Width": 4,
-                    "Actual Startup Time": 0.008,
-                    "Actual Total Time": 2.495,
+                    "Actual Startup Time": 0.020,
+                    "Actual Total Time": 5.101,
                     "Actual Rows": 10001,
                     "Actual Loops": 1,
                     "Output": ["tt2.b"],
@@ -2506,10 +2722,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.097,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.146,
   "Triggers": [
   ],
-  "Execution Time": 25.260
+  "Execution Time": 58.119
 }'),
 (19, '###### Plan 19: merge LEFT join',
  '{
@@ -2518,17 +2746,17 @@ INSERT INTO plans (VALUES
     "Parallel Aware": false,
     "Join Type": "Left",
     "Startup Cost": 0.71,
-    "Total Cost": 4293.92,
-    "Plan Rows": 33292,
+    "Total Cost": 3860.52,
+    "Plan Rows": 33557,
     "Plan Width": 4,
-    "Actual Startup Time": 0.032,
-    "Actual Total Time": 65.448,
+    "Actual Startup Time": 0.105,
+    "Actual Total Time": 226.400,
     "Actual Rows": 60003,
     "Actual Loops": 1,
     "Output": ["x.b"],
     "Inner Unique": false,
     "Merge Cond": "(x.a = y.a)",
-    "Shared Hit Blocks": 20946,
+    "Shared Hit Blocks": 35794,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
@@ -2549,15 +2777,15 @@ INSERT INTO plans (VALUES
         "Schema": "public",
         "Alias": "x",
         "Startup Cost": 0.29,
-        "Total Cost": 760.30,
+        "Total Cost": 652.30,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 0.008,
-        "Actual Total Time": 5.025,
+        "Actual Startup Time": 0.055,
+        "Actual Total Time": 100.454,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["x.a", "x.b", "x.c"],
-        "Shared Hit Blocks": 165,
+        "Shared Hit Blocks": 15484,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -2578,16 +2806,16 @@ INSERT INTO plans (VALUES
         "Schema": "public",
         "Alias": "y",
         "Startup Cost": 0.42,
-        "Total Cost": 9030.73,
+        "Total Cost": 8175.04,
         "Plan Rows": 180003,
         "Plan Width": 4,
-        "Actual Startup Time": 0.020,
-        "Actual Total Time": 38.025,
+        "Actual Startup Time": 0.046,
+        "Actual Total Time": 80.236,
         "Actual Rows": 60004,
         "Actual Loops": 1,
         "Output": ["y.a"],
         "Heap Fetches": 60004,
-        "Shared Hit Blocks": 20781,
+        "Shared Hit Blocks": 20310,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -2600,10 +2828,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.374,
+  "Planning": {
+    "Shared Hit Blocks": 41,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.775,
   "Triggers": [
   ],
-  "Execution Time": 70.459
+  "Execution Time": 238.174
 }'),
 (20, '###### Plan 20: hash FULL join',
  '{
@@ -2615,8 +2855,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 680.55,
     "Plan Rows": 10001,
     "Plan Width": 4,
-    "Actual Startup Time": 5.466,
-    "Actual Total Time": 11.552,
+    "Actual Startup Time": 10.794,
+    "Actual Total Time": 25.225,
     "Actual Rows": 17001,
     "Actual Loops": 1,
     "Output": ["x.b"],
@@ -2644,8 +2884,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 263.01,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 0.126,
-        "Actual Total Time": 1.575,
+        "Actual Startup Time": 0.171,
+        "Actual Total Time": 3.347,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["x.a", "x.b", "x.c"],
@@ -2668,8 +2908,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 155.01,
         "Plan Rows": 10001,
         "Plan Width": 4,
-        "Actual Startup Time": 5.326,
-        "Actual Total Time": 5.326,
+        "Actual Startup Time": 10.580,
+        "Actual Total Time": 10.583,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["y.a"],
@@ -2700,8 +2940,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 155.01,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 0.012,
-            "Actual Total Time": 2.530,
+            "Actual Startup Time": 0.131,
+            "Actual Total Time": 4.929,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["y.a"],
@@ -2720,10 +2960,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.121,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.318,
   "Triggers": [
   ],
-  "Execution Time": 13.019
+  "Execution Time": 28.549
 }'),
 (21, '###### Plan 21: hash SEMI join',
  '{
@@ -2735,8 +2987,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 680.55,
     "Plan Rows": 10001,
     "Plan Width": 12,
-    "Actual Startup Time": 8.862,
-    "Actual Total Time": 8.862,
+    "Actual Startup Time": 20.909,
+    "Actual Total Time": 20.912,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Output": ["tt1.a", "tt1.b", "tt1.c"],
@@ -2764,8 +3016,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 263.01,
         "Plan Rows": 10001,
         "Plan Width": 12,
-        "Actual Startup Time": 0.106,
-        "Actual Total Time": 1.502,
+        "Actual Startup Time": 0.188,
+        "Actual Total Time": 3.024,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["tt1.a", "tt1.b", "tt1.c"],
@@ -2788,8 +3040,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 155.01,
         "Plan Rows": 10001,
         "Plan Width": 4,
-        "Actual Startup Time": 5.222,
-        "Actual Total Time": 5.222,
+        "Actual Startup Time": 13.797,
+        "Actual Total Time": 13.798,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["tt2.b"],
@@ -2820,8 +3072,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 155.01,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 0.008,
-            "Actual Total Time": 2.498,
+            "Actual Startup Time": 0.015,
+            "Actual Total Time": 6.167,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["tt2.b"],
@@ -2840,10 +3092,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.192,
+  "Planning": {
+    "Shared Hit Blocks": 8,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.570,
   "Triggers": [
   ],
-  "Execution Time": 9.096
+  "Execution Time": 21.391
 }'),
 (22, '###### Plan 22: Hash Anti Join',
  '{
@@ -2855,8 +3119,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 580.54,
     "Plan Rows": 1,
     "Plan Width": 12,
-    "Actual Startup Time": 5.858,
-    "Actual Total Time": 10.988,
+    "Actual Startup Time": 14.232,
+    "Actual Total Time": 27.140,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["tt1.a", "tt1.b", "tt1.c"],
@@ -2884,8 +3148,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 263.01,
         "Plan Rows": 10001,
         "Plan Width": 12,
-        "Actual Startup Time": 0.107,
-        "Actual Total Time": 1.538,
+        "Actual Startup Time": 0.294,
+        "Actual Total Time": 3.730,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["tt1.a", "tt1.b", "tt1.c"],
@@ -2908,8 +3172,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 155.01,
         "Plan Rows": 10001,
         "Plan Width": 4,
-        "Actual Startup Time": 5.741,
-        "Actual Total Time": 5.741,
+        "Actual Startup Time": 13.916,
+        "Actual Total Time": 13.919,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["tt2.b"],
@@ -2940,8 +3204,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 155.01,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 0.008,
-            "Actual Total Time": 2.697,
+            "Actual Startup Time": 0.023,
+            "Actual Total Time": 6.598,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["tt2.b"],
@@ -2960,10 +3224,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.141,
+  "Planning": {
+    "Shared Hit Blocks": 8,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.677,
   "Triggers": [
   ],
-  "Execution Time": 11.936
+  "Execution Time": 29.567
 }'),
 (23, '###### Plan 23: WindowAgg',
  '{
@@ -2974,8 +3250,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 1152.49,
     "Plan Rows": 10001,
     "Plan Width": 8,
-    "Actual Startup Time": 4.993,
-    "Actual Total Time": 16.485,
+    "Actual Startup Time": 12.556,
+    "Actual Total Time": 42.738,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["first_value(a) OVER (?)", "((a / 10))"],
@@ -2998,8 +3274,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 977.47,
         "Plan Rows": 10001,
         "Plan Width": 8,
-        "Actual Startup Time": 4.985,
-        "Actual Total Time": 5.858,
+        "Actual Startup Time": 12.544,
+        "Actual Total Time": 14.802,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["((a / 10))", "a"],
@@ -3029,8 +3305,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 288.01,
             "Plan Rows": 10001,
             "Plan Width": 8,
-            "Actual Startup Time": 0.110,
-            "Actual Total Time": 2.504,
+            "Actual Startup Time": 0.361,
+            "Actual Total Time": 7.458,
             "Actual Rows": 10001,
             "Actual Loops": 1,
             "Output": ["(a / 10)", "a"],
@@ -3049,26 +3325,38 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.058,
-  "Triggers": [
-  ],
-  "Execution Time": 17.937
-}'),
-(24, '###### Plan 24: Unique',
- '{
-  "Plan": {
-    "Node Type": "Unique",
-    "Parallel Aware": false,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.128,
+  "Triggers": [
+  ],
+  "Execution Time": 46.257
+}'),
+(24, '###### Plan 24: Unique',
+ '{
+  "Plan": {
+    "Node Type": "Unique",
+    "Parallel Aware": false,
     "Startup Cost": 0.29,
-    "Total Cost": 785.30,
+    "Total Cost": 677.30,
     "Plan Rows": 10001,
     "Plan Width": 4,
-    "Actual Startup Time": 0.017,
-    "Actual Total Time": 8.763,
+    "Actual Startup Time": 0.089,
+    "Actual Total Time": 129.670,
     "Actual Rows": 10001,
     "Actual Loops": 1,
     "Output": ["a"],
-    "Shared Hit Blocks": 165,
+    "Shared Hit Blocks": 15403,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
@@ -3089,16 +3377,16 @@ INSERT INTO plans (VALUES
         "Schema": "public",
         "Alias": "tt1",
         "Startup Cost": 0.29,
-        "Total Cost": 760.30,
+        "Total Cost": 652.30,
         "Plan Rows": 10001,
         "Plan Width": 4,
-        "Actual Startup Time": 0.016,
-        "Actual Total Time": 4.962,
+        "Actual Startup Time": 0.087,
+        "Actual Total Time": 118.564,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["a"],
-        "Heap Fetches": 10001,
-        "Shared Hit Blocks": 165,
+        "Heap Fetches": 20208,
+        "Shared Hit Blocks": 15403,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -3111,10 +3399,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.051,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.153,
   "Triggers": [
   ],
-  "Execution Time": 9.638
+  "Execution Time": 131.893
 }'),
 (25, '###### Plan 25: PlainAggregate',
  '{
@@ -3127,8 +3427,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 288.02,
     "Plan Rows": 1,
     "Plan Width": 8,
-    "Actual Startup Time": 3.420,
-    "Actual Total Time": 3.420,
+    "Actual Startup Time": 6.445,
+    "Actual Total Time": 6.446,
     "Actual Rows": 1,
     "Actual Loops": 1,
     "Output": ["sum(a)"],
@@ -3154,8 +3454,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 263.01,
         "Plan Rows": 10001,
         "Plan Width": 4,
-        "Actual Startup Time": 0.113,
-        "Actual Total Time": 1.452,
+        "Actual Startup Time": 0.190,
+        "Actual Total Time": 2.847,
         "Actual Rows": 10001,
         "Actual Loops": 1,
         "Output": ["a", "b", "c"],
@@ -3172,10 +3472,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.062,
+  "Planning": {
+    "Shared Hit Blocks": 3,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.205,
   "Triggers": [
   ],
-  "Execution Time": 3.537
+  "Execution Time": 6.684
 }'),
 (26, '###### Plan 26: BitmapIndexScan/BitmapHeapScan, BitmapOr, lossy',
  E'{
@@ -3185,12 +3497,12 @@ INSERT INTO plans (VALUES
     "Relation Name": "tt3",
     "Schema": "public",
     "Alias": "tt3",
-    "Startup Cost": 4239.43,
-    "Total Cost": 7462.44,
-    "Plan Rows": 180001,
+    "Startup Cost": 3947.41,
+    "Total Cost": 7170.40,
+    "Plan Rows": 179999,
     "Plan Width": 12,
-    "Actual Startup Time": 26.037,
-    "Actual Total Time": 64.054,
+    "Actual Startup Time": 55.836,
+    "Actual Total Time": 128.723,
     "Actual Rows": 180000,
     "Actual Loops": 1,
     "Output": ["a", "b", "c"],
@@ -3198,7 +3510,7 @@ INSERT INTO plans (VALUES
     "Rows Removed by Index Recheck": 0,
     "Exact Heap Blocks": 973,
     "Lossy Heap Blocks": 0,
-    "Shared Hit Blocks": 1682,
+    "Shared Hit Blocks": 1609,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
@@ -3215,15 +3527,15 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Index Name": "i_tt3_b",
         "Startup Cost": 0.00,
-        "Total Cost": 4194.43,
-        "Plan Rows": 180001,
+        "Total Cost": 3902.41,
+        "Plan Rows": 179999,
         "Plan Width": 0,
-        "Actual Startup Time": 25.838,
-        "Actual Total Time": 25.838,
+        "Actual Startup Time": 55.082,
+        "Actual Total Time": 55.082,
         "Actual Rows": 180000,
         "Actual Loops": 1,
         "Index Cond": "(tt3.b > \'-99998\'::integer)",
-        "Shared Hit Blocks": 709,
+        "Shared Hit Blocks": 636,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -3236,10 +3548,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.124,
+  "Planning": {
+    "Shared Hit Blocks": 10,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.181,
   "Triggers": [
   ],
-  "Execution Time": 77.880
+  "Execution Time": 156.537
 }'),
 (27, '###### Plan 27: Join Filter',
  '{
@@ -3250,8 +3574,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 21.52,
     "Plan Rows": 100,
     "Plan Width": 12,
-    "Actual Startup Time": 5.615,
-    "Actual Total Time": 5.725,
+    "Actual Startup Time": 18.516,
+    "Actual Total Time": 18.804,
     "Actual Rows": 100,
     "Actual Loops": 1,
     "Output": ["tt2.a", "tt2.b", "tt2.c"],
@@ -3275,8 +3599,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 43048282.11,
         "Plan Rows": 200023334,
         "Plan Width": 12,
-        "Actual Startup Time": 5.614,
-        "Actual Total Time": 5.712,
+        "Actual Startup Time": 18.514,
+        "Actual Total Time": 18.773,
         "Actual Rows": 100,
         "Actual Loops": 1,
         "Output": ["tt2.a", "tt2.b", "tt2.c"],
@@ -3305,8 +3629,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 155.01,
             "Plan Rows": 10001,
             "Plan Width": 12,
-            "Actual Startup Time": 0.014,
-            "Actual Total Time": 0.014,
+            "Actual Startup Time": 0.041,
+            "Actual Total Time": 0.042,
             "Actual Rows": 1,
             "Actual Loops": 1,
             "Output": ["tt2.a", "tt2.b", "tt2.c"],
@@ -3329,8 +3653,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 4377.05,
             "Plan Rows": 180003,
             "Plan Width": 4,
-            "Actual Startup Time": 0.010,
-            "Actual Total Time": 4.634,
+            "Actual Startup Time": 0.024,
+            "Actual Total Time": 15.020,
             "Actual Rows": 7101,
             "Actual Loops": 1,
             "Output": ["tt3.a"],
@@ -3356,8 +3680,8 @@ INSERT INTO plans (VALUES
                 "Total Cost": 2773.03,
                 "Plan Rows": 180003,
                 "Plan Width": 4,
-                "Actual Startup Time": 0.008,
-                "Actual Total Time": 1.872,
+                "Actual Startup Time": 0.019,
+                "Actual Total Time": 4.949,
                 "Actual Rows": 7101,
                 "Actual Loops": 1,
                 "Output": ["tt3.a"],
@@ -3378,10 +3702,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.274,
+  "Planning": {
+    "Shared Hit Blocks": 3,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.410,
   "Triggers": [
   ],
-  "Execution Time": 6.070
+  "Execution Time": 19.629
 }'),
 (28, '###### Plan 28: TidScan',
  E'{
@@ -3395,8 +3731,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 4.01,
     "Plan Rows": 1,
     "Plan Width": 12,
-    "Actual Startup Time": 0.004,
-    "Actual Total Time": 0.004,
+    "Actual Startup Time": 0.006,
+    "Actual Total Time": 0.007,
     "Actual Rows": 1,
     "Actual Loops": 1,
     "Output": ["a", "b", "c"],
@@ -3412,10 +3748,22 @@ INSERT INTO plans (VALUES
     "Temp Read Blocks": 0,
     "Temp Written Blocks": 0
   },
-  "Planning Time": 0.068,
+  "Planning": {
+    "Shared Hit Blocks": 7,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.126,
   "Triggers": [
   ],
-  "Execution Time": 0.080
+  "Execution Time": 0.171
 }'),
 (29, '###### Plan 29: LockRows',
  '{
@@ -3426,8 +3774,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 313.51,
     "Plan Rows": 50,
     "Plan Width": 10,
-    "Actual Startup Time": 0.247,
-    "Actual Total Time": 3.890,
+    "Actual Startup Time": 0.194,
+    "Actual Total Time": 9.193,
     "Actual Rows": 1001,
     "Actual Loops": 1,
     "Output": ["a", "ctid"],
@@ -3453,8 +3801,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 313.01,
         "Plan Rows": 50,
         "Plan Width": 10,
-        "Actual Startup Time": 0.236,
-        "Actual Total Time": 2.665,
+        "Actual Startup Time": 0.174,
+        "Actual Total Time": 6.703,
         "Actual Rows": 1001,
         "Actual Loops": 1,
         "Output": ["a", "ctid"],
@@ -3473,10 +3821,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.041,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.090,
   "Triggers": [
   ],
-  "Execution Time": 4.146
+  "Execution Time": 9.816
 }'),
 (30, '###### Plan 30: Materialize',
  '{
@@ -3490,8 +3850,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 1150490.52,
     "Plan Rows": 5000,
     "Plan Width": 12,
-    "Actual Startup Time": 5.303,
-    "Actual Total Time": 5.303,
+    "Actual Startup Time": 283.105,
+    "Actual Total Time": 283.171,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Output": ["tt1.a", "tt1.b", "tt1.c"],
@@ -3544,8 +3904,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 155.01,
             "Plan Rows": 10001,
             "Plan Width": 4,
-            "Actual Startup Time": 0.007,
-            "Actual Total Time": 0.007,
+            "Actual Startup Time": 0.042,
+            "Actual Total Time": 0.043,
             "Actual Rows": 1,
             "Actual Loops": 1,
             "Output": ["tt2.b"],
@@ -3564,10 +3924,38 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.058,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.226,
   "Triggers": [
   ],
-  "Execution Time": 5.462
+  "JIT": {
+    "Functions": 6,
+    "Options": {
+      "Inlining": true,
+      "Optimization": true,
+      "Expressions": true,
+      "Deforming": true
+    },
+    "Timing": {
+      "Generation": 3.438,
+      "Inlining": 164.520,
+      "Optimization": 75.727,
+      "Emission": 31.745,
+      "Total": 275.430
+    }
+  },
+  "Execution Time": 324.140
 }'),
 (31, '###### Plan 31: Update on partitioned tables',
  '{
@@ -3582,8 +3970,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 3691.07,
     "Plan Rows": 200006,
     "Plan Width": 18,
-    "Actual Startup Time": 4815.842,
-    "Actual Total Time": 4815.842,
+    "Actual Startup Time": 6593.618,
+    "Actual Total Time": 6593.620,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Target Tables": [
@@ -3595,23 +3983,23 @@ INSERT INTO plans (VALUES
       {
         "Relation Name": "tt1",
         "Schema": "public",
-        "Alias": "tt1"
+        "Alias": "p_1"
       },
       {
         "Relation Name": "tt2",
         "Schema": "public",
-        "Alias": "tt2"
+        "Alias": "p_2"
       },
       {
         "Relation Name": "tt3",
         "Schema": "public",
-        "Alias": "tt3"
+        "Alias": "p_3"
       }
     ],
-    "Shared Hit Blocks": 1563330,
-    "Shared Read Blocks": 2644,
-    "Shared Dirtied Blocks": 2644,
-    "Shared Written Blocks": 0,
+    "Shared Hit Blocks": 1533945,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 1554,
+    "Shared Written Blocks": 1554,
     "Local Hit Blocks": 0,
     "Local Read Blocks": 0,
     "Local Dirtied Blocks": 0,
@@ -3630,8 +4018,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 0.00,
         "Plan Rows": 1,
         "Plan Width": 46,
-        "Actual Startup Time": 0.001,
-        "Actual Total Time": 0.001,
+        "Actual Startup Time": 0.005,
+        "Actual Total Time": 0.005,
         "Actual Rows": 0,
         "Actual Loops": 1,
         "Output": ["p.a", "(p.b + 1)", "p.c", "p.ctid"],
@@ -3652,16 +4040,16 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Relation Name": "tt1",
         "Schema": "public",
-        "Alias": "tt1",
+        "Alias": "p_1",
         "Startup Cost": 0.00,
         "Total Cost": 288.01,
         "Plan Rows": 10001,
         "Plan Width": 18,
-        "Actual Startup Time": 0.104,
-        "Actual Total Time": 8.404,
+        "Actual Startup Time": 0.194,
+        "Actual Total Time": 19.441,
         "Actual Rows": 10001,
         "Actual Loops": 1,
-        "Output": ["tt1.a", "(tt1.b + 1)", "tt1.c", "tt1.ctid"],
+        "Output": ["p_1.a", "(p_1.b + 1)", "p_1.c", "p_1.ctid"],
         "Shared Hit Blocks": 163,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
@@ -3679,16 +4067,16 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Relation Name": "tt2",
         "Schema": "public",
-        "Alias": "tt2",
+        "Alias": "p_2",
         "Startup Cost": 0.00,
         "Total Cost": 180.01,
         "Plan Rows": 10001,
         "Plan Width": 18,
-        "Actual Startup Time": 0.010,
-        "Actual Total Time": 5.678,
+        "Actual Startup Time": 0.036,
+        "Actual Total Time": 12.870,
         "Actual Rows": 10001,
         "Actual Loops": 1,
-        "Output": ["tt2.a", "(tt2.b + 1)", "tt2.c", "tt2.ctid"],
+        "Output": ["p_2.a", "(p_2.b + 1)", "p_2.c", "p_2.ctid"],
         "Shared Hit Blocks": 55,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
@@ -3706,16 +4094,16 @@ INSERT INTO plans (VALUES
         "Parallel Aware": false,
         "Relation Name": "tt3",
         "Schema": "public",
-        "Alias": "tt3",
+        "Alias": "p_3",
         "Startup Cost": 0.00,
         "Total Cost": 3223.04,
         "Plan Rows": 180003,
         "Plan Width": 18,
-        "Actual Startup Time": 0.010,
-        "Actual Total Time": 113.138,
+        "Actual Startup Time": 0.023,
+        "Actual Total Time": 215.144,
         "Actual Rows": 180003,
         "Actual Loops": 1,
-        "Output": ["tt3.a", "(tt3.b + 1)", "tt3.c", "tt3.ctid"],
+        "Output": ["p_3.a", "(p_3.b + 1)", "p_3.c", "p_3.ctid"],
         "Shared Hit Blocks": 973,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
@@ -3729,22 +4117,34 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.174,
+  "Planning": {
+    "Shared Hit Blocks": 10,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.837,
   "Triggers": [
     {
       "Trigger Name": "tt1_trig_1",
       "Relation": "tt1",
-      "Time": 96.575,
+      "Time": 89.516,
       "Calls": 10001
     },
     {
       "Trigger Name": "tt1_trig_2",
       "Relation": "tt1",
-      "Time": 69.629,
+      "Time": 69.948,
       "Calls": 10001
     }
   ],
-  "Execution Time": 4816.260
+  "Execution Time": 6594.881
 }'),
 (32, '###### Plan 32: Delete on partitioned tables',
  '{
@@ -3759,8 +4159,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 32.80,
     "Plan Rows": 6,
     "Plan Width": 6,
-    "Actual Startup Time": 0.499,
-    "Actual Total Time": 0.499,
+    "Actual Startup Time": 0.580,
+    "Actual Total Time": 0.581,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Target Tables": [
@@ -3772,17 +4172,17 @@ INSERT INTO plans (VALUES
       {
         "Relation Name": "tt1",
         "Schema": "public",
-        "Alias": "tt1"
+        "Alias": "p_1"
       },
       {
         "Relation Name": "tt2",
         "Schema": "public",
-        "Alias": "tt2"
+        "Alias": "p_2"
       },
       {
         "Relation Name": "tt3",
         "Schema": "public",
-        "Alias": "tt3"
+        "Alias": "p_3"
       }
     ],
     "Shared Hit Blocks": 18,
@@ -3807,8 +4207,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 0.00,
         "Plan Rows": 1,
         "Plan Width": 6,
-        "Actual Startup Time": 0.005,
-        "Actual Total Time": 0.005,
+        "Actual Startup Time": 0.009,
+        "Actual Total Time": 0.009,
         "Actual Rows": 0,
         "Actual Loops": 1,
         "Output": ["p.ctid"],
@@ -3833,17 +4233,17 @@ INSERT INTO plans (VALUES
         "Index Name": "i_tt1",
         "Relation Name": "tt1",
         "Schema": "public",
-        "Alias": "tt1",
+        "Alias": "p_1",
         "Startup Cost": 0.29,
         "Total Cost": 8.30,
         "Plan Rows": 1,
         "Plan Width": 6,
-        "Actual Startup Time": 0.144,
-        "Actual Total Time": 0.239,
+        "Actual Startup Time": 0.326,
+        "Actual Total Time": 0.335,
         "Actual Rows": 1,
         "Actual Loops": 1,
-        "Output": ["tt1.ctid"],
-        "Index Cond": "(tt1.a = 100)",
+        "Output": ["p_1.ctid"],
+        "Index Cond": "(p_1.a = 100)",
         "Rows Removed by Index Recheck": 0,
         "Shared Hit Blocks": 5,
         "Shared Read Blocks": 0,
@@ -3864,17 +4264,17 @@ INSERT INTO plans (VALUES
         "Index Name": "i_tt2",
         "Relation Name": "tt2",
         "Schema": "public",
-        "Alias": "tt2",
+        "Alias": "p_2",
         "Startup Cost": 0.29,
         "Total Cost": 8.30,
         "Plan Rows": 1,
         "Plan Width": 6,
-        "Actual Startup Time": 0.011,
-        "Actual Total Time": 0.011,
+        "Actual Startup Time": 0.015,
+        "Actual Total Time": 0.015,
         "Actual Rows": 0,
         "Actual Loops": 1,
-        "Output": ["tt2.ctid"],
-        "Index Cond": "(tt2.a = 100)",
+        "Output": ["p_2.ctid"],
+        "Index Cond": "(p_2.a = 100)",
         "Rows Removed by Index Recheck": 0,
         "Shared Hit Blocks": 2,
         "Shared Read Blocks": 0,
@@ -3895,17 +4295,17 @@ INSERT INTO plans (VALUES
         "Index Name": "i_tt3_a",
         "Relation Name": "tt3",
         "Schema": "public",
-        "Alias": "tt3",
+        "Alias": "p_3",
         "Startup Cost": 0.42,
         "Total Cost": 16.20,
         "Plan Rows": 3,
         "Plan Width": 6,
-        "Actual Startup Time": 0.016,
-        "Actual Total Time": 0.216,
+        "Actual Startup Time": 0.160,
+        "Actual Total Time": 0.175,
         "Actual Rows": 2,
         "Actual Loops": 1,
-        "Output": ["tt3.ctid"],
-        "Index Cond": "(tt3.a = 100)",
+        "Output": ["p_3.ctid"],
+        "Index Cond": "(p_3.a = 100)",
         "Rows Removed by Index Recheck": 0,
         "Shared Hit Blocks": 8,
         "Shared Read Blocks": 0,
@@ -3920,10 +4320,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.452,
+  "Planning": {
+    "Shared Hit Blocks": 2,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.577,
   "Triggers": [
   ],
-  "Execution Time": 1.191
+  "Execution Time": 1.330
 }'),
 (33, '###### Plan 33: ON CONFLICT',
  '{
@@ -3938,8 +4350,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 0.01,
     "Plan Rows": 1,
     "Plan Width": 8,
-    "Actual Startup Time": 0.068,
-    "Actual Total Time": 0.068,
+    "Actual Startup Time": 0.088,
+    "Actual Total Time": 0.089,
     "Actual Rows": 0,
     "Actual Loops": 1,
     "Conflict Resolution": "UPDATE",
@@ -3965,8 +4377,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 0.01,
         "Plan Rows": 1,
         "Plan Width": 8,
-        "Actual Startup Time": 0.002,
-        "Actual Total Time": 0.002,
+        "Actual Startup Time": 0.003,
+        "Actual Total Time": 0.004,
         "Actual Rows": 1,
         "Actual Loops": 1,
         "Output": ["1", "1"],
@@ -3983,10 +4395,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.107,
+  "Planning": {
+    "Shared Hit Blocks": 8,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.133,
   "Triggers": [
   ],
-  "Execution Time": 0.373
+  "Execution Time": 0.533
 }'),
 (34, '###### Plan 34: GROUP BY',
  '{
@@ -3999,12 +4423,16 @@ INSERT INTO plans (VALUES
     "Total Cost": 583.13,
     "Plan Rows": 13314,
     "Plan Width": 40,
-    "Actual Startup Time": 23.255,
-    "Actual Total Time": 32.379,
+    "Actual Startup Time": 25.192,
+    "Actual Total Time": 34.691,
     "Actual Rows": 10000,
     "Actual Loops": 1,
     "Output": ["a", "b", "max(c)"],
     "Group Key": ["tt1.a", "tt1.b"],
+    "Planned Partitions": 0,
+    "HashAgg Batches": 1,
+    "Peak Memory Usage": 1681,
+    "Disk Usage": 0,
     "Shared Hit Blocks": 217,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
@@ -4027,8 +4455,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 350.14,
         "Plan Rows": 13314,
         "Plan Width": 12,
-        "Actual Startup Time": 0.238,
-        "Actual Total Time": 9.547,
+        "Actual Startup Time": 0.271,
+        "Actual Total Time": 9.164,
         "Actual Rows": 10000,
         "Actual Loops": 1,
         "Output": ["a", "b", "c"],
@@ -4045,10 +4473,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.148,
+  "Planning": {
+    "Shared Hit Blocks": 4,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.184,
   "Triggers": [
   ],
-  "Execution Time": 35.078
+  "Execution Time": 37.008
 }'),
 (35, '###### Plan 35: GROUPING SETS',
  '{
@@ -4057,33 +4497,33 @@ INSERT INTO plans (VALUES
     "Strategy": "Mixed",
     "Partial Mode": "Simple",
     "Parallel Aware": false,
-    "Startup Cost": 0.00,
-    "Total Cost": 782.86,
+    "Startup Cost": 0.29,
+    "Total Cost": 1155.42,
     "Plan Rows": 26629,
     "Plan Width": 40,
-    "Actual Startup Time": 24.354,
-    "Actual Total Time": 39.455,
+    "Actual Startup Time": 0.078,
+    "Actual Total Time": 174.931,
     "Actual Rows": 20001,
     "Actual Loops": 1,
     "Output": ["a", "b", "max(c)"],
     "Grouping Sets": [
       {
         "Hash Keys": [
-          ["tt1.a"]
-        ]
-      },
-      {
-        "Hash Keys": [
           ["tt1.b"]
         ]
       },
       {
         "Group Keys": [
+          ["tt1.a"],
           []
         ]
       }
     ],
-    "Shared Hit Blocks": 217,
+    "Planned Partitions": 0,
+    "HashAgg Batches": 1,
+    "Peak Memory Usage": 1681,
+    "Disk Usage": 0,
+    "Shared Hit Blocks": 30354,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
@@ -4095,22 +4535,24 @@ INSERT INTO plans (VALUES
     "Temp Written Blocks": 0,
     "Plans": [
       {
-        "Node Type": "Seq Scan",
+        "Node Type": "Index Scan",
         "Parent Relationship": "Outer",
         "Parallel Aware": false,
+        "Scan Direction": "Forward",
+        "Index Name": "i_tt1",
         "Relation Name": "tt1",
         "Schema": "public",
         "Alias": "tt1",
-        "Startup Cost": 0.00,
-        "Total Cost": 350.14,
+        "Startup Cost": 0.29,
+        "Total Cost": 755.99,
         "Plan Rows": 13314,
         "Plan Width": 12,
-        "Actual Startup Time": 0.228,
-        "Actual Total Time": 3.187,
+        "Actual Startup Time": 0.057,
+        "Actual Total Time": 121.202,
         "Actual Rows": 10000,
         "Actual Loops": 1,
         "Output": ["a", "b", "c"],
-        "Shared Hit Blocks": 217,
+        "Shared Hit Blocks": 30354,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -4123,10 +4565,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.160,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.187,
   "Triggers": [
   ],
-  "Execution Time": 44.202
+  "Execution Time": 179.709
 }'),
 (36, '###### Plan 36: Table sample',
  E'{
@@ -4140,8 +4594,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 9.33,
     "Plan Rows": 133,
     "Plan Width": 12,
-    "Actual Startup Time": 0.020,
-    "Actual Total Time": 0.071,
+    "Actual Startup Time": 0.030,
+    "Actual Total Time": 0.122,
     "Actual Rows": 185,
     "Actual Loops": 1,
     "Output": ["a", "b", "c"],
@@ -4159,10 +4613,22 @@ INSERT INTO plans (VALUES
     "Temp Read Blocks": 0,
     "Temp Written Blocks": 0
   },
-  "Planning Time": 0.074,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.081,
   "Triggers": [
   ],
-  "Execution Time": 0.236
+  "Execution Time": 0.265
 }'),
 (37, '###### Plan 37: Project Set',
  E'{
@@ -4175,8 +4641,8 @@ INSERT INTO plans (VALUES
     "Total Cost": 1.00,
     "Plan Rows": 100,
     "Plan Width": 32,
-    "Actual Startup Time": 0.098,
-    "Actual Total Time": 0.098,
+    "Actual Startup Time": 0.069,
+    "Actual Total Time": 0.070,
     "Actual Rows": 2,
     "Actual Loops": 1,
     "Output": ["name"],
@@ -4192,24 +4658,182 @@ INSERT INTO plans (VALUES
     "Temp Read Blocks": 0,
     "Temp Written Blocks": 0
   },
-  "Planning Time": 0.025,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.026,
   "Triggers": [
   ],
-  "Execution Time": 0.216
+  "Execution Time": 0.314
 }'),
-(38, '###### Plan 38: Named Tuplestore Scan',
+(38, '###### Plan 38: Incremental Sort',
+ '{
+  "Plan": {
+    "Node Type": "Limit",
+    "Parallel Aware": false,
+    "Startup Cost": 67.50,
+    "Total Cost": 69.11,
+    "Plan Rows": 31,
+    "Plan Width": 8,
+    "Actual Startup Time": 2.004,
+    "Actual Total Time": 2.021,
+    "Actual Rows": 31,
+    "Actual Loops": 1,
+    "Output": ["(((i.i / 100) + 1))", "((i.i + 1))"],
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0,
+    "Plans": [
+      {
+        "Node Type": "Incremental Sort",
+        "Parent Relationship": "Outer",
+        "Parallel Aware": false,
+        "Startup Cost": 67.50,
+        "Total Cost": 119.38,
+        "Plan Rows": 1000,
+        "Plan Width": 8,
+        "Actual Startup Time": 2.003,
+        "Actual Total Time": 2.010,
+        "Actual Rows": 31,
+        "Actual Loops": 1,
+        "Output": ["(((i.i / 100) + 1))", "((i.i + 1))"],
+        "Sort Key": ["(((i.i / 100) + 1))", "((i.i + 1))"],
+        "Presorted Key": ["(((i.i / 100) + 1))"],
+        "Full-sort Groups": {
+          "Group Count": 1,
+          "Sort Methods Used": ["top-N heapsort"],
+          "Sort Space Memory": {
+            "Average Sort Space Used": 26,
+            "Peak Sort Space Used": 26
+          }
+        },
+        "Pre-sorted Groups": {
+          "Group Count": 1,
+          "Sort Methods Used": ["top-N heapsort"],
+          "Sort Space Memory": {
+            "Average Sort Space Used": 26,
+            "Peak Sort Space Used": 26
+          }
+        },
+        "Shared Hit Blocks": 0,
+        "Shared Read Blocks": 0,
+        "Shared Dirtied Blocks": 0,
+        "Shared Written Blocks": 0,
+        "Local Hit Blocks": 0,
+        "Local Read Blocks": 0,
+        "Local Dirtied Blocks": 0,
+        "Local Written Blocks": 0,
+        "Temp Read Blocks": 0,
+        "Temp Written Blocks": 0,
+        "Plans": [
+          {
+            "Node Type": "Sort",
+            "Parent Relationship": "Outer",
+            "Parallel Aware": false,
+            "Startup Cost": 67.33,
+            "Total Cost": 69.83,
+            "Plan Rows": 1000,
+            "Plan Width": 8,
+            "Actual Startup Time": 1.760,
+            "Actual Total Time": 1.779,
+            "Actual Rows": 101,
+            "Actual Loops": 1,
+            "Output": ["(((i.i / 100) + 1))", "((i.i + 1))"],
+            "Sort Key": ["(((i.i / 100) + 1))"],
+            "Sort Method": "quicksort",
+            "Sort Space Used": 79,
+            "Sort Space Type": "Memory",
+            "Shared Hit Blocks": 0,
+            "Shared Read Blocks": 0,
+            "Shared Dirtied Blocks": 0,
+            "Shared Written Blocks": 0,
+            "Local Hit Blocks": 0,
+            "Local Read Blocks": 0,
+            "Local Dirtied Blocks": 0,
+            "Local Written Blocks": 0,
+            "Temp Read Blocks": 0,
+            "Temp Written Blocks": 0,
+            "Plans": [
+              {
+                "Node Type": "Function Scan",
+                "Parent Relationship": "Outer",
+                "Parallel Aware": false,
+                "Function Name": "generate_series",
+                "Schema": "pg_catalog",
+                "Alias": "i",
+                "Startup Cost": 0.00,
+                "Total Cost": 17.50,
+                "Plan Rows": 1000,
+                "Plan Width": 8,
+                "Actual Startup Time": 0.287,
+                "Actual Total Time": 1.104,
+                "Actual Rows": 1000,
+                "Actual Loops": 1,
+                "Output": ["((i.i / 100) + 1)", "(i.i + 1)"],
+                "Function Call": "generate_series(0, 999)",
+                "Shared Hit Blocks": 0,
+                "Shared Read Blocks": 0,
+                "Shared Dirtied Blocks": 0,
+                "Shared Written Blocks": 0,
+                "Local Hit Blocks": 0,
+                "Local Read Blocks": 0,
+                "Local Dirtied Blocks": 0,
+                "Local Written Blocks": 0,
+                "Temp Read Blocks": 0,
+                "Temp Written Blocks": 0
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.162,
+  "Triggers": [
+  ],
+  "Execution Time": 3.038
+}'),
+(39, '###### Plan 39: Named Tuplestore Scan',
  '{
   "Plan": {
     "Node Type": "Aggregate",
     "Strategy": "Plain",
     "Partial Mode": "Simple",
     "Parallel Aware": false,
-    "Startup Cost": 0.00,
-    "Total Cost": 0.01,
+    "Startup Cost": 0.02,
+    "Total Cost": 0.03,
     "Plan Rows": 1,
     "Plan Width": 8,
-    "Actual Startup Time": 0.005,
-    "Actual Total Time": 0.005,
+    "Actual Startup Time": 0.007,
+    "Actual Total Time": 0.008,
     "Actual Rows": 1,
     "Actual Loops": 1,
     "Shared Hit Blocks": 0,
@@ -4228,11 +4852,11 @@ INSERT INTO plans (VALUES
         "Parent Relationship": "Outer",
         "Parallel Aware": false,
         "Startup Cost": 0.00,
-        "Total Cost": 0.00,
+        "Total Cost": 0.02,
         "Plan Rows": 1,
         "Plan Width": 4,
         "Actual Startup Time": 0.001,
-        "Actual Total Time": 0.001,
+        "Actual Total Time": 0.002,
         "Actual Rows": 1,
         "Actual Loops": 1,
         "Shared Hit Blocks": 0,
@@ -4249,7 +4873,7 @@ INSERT INTO plans (VALUES
     ]
   }
 }'),
-(39, '###### Plan 39: Parallel Seq Scan',
+(40, '###### Plan 40: Parallel Seq Scan',
  '{
   "Plan": {
     "Node Type": "Gather",
@@ -4258,18 +4882,18 @@ INSERT INTO plans (VALUES
     "Total Cost": 21845.68,
     "Plan Rows": 1814322,
     "Plan Width": 36,
-    "Actual Startup Time": 0.443,
-    "Actual Total Time": 110.055,
+    "Actual Startup Time": 1.231,
+    "Actual Total Time": 147.766,
     "Actual Rows": 100000,
     "Actual Loops": 1,
     "Output": ["a", "b"],
     "Workers Planned": 2,
     "Workers Launched": 2,
     "Single Copy": false,
-    "Shared Hit Blocks": 11376,
-    "Shared Read Blocks": 3020,
-    "Shared Dirtied Blocks": 3025,
-    "Shared Written Blocks": 3013,
+    "Shared Hit Blocks": 14286,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
     "Local Hit Blocks": 0,
     "Local Read Blocks": 0,
     "Local Dirtied Blocks": 0,
@@ -4288,15 +4912,15 @@ INSERT INTO plans (VALUES
         "Total Cost": 21845.68,
         "Plan Rows": 755968,
         "Plan Width": 36,
-        "Actual Startup Time": 0.042,
-        "Actual Total Time": 49.223,
+        "Actual Startup Time": 0.023,
+        "Actual Total Time": 45.673,
         "Actual Rows": 33333,
         "Actual Loops": 3,
         "Output": ["a", "b"],
-        "Shared Hit Blocks": 11271,
-        "Shared Read Blocks": 3015,
-        "Shared Dirtied Blocks": 3025,
-        "Shared Written Blocks": 3009,
+        "Shared Hit Blocks": 14286,
+        "Shared Read Blocks": 0,
+        "Shared Dirtied Blocks": 0,
+        "Shared Written Blocks": 0,
         "Local Hit Blocks": 0,
         "Local Read Blocks": 0,
         "Local Dirtied Blocks": 0,
@@ -4306,14 +4930,14 @@ INSERT INTO plans (VALUES
         "Workers": [
           {
             "Worker Number": 0,
-            "Actual Startup Time": 0.041,
-            "Actual Total Time": 64.126,
-            "Actual Rows": 43328,
+            "Actual Startup Time": 0.027,
+            "Actual Total Time": 45.602,
+            "Actual Rows": 28364,
             "Actual Loops": 1,
-            "Shared Hit Blocks": 4998,
-            "Shared Read Blocks": 1192,
-            "Shared Dirtied Blocks": 1192,
-            "Shared Written Blocks": 1190,
+            "Shared Hit Blocks": 4052,
+            "Shared Read Blocks": 0,
+            "Shared Dirtied Blocks": 0,
+            "Shared Written Blocks": 0,
             "Local Hit Blocks": 0,
             "Local Read Blocks": 0,
             "Local Dirtied Blocks": 0,
@@ -4323,14 +4947,14 @@ INSERT INTO plans (VALUES
           },
           {
             "Worker Number": 1,
-            "Actual Startup Time": 0.035,
-            "Actual Total Time": 64.204,
-            "Actual Rows": 43204,
+            "Actual Startup Time": 0.029,
+            "Actual Total Time": 45.180,
+            "Actual Rows": 28040,
             "Actual Loops": 1,
-            "Shared Hit Blocks": 5000,
-            "Shared Read Blocks": 1172,
-            "Shared Dirtied Blocks": 1172,
-            "Shared Written Blocks": 1169,
+            "Shared Hit Blocks": 4006,
+            "Shared Read Blocks": 0,
+            "Shared Dirtied Blocks": 0,
+            "Shared Written Blocks": 0,
             "Local Hit Blocks": 0,
             "Local Read Blocks": 0,
             "Local Dirtied Blocks": 0,
@@ -4342,30 +4966,42 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.134,
+  "Planning": {
+    "Shared Hit Blocks": 3,
+    "Shared Read Blocks": 3,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.426,
   "Triggers": [
   ],
-  "Execution Time": 125.149
+  "Execution Time": 169.896
 }'),
-(40, '###### Plan 40: Parallel Index Scan',
+(41, '###### Plan 41: Parallel Index Scan',
  '{
   "Plan": {
     "Node Type": "Gather",
     "Parallel Aware": false,
     "Startup Cost": 0.29,
-    "Total Cost": 16.06,
-    "Plan Rows": 133,
+    "Total Cost": 12.05,
+    "Plan Rows": 132,
     "Plan Width": 12,
-    "Actual Startup Time": 0.243,
-    "Actual Total Time": 8.954,
+    "Actual Startup Time": 0.595,
+    "Actual Total Time": 54.680,
     "Actual Rows": 100,
     "Actual Loops": 1,
     "Output": ["a", "b", "c"],
     "Workers Planned": 1,
     "Workers Launched": 1,
     "Single Copy": false,
-    "Shared Hit Blocks": 284,
-    "Shared Read Blocks": 6,
+    "Shared Hit Blocks": 368,
+    "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
     "Local Hit Blocks": 0,
@@ -4385,17 +5021,17 @@ INSERT INTO plans (VALUES
         "Schema": "public",
         "Alias": "tt1",
         "Startup Cost": 0.29,
-        "Total Cost": 16.06,
+        "Total Cost": 12.05,
         "Plan Rows": 78,
         "Plan Width": 12,
-        "Actual Startup Time": 0.011,
-        "Actual Total Time": 0.096,
+        "Actual Startup Time": 0.049,
+        "Actual Total Time": 1.496,
         "Actual Rows": 50,
         "Actual Loops": 2,
         "Output": ["a", "b", "c"],
         "Index Cond": "(tt1.a < 100)",
         "Rows Removed by Index Recheck": 0,
-        "Shared Hit Blocks": 166,
+        "Shared Hit Blocks": 368,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -4408,8 +5044,8 @@ INSERT INTO plans (VALUES
         "Workers": [
           {
             "Worker Number": 0,
-            "Actual Startup Time": 0.002,
-            "Actual Total Time": 0.002,
+            "Actual Startup Time": 0.003,
+            "Actual Total Time": 0.003,
             "Actual Rows": 0,
             "Actual Loops": 1,
             "Shared Hit Blocks": 0,
@@ -4427,12 +5063,24 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.152,
+  "Planning": {
+    "Shared Hit Blocks": 4,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.437,
   "Triggers": [
   ],
-  "Execution Time": 9.620
+  "Execution Time": 55.017
 }'),
-(41, '###### Plan 41: Gather Merge',
+(42, '###### Plan 42: Gather Merge',
  '{
   "Plan": {
     "Node Type": "Gather Merge",
@@ -4441,14 +5089,14 @@ INSERT INTO plans (VALUES
     "Total Cost": 747.07,
     "Plan Rows": 11096,
     "Plan Width": 4,
-    "Actual Startup Time": 8.062,
-    "Actual Total Time": 12.057,
+    "Actual Startup Time": 52.306,
+    "Actual Total Time": 58.163,
     "Actual Rows": 10000,
     "Actual Loops": 1,
     "Output": ["a"],
     "Workers Planned": 2,
     "Workers Launched": 2,
-    "Shared Hit Blocks": 217,
+    "Shared Hit Blocks": 331,
     "Shared Read Blocks": 0,
     "Shared Dirtied Blocks": 0,
     "Shared Written Blocks": 0,
@@ -4467,8 +5115,8 @@ INSERT INTO plans (VALUES
         "Total Cost": 631.37,
         "Plan Rows": 5548,
         "Plan Width": 4,
-        "Actual Startup Time": 2.169,
-        "Actual Total Time": 2.511,
+        "Actual Startup Time": 4.948,
+        "Actual Total Time": 5.669,
         "Actual Rows": 3333,
         "Actual Loops": 3,
         "Output": ["a"],
@@ -4476,7 +5124,7 @@ INSERT INTO plans (VALUES
         "Sort Method": "quicksort",
         "Sort Space Used": 931,
         "Sort Space Type": "Memory",
-        "Shared Hit Blocks": 313,
+        "Shared Hit Blocks": 331,
         "Shared Read Blocks": 0,
         "Shared Dirtied Blocks": 0,
         "Shared Written Blocks": 0,
@@ -4489,11 +5137,14 @@ INSERT INTO plans (VALUES
         "Workers": [
           {
             "Worker Number": 0,
-            "Actual Startup Time": 0.247,
-            "Actual Total Time": 0.247,
+            "Actual Startup Time": 0.443,
+            "Actual Total Time": 0.443,
             "Actual Rows": 0,
             "Actual Loops": 1,
-            "Shared Hit Blocks": 48,
+            "Sort Method": "quicksort",
+            "Sort Space Used": 25,
+            "Sort Space Type": "Memory",
+            "Shared Hit Blocks": 57,
             "Shared Read Blocks": 0,
             "Shared Dirtied Blocks": 0,
             "Shared Written Blocks": 0,
@@ -4506,11 +5157,14 @@ INSERT INTO plans (VALUES
           },
           {
             "Worker Number": 1,
-            "Actual Startup Time": 0.247,
-            "Actual Total Time": 0.247,
+            "Actual Startup Time": 0.443,
+            "Actual Total Time": 0.444,
             "Actual Rows": 0,
             "Actual Loops": 1,
-            "Shared Hit Blocks": 48,
+            "Sort Method": "quicksort",
+            "Sort Space Used": 25,
+            "Sort Space Type": "Memory",
+            "Shared Hit Blocks": 57,
             "Shared Read Blocks": 0,
             "Shared Dirtied Blocks": 0,
             "Shared Written Blocks": 0,
@@ -4534,8 +5188,8 @@ INSERT INTO plans (VALUES
             "Total Cost": 272.48,
             "Plan Rows": 5548,
             "Plan Width": 4,
-            "Actual Startup Time": 0.056,
-            "Actual Total Time": 0.982,
+            "Actual Startup Time": 0.108,
+            "Actual Total Time": 2.529,
             "Actual Rows": 3333,
             "Actual Loops": 3,
             "Output": ["a"],
@@ -4552,8 +5206,8 @@ INSERT INTO plans (VALUES
             "Workers": [
               {
                 "Worker Number": 0,
-                "Actual Startup Time": 0.001,
-                "Actual Total Time": 0.001,
+                "Actual Startup Time": 0.002,
+                "Actual Total Time": 0.002,
                 "Actual Rows": 0,
                 "Actual Loops": 1,
                 "Shared Hit Blocks": 0,
@@ -4569,8 +5223,8 @@ INSERT INTO plans (VALUES
               },
               {
                 "Worker Number": 1,
-                "Actual Startup Time": 0.001,
-                "Actual Total Time": 0.001,
+                "Actual Startup Time": 0.002,
+                "Actual Total Time": 0.002,
                 "Actual Rows": 0,
                 "Actual Loops": 1,
                 "Shared Hit Blocks": 0,
@@ -4590,10 +5244,22 @@ INSERT INTO plans (VALUES
       }
     ]
   },
-  "Planning Time": 0.079,
+  "Planning": {
+    "Shared Hit Blocks": 0,
+    "Shared Read Blocks": 0,
+    "Shared Dirtied Blocks": 0,
+    "Shared Written Blocks": 0,
+    "Local Hit Blocks": 0,
+    "Local Read Blocks": 0,
+    "Local Dirtied Blocks": 0,
+    "Local Written Blocks": 0,
+    "Temp Read Blocks": 0,
+    "Temp Written Blocks": 0
+  },
+  "Planning Time": 0.109,
   "Triggers": [
   ],
-  "Execution Time": 13.579
+  "Execution Time": 61.122
 }'));
 
 \pset pager