话说 查询“ select cname, comp from test1, test2 where test1.id=test2.id; ” 发送到服务器端, 走查询分支 exec_simple_query ,先调用 start_xact_command 初始化了事务管理相关对象和资源,接着调用 pg_parse_query ,通过 Lex 和 Yacc 对传入 SQL 语句进行词法语法解析,生成解析树。下来调用 GetTransactionSnapshot 方法做内存快照,然后调用 pg_analyze_and_rewrite 方法,进行语义分析把 parsetree 转换成 querytree ,然后对该 querytree 进行重写。接着调用 pg_plan_queries 方法,根据 querytree 做查询 规划,生成查询计划树 plantree 。然后调用了一系列方法 CreatePortal 、 PortalStart 、 PortalSetResultFormat 、 CreateDestReceiver 、 PortalRun 、 PortalDrop ,创建 portal 、初始化 portal 、 设置结果列格式、创建目的地接收者、运行portal执行查询并返回结果,然后释放 portal 相关资源,再调用 finish_xact_command 释放事务相关资源。这个例子终于执行完了。 话说 查询“ select cname, comp from test1, tes