上一页 1 ··· 50 51 52 53 54 55 56 57 58 ··· 104 下一页
摘要: 今天进行了一个小实验,发现一个奇怪的现象:我当前有这样的数据:postgres=# select * from tab01; id | val ----+----- 1 | 100 2 | 200 3 | 300(3 rows)postgres=# 并且通过查询数据字典,知道 tab01 对应的文件名是:/usr/local/pgsql/data/base/12788/16385然后重新启动数据库。开启两个psql 客户端第一个客户端执行:postgres=# select * from tab01 where id=1; id | val ----+----- 1 | 100(1 r... 阅读全文
posted @ 2013-05-23 08:35 健哥的数据花园 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 调用关系:PortalRun ->PortalRunSelect -> ExecutorRunExecutorRun,实际上会去运行 standard_ExecutorRun ->ExecutePlan:/* ---------------------------------------------------------------- * ExecutorRun * * This is the main routine of the executor module. It accepts * the query descriptor from the... 阅读全文
posted @ 2013-05-23 08:14 健哥的数据花园 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 在PortalRun里要调用 PortalRunSelect,具体的过程缩略如下:/* * PortalRunSelect * Execute a portal's query in PORTAL_ONE_SELECT mode, and also * when fetching from a completed holdStore in PORTAL_ONE_RETURNING, * PORTAL_ONE_MOD_WITH, and PORTAL_UTIL_SELECT cases. * * This handles simple N-rows-fo... 阅读全文
posted @ 2013-05-22 14:46 健哥的数据花园 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 前面已经说过,exec_simple_query要运行 PortalStart和 PortalRun。可以说,PortalRun是重头戏,sql的真正执行,就在这里完成。/* * PortalRun * Run a portal's query or queries. * * count <= 0 is interpreted as a no-op: the destination gets started up * and shut down, but nothing else happens. Also, count == FETCH_ALL is * interprete. 阅读全文
posted @ 2013-05-22 14:17 健哥的数据花园 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 前面说过 PortalStart明确执行策略后,要执行 ExecutorStart。那么ExecutorStart 到底作了什么呢。以下是缩略:/* ---------------------------------------------------------------- * ExecutorStart * * This routine must be called at the beginning of any execution of any * query plan * * Takes a QueryDesc previously crea... 阅读全文
posted @ 2013-05-22 13:57 健哥的数据花园 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 在定义了Portal之后,需要运行:PortalStart,它主要的任务是明确执行策略,然后再执行ExecutorStart:代码太长,进行缩略:voidPortalStart(Portal portal, ParamListInfo params, int eflags, bool use_active_snapshot){ ... PG_TRY(); { ActivePortal = portal; CurrentResourceOwner = portal->resowner; PortalContext ... 阅读全文
posted @ 2013-05-22 13:26 健哥的数据花园 阅读(653) 评论(0) 推荐(0) 编辑
摘要: 看看portal生成完毕后,干了什么(PortalDefineQuery): 1 /* 2 * Create unnamed portal to run the query or queries in. If there 3 * already is one, silently drop it. 4 */ 5 portal = CreatePortal("", true, true); 6 /* Don't display the portal in pg_cursors */ 7 ... 阅读全文
posted @ 2013-05-22 10:43 健哥的数据花园 阅读(547) 评论(0) 推荐(0) 编辑
摘要: 前面已经说过,在 exec_simple_query中,完成sql文的执行。具体地说,是要构造portal,然后运行PortalStart ,PortalRun...下面就先看看 portal如何构造:在 exec_simple_query中,有这么一段:1 /*2 * Create unnamed portal to run the query or queries in. If there3 * already is one, silently drop it.4 */5 portal = CreateP... 阅读全文
posted @ 2013-05-22 10:30 健哥的数据花园 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 在工作中使用过一些开源软件,有过一些美好的体验,也有一些不好的体验。对于那些纯粹开源,不掺杂任何商业考量的贡献者,我感激他们的辛苦工作,但仍然希望他们的作品可以更好。对那些借助开源社区力量,着眼商业的各种组织,我仍然感激他们的辛苦工作,也希望他们的作品可以更好。我想澄清一件事情,那就是:并不是因为一个软件开源,并且没有直接从我的手里获得收益,我就不能指责它的缺点和不足:也许存在一些特别的例子,某些个人和组织,故意把开源软件的文档写的晦涩难懂,以此来逼迫客户购买技术支持服务。当节约成本成为强大的压力,客户、开发组织需要开发者、使用者使用某些流行开的开源软件的时候,开源软件的不足,需要各方加以重视 阅读全文
posted @ 2013-05-22 09:26 健哥的数据花园 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 在exec_simple_query中,代码如下: 1 /* 2 * exec_simple_query 3 * 4 * Execute a "simple Query" protocol message. 5 */ 6 static void 7 exec_simple_query(const char *query_string) 8 { 9 CommandDest dest = whereToSendOutput; 10 MemoryContext oldcontext; 11 List *parsetree_list; 12... 阅读全文
posted @ 2013-05-22 08:16 健哥的数据花园 阅读(1139) 评论(0) 推荐(0) 编辑
上一页 1 ··· 50 51 52 53 54 55 56 57 58 ··· 104 下一页