日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

PostgreSQL在何处处理 sql查询之九

發(fā)布時(shí)間:2025/7/14 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL在何处处理 sql查询之九 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

調(diào)用關(guān)系:PortalRun ->?PortalRunSelect -> ExecutorRun

ExecutorRun,實(shí)際上會(huì)去運(yùn)行 standard_ExecutorRun ->ExecutePlan:

/* ----------------------------------------------------------------* ExecutorRun** This is the main routine of the executor module. It accepts* the query descriptor from the traffic cop and executes the* query plan.** ExecutorStart must have been called already.** If direction is NoMovementScanDirection then nothing is done* except to start up/shut down the destination. Otherwise,* we retrieve up to 'count' tuples in the specified direction.** Note: count = 0 is interpreted as no portal limit, i.e., run to* completion.** There is no return value, but output tuples (if any) are sent to* the destination receiver specified in the QueryDesc; and the number* of tuples processed at the top level can be found in* estate->es_processed.** We provide a function hook variable that lets loadable plugins* get control when ExecutorRun is called. Such a plugin would* normally call standard_ExecutorRun().** ----------------------------------------------------------------*/ void ExecutorRun(QueryDesc *queryDesc,ScanDirection direction, long count) {if (ExecutorRun_hook)(*ExecutorRun_hook) (queryDesc, direction, count);elsestandard_ExecutorRun(queryDesc, direction, count); }void standard_ExecutorRun(QueryDesc *queryDesc,ScanDirection direction, long count) {EState *estate;CmdType operation;DestReceiver *dest;bool sendTuples;MemoryContext oldcontext;/* sanity checks */Assert(queryDesc != NULL);estate = queryDesc->estate;Assert(estate != NULL);Assert(!(estate->es_top_eflags & EXEC_FLAG_EXPLAIN_ONLY));/** Switch into per-query memory context*/oldcontext = MemoryContextSwitchTo(estate->es_query_cxt);/* Allow instrumentation of Executor overall runtime */if (queryDesc->totaltime)InstrStartNode(queryDesc->totaltime);/** extract information from the query descriptor and the query feature.*/operation = queryDesc->operation;dest = queryDesc->dest;/** startup tuple receiver, if we will be emitting tuples*/estate->es_processed = 0;estate->es_lastoid = InvalidOid;sendTuples = (operation == CMD_SELECT ||queryDesc->plannedstmt->hasReturning);if (sendTuples)(*dest->rStartup) (dest, operation, queryDesc->tupDesc);/** run plan*/if (!ScanDirectionIsNoMovement(direction)) ExecutePlan(estate,queryDesc->planstate,operation,sendTuples,count,direction,dest);/** shutdown tuple receiver, if we started it*/if (sendTuples)(*dest->rShutdown) (dest);if (queryDesc->totaltime)InstrStopNode(queryDesc->totaltime, estate->es_processed);MemoryContextSwitchTo(oldcontext); }

?

總結(jié)

以上是生活随笔為你收集整理的PostgreSQL在何处处理 sql查询之九的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。