digraph { graph [rankdir = "LR", label = "Plan Tree: SELECT T1.C1, T2.C2 FROM T1 JOIN T2 ON (T1.C3 = T2.C3);"] node [shape=record,style=filled,fillcolor=gray95] edge [arrowtail=empty] 35[label = " Alias (35)|aliasname: t1| colnames: "] 37[label = " String (37)|c1"] 36[label = " List (36)|<1> [0]|<2> [1]|<3> [2]"] 38[label = " String (38)|c2"] 39[label = " String (39)|c3"] 41[label = " Alias (41)|aliasname: t2| colnames: "] 43[label = " String (43)|c1"] 42[label = " List (42)|<1> [0]|<2> [1]|<3> [2]"] 44[label = " String (44)|c2"] 45[label = " String (45)|c3"] 49[label = " String (49)|c1"] 50[label = " String (50)|c2"] 51[label = " String (51)|c3"] 52[label = " String (52)|c1"] 53[label = " String (53)|c2"] 54[label = " String (54)|c3"] 47[label = " Alias (47)|aliasname: unnamed_join| colnames: "] 48[label = " List (48)|<1> [0]|<2> [1]|<3> [2]|<4> [3]|<5> [4]|<6> [5]"] 8[label = " SeqScan (8)|startup_cost: 0.00|total_cost: 155.01|plan_rows: 10001|plan_width: 8| targetlist: |extParam: (b)|allParam: (b)|scanrelid: 1"] 22[label = " SeqScan (22)|startup_cost: 0.00|total_cost: 155.01|plan_rows: 10001|plan_width: 8| targetlist: |extParam: (b)|allParam: (b)|scanrelid: 2"] 16[label = " Hash (16)|startup_cost: 155.01|total_cost: 155.01|plan_rows: 10001|plan_width: 8| targetlist: | lefttree: |extParam: (b)|allParam: (b)|skewTable: 16833|skewColumn: 3|skewInherit: false|skewColType: 23|skewColTypmod: -1"] 2[label = " HashJoin (2)|startup_cost: 280.02|total_cost: 572.55|plan_rows: 10001|plan_width: 8| targetlist: | lefttree: | righttree: |extParam: (b)|allParam: (b)|jointype: JOIN_INNER| hashclauses: "] 34[label = " RangeTblEntry(RTE) (34)|rtekind: RTE_RELATION|relid: 16833|relkind: 114| eref: |lateral: false|inh: false|inFromCl: true|requiredPerms: 2|selectedCols: (b 9 11)|insertedCols: (b)|updatedCols: (b)"] 33[label = " List (33)|<1> [0]|<2> [1]|<3> [2]"] 55[label = " OidList (55)|16833 16836 "] 40[label = " RangeTblEntry(RTE) (40)|rtekind: RTE_RELATION|relid: 16836|relkind: 114| eref: |lateral: false|inh: false|inFromCl: true|requiredPerms: 2|selectedCols: (b 10 11)|insertedCols: (b)|updatedCols: (b)"] 46[label = " RangeTblEntry(RTE) (46)|rtekind: RTE_JOIN|jointype: JOIN_INNER| eref: |lateral: false|inh: false|inFromCl: true|requiredPerms: 0|selectedCols: (b)|insertedCols: (b)|updatedCols: (b)"] 1[label = " PlannedStmt (1)|commandType: CMD_SELECT|queryId: 0|hasReturning: false|hasModifyingCTE: false|canSetTag: true|transientPlan: false| planTree: | rtable: |rewindPlanIDs: (b)| relationOids: |nParamExec: 0|hasRowSecurity: false"] 35:colnames -> 36:head [headlabel = "35", taillabel = "36"] 36:1 -> 37:head [headlabel = "36", taillabel = "37"] 36:2 -> 38:head [headlabel = "36", taillabel = "38"] 36:3 -> 39:head [headlabel = "36", taillabel = "39"] 41:colnames -> 42:head [headlabel = "41", taillabel = "42"] 42:1 -> 43:head [headlabel = "42", taillabel = "43"] 42:2 -> 44:head [headlabel = "42", taillabel = "44"] 42:3 -> 45:head [headlabel = "42", taillabel = "45"] 47:colnames -> 48:head [headlabel = "47", taillabel = "48"] 48:1 -> 49:head [headlabel = "48", taillabel = "49"] 48:2 -> 50:head [headlabel = "48", taillabel = "50"] 48:3 -> 51:head [headlabel = "48", taillabel = "51"] 48:4 -> 52:head [headlabel = "48", taillabel = "52"] 48:5 -> 53:head [headlabel = "48", taillabel = "53"] 48:6 -> 54:head [headlabel = "48", taillabel = "54"] 8:targetlist -> 9:head [headlabel = "8", taillabel = "9"] 22:targetlist -> 23:head [headlabel = "22", taillabel = "23"] 16:lefttree -> 22:head [headlabel = "16", taillabel = "22"] 16:targetlist -> 17:head [headlabel = "16", taillabel = "17"] 2:lefttree -> 8:head [headlabel = "2", taillabel = "8"] 2:righttree -> 16:head [headlabel = "2", taillabel = "16"] 2:hashclauses -> 28:head [headlabel = "2", taillabel = "28"] 2:targetlist -> 3:head [headlabel = "2", taillabel = "3"] 34:eref -> 35:head [headlabel = "34", taillabel = "35"] 33:1 -> 34:head [headlabel = "33", taillabel = "34"] 33:2 -> 40:head [headlabel = "33", taillabel = "40"] 33:3 -> 46:head [headlabel = "33", taillabel = "46"] 40:eref -> 41:head [headlabel = "40", taillabel = "41"] 46:eref -> 47:head [headlabel = "46", taillabel = "47"] 1:planTree -> 2:head [headlabel = "1", taillabel = "2"] 1:rtable -> 33:head [headlabel = "1", taillabel = "33"] 1:relationOids -> 55:head [headlabel = "1", taillabel = "55"] subgraph cluster_0 { label = "Target List"; 11[label = " Var (11)|varno: 1|varattno: 1|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 1|varoattno: 1"] 10[label = " TargetEntry (10)| expr: |resno: 1|resjunk: false"] 9[label = " List (9)|<1> [0]|<2> [1]|<3> [2]"] 13[label = " Var (13)|varno: 1|varattno: 2|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 1|varoattno: 2"] 12[label = " TargetEntry (12)| expr: |resno: 2|resjunk: false"] 15[label = " Var (15)|varno: 1|varattno: 3|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 1|varoattno: 3"] 14[label = " TargetEntry (14)| expr: |resno: 3|resjunk: false"] 10:expr -> 11:head [headlabel = "10", taillabel = "11"] 9:1 -> 10:head [headlabel = "9", taillabel = "10"] 9:2 -> 12:head [headlabel = "9", taillabel = "12"] 9:3 -> 14:head [headlabel = "9", taillabel = "14"] 12:expr -> 13:head [headlabel = "12", taillabel = "13"] 14:expr -> 15:head [headlabel = "14", taillabel = "15"] } subgraph cluster_1 { label = "Target List"; 25[label = " Var (25)|varno: 2|varattno: 2|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 2|varoattno: 2|location: 14"] 24[label = " TargetEntry (24)| expr: |resno: 1|resjunk: false"] 23[label = " List (23)|<1> [0]|<2> [1]"] 27[label = " Var (27)|varno: 2|varattno: 3|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 2|varoattno: 3|location: 48"] 26[label = " TargetEntry (26)| expr: |resno: 2|resjunk: false"] 24:expr -> 25:head [headlabel = "24", taillabel = "25"] 23:1 -> 24:head [headlabel = "23", taillabel = "24"] 23:2 -> 26:head [headlabel = "23", taillabel = "26"] 26:expr -> 27:head [headlabel = "26", taillabel = "27"] } subgraph cluster_2 { label = "Target List"; 19[label = " Var (19)|varno: OUTER_VAR|varattno: 1|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 2|varoattno: 2"] 17[label = " List (17)|<1> [0]|<2> [1]"] 18[label = " TargetEntry (18)| expr: |resno: 1|resjunk: false"] 21[label = " Var (21)|varno: OUTER_VAR|varattno: 2|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 2|varoattno: 3"] 20[label = " TargetEntry (20)| expr: |resno: 2|resjunk: false"] 17:1 -> 18:head [headlabel = "17", taillabel = "18"] 17:2 -> 20:head [headlabel = "17", taillabel = "20"] 18:expr -> 19:head [headlabel = "18", taillabel = "19"] 20:expr -> 21:head [headlabel = "20", taillabel = "21"] } subgraph cluster_3 { label = "Express Tree"; 29[label = " OpExpr (29)|opno: 96|opfuncid: 65|opresulttype: 16|opretset: false| args: "] 31[label = " Var (31)|varno: OUTER_VAR|varattno: 3|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 1|varoattno: 3|location: 40"] 30[label = " List (30)|<1> [0]|<2> [1]"] 32[label = " Var (32)|varno: INNER_VAR|varattno: 2|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 2|varoattno: 3|location: 48"] 28[label = " List (28)|<1> [0]"] 29:args -> 30:head [headlabel = "29", taillabel = "30"] 30:1 -> 31:head [headlabel = "30", taillabel = "31"] 30:2 -> 32:head [headlabel = "30", taillabel = "32"] 28:1 -> 29:head [headlabel = "28", taillabel = "29"] } subgraph cluster_4 { label = "Target List"; 4[label = " TargetEntry (4)| expr: |resno: 1|resname: c1|resorigtbl: 16833|resorigcol: 1|resjunk: false"] 5[label = " Var (5)|varno: OUTER_VAR|varattno: 1|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 1|varoattno: 1|location: 7"] 3[label = " List (3)|<1> [0]|<2> [1]"] 6[label = " TargetEntry (6)| expr: |resno: 2|resname: c2|resorigtbl: 16836|resorigcol: 2|resjunk: false"] 7[label = " Var (7)|varno: INNER_VAR|varattno: 1|vartype: 23|vartypmod: -1|varlevelsup: 0|varnoold: 2|varoattno: 2|location: 14"] 4:expr -> 5:head [headlabel = "4", taillabel = "5"] 3:1 -> 4:head [headlabel = "3", taillabel = "4"] 3:2 -> 6:head [headlabel = "3", taillabel = "6"] 6:expr -> 7:head [headlabel = "6", taillabel = "7"] } }