PostgreSQL executes the overall process of Executing command-type SQL statements such as Drop Table, postgresqldrop

Source: Internet
Author: User

PostgreSQL executes the overall process of Executing command-type SQL statements such as Drop Table, postgresqldrop

The DROP command (Commands) Implementation:

/* * Drop one or more objects. * * We don't currently handle all object types here.  Relations, for example, * require special handling, because (for example) indexes have additional * locking requirements. * * We look up all the objects first, and then delete them in a single * performMultipleDeletions() call.  This avoids unnecessary DROP RESTRICT * errors if there are dependencies between them. */voidRemoveObjects(DropStmt *stmt)/* * Dispatch function for DropStmt */static voidExecDropStmt(DropStmt *stmt, bool isTopLevel){switch (stmt->removeType){case OBJECT_INDEX:if (stmt->concurrent)PreventTransactionChain(isTopLevel,"DROP INDEX CONCURRENTLY");/* fall through */case OBJECT_TABLE:case OBJECT_SEQUENCE:case OBJECT_VIEW:case OBJECT_MATVIEW:case OBJECT_FOREIGN_TABLE:RemoveRelations(stmt);break;default:RemoveObjects(stmt);break;}}/* * standard_ProcessUtility itself deals only with utility commands for * which we do not provide event trigger support.  Commands that do have * such support are passed down to ProcessUtilitySlow, which contains the * necessary infrastructure for such triggers. * * This division is not just for performance: it's critical that the * event trigger code not be invoked when doing START TRANSACTION for * example, because we might need to refresh the event trigger cache, * which requires being in a valid transaction. */voidstandard_ProcessUtility(Node *parsetree,const char *queryString,ProcessUtilityContext context,ParamListInfo params,DestReceiver *dest,char *completionTag)/* * ProcessUtility *general utility function invoker * *parsetree: the parse tree for the utility statement *queryString: original source text of command *context: identifies source of statement (toplevel client command, *non-toplevel client command, subcommand of a larger utility command) *params: parameters to use during execution *dest: where to send results *completionTag: points to a buffer of size COMPLETION_TAG_BUFSIZE *in which to store a command completion status string. * * Notes: as of PG 8.4, caller MUST supply a queryString; it is not * allowed anymore to pass NULL.  (If you really don't have source text, * you can pass a constant string, perhaps "(query not available)".) * * completionTag is only set nonempty if we want to return a nondefault status. * * completionTag may be NULL if caller doesn't want a status string. */voidProcessUtility(Node *parsetree,   const char *queryString,   ProcessUtilityContext context,   ParamListInfo params,   DestReceiver *dest,   char *completionTag)


The detailed call stack is as follows:

#0  ExecDropStmt (stmt=0x17e9b40, isTopLevel=1 '\001') at utility.c:1349#1  0x0000000000759457 in ProcessUtilitySlow (parsetree=0x17e9b40, queryString=0x17e90b0 "drop table t1;", context=PROCESS_UTILITY_TOPLEVEL, params=0x0,     dest=0x17e9ea0, completionTag=0x7fff06aee670 "") at utility.c:1296#2  0x0000000000758849 in standard_ProcessUtility (parsetree=0x17e9b40, queryString=0x17e90b0 "drop table t1;", context=PROCESS_UTILITY_TOPLEVEL, params=0x0,     dest=0x17e9ea0, completionTag=0x7fff06aee670 "") at utility.c:792#3  0x0000000000757c88 in ProcessUtility (parsetree=0x17e9b40, queryString=0x17e90b0 "drop table t1;", context=PROCESS_UTILITY_TOPLEVEL, params=0x0, dest=0x17e9ea0,     completionTag=0x7fff06aee670 "") at utility.c:310#4  0x0000000000756e92 in PortalRunUtility (portal=0x1822d70, utilityStmt=0x17e9b40, isTopLevel=1 '\001', dest=0x17e9ea0, completionTag=0x7fff06aee670 "")    at pquery.c:1187#5  0x0000000000757048 in PortalRunMulti (portal=0x1822d70, isTopLevel=1 '\001', dest=0x17e9ea0, altdest=0x17e9ea0, completionTag=0x7fff06aee670 "") at pquery.c:1318#6  0x000000000075661c in PortalRun (portal=0x1822d70, count=9223372036854775807, isTopLevel=1 '\001', dest=0x17e9ea0, altdest=0x17e9ea0,     completionTag=0x7fff06aee670 "") at pquery.c:816#7  0x0000000000750944 in exec_simple_query (query_string=0x17e90b0 "drop table t1;") at postgres.c:1045#8  0x0000000000754967 in PostgresMain (argc=1, argv=0x1784148, dbname=0x1784130 "wzy", username=0x1784110 "xiaochu.yh") at postgres.c:4004#9  0x00000000006e80ba in BackendRun (port=0x17a3e00) at postmaster.c:4117#10 0x00000000006e77fd in BackendStartup (port=0x17a3e00) at postmaster.c:3791#11 0x00000000006e41b2 in ServerLoop () at postmaster.c:1570#12 0x00000000006e392e in PostmasterMain (argc=3, argv=0x1783380) at postmaster.c:1223#13 0x000000000064d3d3 in main (argc=3, argv=0x1783380) at main.c:225

Portal. In Postgre, Portal is an abstract concept, which indicates the execution status of a running or runable Query.


The planable SQL statements that can generate execution plans are all processed through ProcessQuery. For SQL statements that cannot generate execution plans, the Command SQL statement is called ), all are handled through PortalRunUtility.



Refer:

1. gdb uses http://blog.chinaunix.net/uid-20788636-id-1841301.html

2. postgre compilation installation start http://blog.chinaunix.net/uid-11161675-id-2903295.html

3. postgre official document http://www.postgresql.org/docs/current/static/index.html

4. How to do postgre source code analysis http://blog.csdn.net/anzelin_ruc/article/details/8622770



Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.