27 #ifdef HAVE_SYS_SELECT_H 28 #include <sys/select.h> 30 #ifdef HAVE_SYS_RESOURCE_H 32 #include <sys/resource.h> 35 #ifndef HAVE_GETRUSAGE 126 #if defined(__ia64__) || defined(__ia64) 127 char *register_stack_base_ptr = NULL;
238 if (inBuf->
len > 1 &&
239 inBuf->
data[inBuf->
len - 1] ==
'\n' &&
240 inBuf->
data[inBuf->
len - 2] ==
';')
252 if (inBuf->
len > 0 &&
253 inBuf->
data[inBuf->
len - 1] ==
'\\')
256 inBuf->
data[--inBuf->
len] =
'\0';
274 if (c == EOF && inBuf->
len == 0)
344 (
errcode(ERRCODE_CONNECTION_FAILURE),
345 errmsg(
"unexpected EOF on client connection with an open transaction")));
355 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
356 errmsg(
"unexpected EOF on client connection")));
380 (
errcode(ERRCODE_CONNECTION_FAILURE),
381 errmsg(
"unexpected EOF on client connection with an open transaction")));
391 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
392 errmsg(
"unexpected EOF on client connection")));
407 (
errcode(ERRCODE_CONNECTION_FAILURE),
408 errmsg(
"unexpected EOF on client connection with an open transaction")));
418 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
419 errmsg(
"unexpected EOF on client connection")));
441 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
442 errmsg(
"invalid frontend message type %d", qtype)));
453 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
454 errmsg(
"invalid frontend message type %d", qtype)));
464 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
465 errmsg(
"invalid frontend message type %d", qtype)));
476 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
477 errmsg(
"invalid frontend message type %d", qtype)));
529 int save_errno = errno;
575 int save_errno = errno;
631 List *raw_parsetree_list;
633 TRACE_POSTGRESQL_QUERY_PARSE_START(query_string);
643 #ifdef COPY_PARSE_PLAN_TREES 649 if (!
equal(new_list, raw_parsetree_list))
650 elog(
WARNING,
"copyObject() failed to produce an equal raw parse tree");
662 TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);
664 return raw_parsetree_list;
678 Oid *paramTypes,
int numParams,
682 List *querytree_list;
684 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
692 query =
parse_analyze(parsetree, query_string, paramTypes, numParams,
703 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
705 return querytree_list;
715 const char *query_string,
717 void *parserSetupArg,
722 List *querytree_list;
724 Assert(query_string != NULL);
726 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
737 (*parserSetup) (pstate, parserSetupArg);
742 (*post_parse_analyze_hook) (pstate, query);
754 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
756 return querytree_list;
768 List *querytree_list;
791 #ifdef COPY_PARSE_PLAN_TREES 798 if (!
equal(new_list, querytree_list))
799 elog(
WARNING,
"copyObject() failed to produce equal parse tree");
805 #ifdef WRITE_READ_PARSE_PLAN_TREES 815 foreach(lc, querytree_list)
822 Query *new_query = stringToNodeWithLocations(str);
830 new_list =
lappend(new_list, new_query);
834 new_list =
lappend(new_list, query);
838 if (!
equal(new_list, querytree_list))
839 elog(
WARNING,
"outfuncs/readfuncs failed to produce equal parse tree");
849 return querytree_list;
870 TRACE_POSTGRESQL_QUERY_PLAN_START();
876 plan =
planner(querytree, query_string, cursorOptions, boundParams);
881 #ifdef COPY_PARSE_PLAN_TREES 892 if (!
equal(new_plan, plan))
893 elog(
WARNING,
"copyObject() failed to produce an equal plan tree");
900 #ifdef WRITE_READ_PARSE_PLAN_TREES 907 new_plan = stringToNodeWithLocations(str);
916 if (!
equal(new_plan, plan))
917 elog(
WARNING,
"outfuncs/readfuncs failed to produce an equal plan tree");
930 TRACE_POSTGRESQL_QUERY_PLAN_DONE();
950 foreach(query_list, querytrees)
971 stmt_list =
lappend(stmt_list, stmt);
988 List *parsetree_list;
991 bool was_logged =
false;
992 bool use_implicit_block;
1002 TRACE_POSTGRESQL_QUERY_START(query_string);
1008 if (save_log_statement_stats)
1043 (
errmsg(
"statement: %s", query_string),
1062 use_implicit_block = (
list_length(parsetree_list) > 1);
1067 foreach(parsetree_item, parsetree_list)
1070 bool snapshot_set =
false;
1074 List *querytree_list,
1103 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1104 errmsg(
"current transaction is aborted, " 1105 "commands ignored until end of transaction block"),
1118 if (use_implicit_block)
1130 snapshot_set =
true;
1145 if (
lnext(parsetree_list, parsetree_item) != NULL)
1147 per_parsetree_context =
1149 "per-parsetree message context",
1252 if (
lnext(parsetree_list, parsetree_item) == NULL)
1263 if (use_implicit_block)
1300 if (per_parsetree_context)
1314 if (!parsetree_list)
1324 (
errmsg(
"duration: %s ms", msec_str),
1329 (
errmsg(
"duration: %s ms statement: %s",
1330 msec_str, query_string),
1336 if (save_log_statement_stats)
1339 TRACE_POSTGRESQL_QUERY_DONE(query_string);
1351 const char *stmt_name,
1357 List *parsetree_list;
1359 List *querytree_list;
1374 if (save_log_statement_stats)
1379 *stmt_name ? stmt_name :
"<unnamed>",
1403 is_named = (stmt_name[0] !=
'\0');
1414 unnamed_stmt_context =
1416 "unnamed prepared statement",
1434 (
errcode(ERRCODE_SYNTAX_ERROR),
1435 errmsg(
"cannot insert multiple commands into a prepared statement")));
1437 if (parsetree_list !=
NIL)
1440 bool snapshot_set =
false;
1455 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1456 errmsg(
"current transaction is aborted, " 1457 "commands ignored until end of transaction block"),
1473 snapshot_set =
true;
1492 for (
int i = 0;
i < numParams;
i++)
1494 Oid ptype = paramTypes[
i];
1496 if (ptype ==
InvalidOid || ptype == UNKNOWNOID)
1498 (
errcode(ERRCODE_INDETERMINATE_DATATYPE),
1499 errmsg(
"could not determine data type of parameter $%d",
1515 raw_parse_tree = NULL;
1518 querytree_list =
NIL;
1527 if (unnamed_stmt_context)
1533 unnamed_stmt_context,
1557 unnamed_stmt_psrc = psrc;
1582 (
errmsg(
"duration: %s ms", msec_str),
1587 (
errmsg(
"duration: %s ms parse %s: %s",
1589 *stmt_name ? stmt_name :
"<unnamed>",
1595 if (save_log_statement_stats)
1609 const char *portal_name;
1610 const char *stmt_name;
1612 int16 *pformats = NULL;
1615 int16 *rformats = NULL;
1620 char *saved_stmt_name;
1624 bool snapshot_set =
false;
1635 *portal_name ? portal_name :
"<unnamed>",
1636 *stmt_name ? stmt_name :
"<unnamed>")));
1639 if (stmt_name[0] !=
'\0')
1652 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
1653 errmsg(
"unnamed prepared statement does not exist")));
1665 if (save_log_statement_stats)
1681 if (numPFormats > 0)
1684 for (
int i = 0;
i < numPFormats;
i++)
1691 if (numPFormats > 1 && numPFormats != numParams)
1693 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1694 errmsg(
"bind message has %d parameter formats but %d parameters",
1695 numPFormats, numParams)));
1699 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1700 errmsg(
"bind message supplies %d parameters, but prepared statement \"%s\" requires %d",
1716 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1717 errmsg(
"current transaction is aborted, " 1718 "commands ignored until end of transaction block"),
1725 if (portal_name[0] ==
'\0')
1743 saved_stmt_name =
pstrdup(stmt_name);
1745 saved_stmt_name = NULL;
1754 if (numParams > 0 ||
1759 snapshot_set =
true;
1767 char **knownTextValues = NULL;
1771 for (
int paramno = 0; paramno < numParams; paramno++)
1782 isNull = (plength == -1);
1797 pbuf.
maxlen = plength + 1;
1801 csave = pbuf.
data[plength];
1802 pbuf.
data[plength] =
'\0';
1810 if (numPFormats > 1)
1811 pformat = pformats[paramno];
1812 else if (numPFormats > 0)
1813 pformat = pformats[0];
1849 if (knownTextValues == NULL)
1851 palloc0(numParams *
sizeof(
char *));
1854 knownTextValues[paramno] =
pstrdup(pstring);
1864 knownTextValues[paramno] =
1872 if (pstring != pbuf.
data)
1876 else if (pformat == 1)
1897 (
errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
1898 errmsg(
"incorrect binary data format in bind parameter %d",
1904 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1905 errmsg(
"unsupported format code: %d",
1912 pbuf.
data[plength] = csave;
1944 params_data.
params = params;
1947 params_errcxt.
arg = (
void *) ¶ms_data;
1952 if (numRFormats > 0)
1955 for (
int i = 0;
i < numRFormats;
i++)
2014 (
errmsg(
"duration: %s ms", msec_str),
2019 (
errmsg(
"duration: %s ms bind %s%s%s: %s",
2021 *stmt_name ? stmt_name :
"<unnamed>",
2022 *portal_name ?
"/" :
"",
2023 *portal_name ? portal_name :
"",
2030 if (save_log_statement_stats)
2049 const char *sourceText;
2050 const char *prepStmtName;
2053 bool is_xact_command;
2054 bool execute_is_fetch;
2055 bool was_logged =
false;
2068 (
errcode(ERRCODE_UNDEFINED_CURSOR),
2069 errmsg(
"portal \"%s\" does not exist", portal_name)));
2090 if (is_xact_command)
2096 prepStmtName =
"<unnamed>";
2102 portalParams = NULL;
2110 prepStmtName =
"<unnamed>";
2123 if (save_log_statement_stats)
2148 execute_is_fetch = !portal->
atStart;
2156 _(
"execute fetch from") :
2159 *portal_name ?
"/" :
"",
2160 *portal_name ? portal_name :
"",
2174 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2175 errmsg(
"current transaction is aborted, " 2176 "commands ignored until end of transaction block"),
2187 params_data.
params = portalParams;
2190 params_errcxt.
arg = (
void *) ¶ms_data;
2199 !execute_is_fetch && max_rows ==
FETCH_ALL,
2211 if (is_xact_command)
2251 (
errmsg(
"duration: %s ms", msec_str),
2256 (
errmsg(
"duration: %s ms %s %s%s%s: %s",
2259 _(
"execute fetch from") :
2262 *portal_name ?
"/" :
"",
2263 *portal_name ? portal_name :
"",
2270 if (save_log_statement_stats)
2271 ShowUsage(
"EXECUTE MESSAGE STATISTICS");
2294 foreach(stmt_item, stmt_list)
2331 bool exceeded_duration;
2332 bool exceeded_sample_duration;
2333 bool in_sample =
false;
2338 msecs = usecs / 1000;
2360 if (exceeded_sample_duration)
2368 secs * 1000 + msecs, usecs % 1000);
2369 if ((exceeded_duration || in_sample ||
xact_is_sampled) && !was_logged)
2390 foreach(parsetree_item, raw_parsetree_list)
2402 errdetail(
"prepare: %s", pstmt->plansource->query_string);
2426 if (str && str[0] !=
'\0')
2442 errdetail(
"abort reason: recovery conflict");
2458 errdetail(
"User was holding shared buffer pin for too long.");
2461 errdetail(
"User was holding a relation lock for too long.");
2464 errdetail(
"User was or might have been using tablespace that must be dropped.");
2467 errdetail(
"User query might have needed to see row versions that must be removed.");
2470 errdetail(
"User transaction caused buffer deadlock with recovery.");
2473 errdetail(
"User was connected to a database that must be dropped.");
2503 if (stmt_name[0] !=
'\0')
2516 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
2517 errmsg(
"unnamed prepared statement does not exist")));
2535 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2536 errmsg(
"current transaction is aborted, " 2537 "commands ignored until end of transaction block"),
2600 (
errcode(ERRCODE_UNDEFINED_CURSOR),
2601 errmsg(
"portal \"%s\" does not exist", portal_name)));
2614 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2615 errmsg(
"current transaction is aborted, " 2616 "commands ignored until end of transaction block"),
2665 #ifdef MEMORY_CONTEXT_CHECKING 2671 #ifdef SHOW_MEMORY_STATS 2738 if (unnamed_stmt_psrc)
2742 unnamed_stmt_psrc = NULL;
2812 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2813 errmsg(
"terminating connection because of unexpected SIGQUIT signal")));
2818 (
errcode(ERRCODE_CRASH_SHUTDOWN),
2819 errmsg(
"terminating connection because of crash of another server process"),
2820 errdetail(
"The postmaster has commanded this server process to roll back" 2821 " the current transaction and exit, because another" 2822 " server process exited abnormally and possibly corrupted" 2824 errhint(
"In a moment you should be able to reconnect to the" 2825 " database and repeat your command.")));
2830 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2831 errmsg(
"terminating connection due to immediate shutdown command")));
2859 int save_errno = errno;
2893 int save_errno = errno;
2916 (
errcode(ERRCODE_FLOATING_POINT_EXCEPTION),
2917 errmsg(
"floating-point exception"),
2918 errdetail(
"An invalid floating-point operation was signaled. " 2919 "This probably means an out-of-range result or an " 2920 "invalid operation, such as division by zero.")));
2932 int save_errno = errno;
3031 elog(
FATAL,
"unrecognized conflict mode: %d",
3082 (
errcode(ERRCODE_QUERY_CANCELED),
3083 errmsg(
"canceling authentication due to timeout")));
3086 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3087 errmsg(
"terminating autovacuum process due to administrator command")));
3090 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3091 errmsg(
"terminating logical replication worker due to administrator command")));
3095 (
errmsg(
"logical replication launcher shutting down")));
3107 (
errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
3108 errmsg(
"terminating connection due to conflict with recovery"),
3117 (
errcode(ERRCODE_DATABASE_DROPPED),
3118 errmsg(
"terminating connection due to conflict with recovery"),
3123 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3124 errmsg(
"terminating background worker \"%s\" due to administrator command",
3128 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3129 errmsg(
"terminating connection due to administrator command")));
3138 (
errcode(ERRCODE_CONNECTION_FAILURE),
3139 errmsg(
"connection to client lost")));
3155 (
errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
3156 errmsg(
"terminating connection due to conflict with recovery"),
3158 errhint(
"In a moment you should be able to reconnect to the" 3159 " database and repeat your command.")));
3178 bool lock_timeout_occurred;
3179 bool stmt_timeout_occurred;
3196 if (lock_timeout_occurred && stmt_timeout_occurred &&
3198 lock_timeout_occurred =
false;
3200 if (lock_timeout_occurred)
3204 (
errcode(ERRCODE_LOCK_NOT_AVAILABLE),
3205 errmsg(
"canceling statement due to lock timeout")));
3207 if (stmt_timeout_occurred)
3211 (
errcode(ERRCODE_QUERY_CANCELED),
3212 errmsg(
"canceling statement due to statement timeout")));
3218 (
errcode(ERRCODE_QUERY_CANCELED),
3219 errmsg(
"canceling autovacuum task")));
3227 (
errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
3228 errmsg(
"canceling statement due to conflict with recovery"),
3241 (
errcode(ERRCODE_QUERY_CANCELED),
3242 errmsg(
"canceling statement due to user request")));
3255 (
errcode(ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT),
3256 errmsg(
"terminating connection due to idle-in-transaction timeout")));
3266 (
errcode(ERRCODE_IDLE_SESSION_TIMEOUT),
3267 errmsg(
"terminating connection due to idle-session timeout")));
3289 #if defined(__ia64__) || defined(__ia64) 3291 #if defined(__hpux) && !defined(__GNUC__) && !defined(__INTEL_COMPILER) 3293 #include <ia64/sys/inline.h> 3294 #define ia64_get_bsp() ((char *) (_Asm_mov_from_ar(_AREG_BSP, _NO_FENCE))) 3295 #elif defined(__INTEL_COMPILER) 3297 #include <asm/ia64regs.h> 3298 #define ia64_get_bsp() ((char *) __getReg(_IA64_REG_AR_BSP)) 3301 static __inline__
char *
3307 __asm__ __volatile__(
3329 #if defined(__ia64__) || defined(__ia64) 3331 old.register_stack_base_ptr = register_stack_base_ptr;
3338 #if defined(__ia64__) || defined(__ia64) 3339 register_stack_base_ptr = ia64_get_bsp();
3357 #if defined(__ia64__) || defined(__ia64) 3359 register_stack_base_ptr = base.register_stack_base_ptr;
3382 (
errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
3383 errmsg(
"stack depth limit exceeded"),
3384 errhint(
"Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " 3385 "after ensuring the platform's stack depth limit is adequate.",
3404 if (stack_depth < 0)
3405 stack_depth = -stack_depth;
3427 #if defined(__ia64__) || defined(__ia64) 3428 stack_depth = (long) (ia64_get_bsp() - register_stack_base_ptr);
3431 register_stack_base_ptr != NULL)
3442 long newval_bytes = *newval * 1024L;
3449 GUC_check_errhint(
"Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent.");
3459 long newval_bytes = newval * 1024L;
3478 sprintf(debugstr,
"debug%d", debug_flag);
3489 if (debug_flag >= 2)
3491 if (debug_flag >= 3)
3493 if (debug_flag >= 4)
3495 if (debug_flag >= 5)
3503 const char *tmp = NULL;
3508 tmp =
"enable_seqscan";
3511 tmp =
"enable_indexscan";
3514 tmp =
"enable_indexonlyscan";
3517 tmp =
"enable_bitmapscan";
3520 tmp =
"enable_tidscan";
3523 tmp =
"enable_nestloop";
3526 tmp =
"enable_mergejoin";
3529 tmp =
"enable_hashjoin";
3549 return "log_parser_stats";
3550 else if (
optarg[1] ==
'l')
3551 return "log_planner_stats";
3555 return "log_executor_stats";
3596 if (argc > 1 && strcmp(argv[1],
"--single") == 0)
3607 #ifdef HAVE_INT_OPTERR 3622 while ((flag =
getopt(argc, argv,
"B:bc:C:D:d:EeFf:h:ijk:lN:nOPp:r:S:sTt:v:W:-:")) != -1)
3765 (
errcode(ERRCODE_SYNTAX_ERROR),
3766 errmsg(
"--%s requires a value",
3770 (
errcode(ERRCODE_SYNTAX_ERROR),
3771 errmsg(
"-c %s requires a value",
3793 if (!errs && dbname && *dbname == NULL && argc -
optind >= 1)
3794 *dbname = strdup(argv[
optind++]);
3796 if (errs || argc !=
optind)
3804 errcode(ERRCODE_SYNTAX_ERROR),
3805 errmsg(
"invalid command-line argument for server process: %s", argv[
optind]),
3809 errcode(ERRCODE_SYNTAX_ERROR),
3810 errmsg(
"%s: invalid command-line argument: %s",
3820 #ifdef HAVE_INT_OPTRESET 3844 sigjmp_buf local_sigjmp_buf;
3845 volatile bool send_ready_for_query =
true;
3846 bool idle_in_transaction_timeout_enabled =
false;
3847 bool idle_session_timeout_enabled =
false;
3872 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
3873 errmsg(
"%s: no database nor user name specified",
4045 printf(
"\nPostgreSQL stand-alone backend %s\n", PG_VERSION);
4064 "RowDescriptionContext",
4098 if (sigsetjmp(local_sigjmp_buf, 1) != 0)
4197 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4198 errmsg(
"terminating connection because protocol synchronization was lost")));
4208 send_ready_for_query =
true;
4252 if (send_ready_for_query)
4262 idle_in_transaction_timeout_enabled =
true;
4275 idle_in_transaction_timeout_enabled =
true;
4302 idle_session_timeout_enabled =
true;
4312 send_ready_for_query =
false;
4336 if (idle_in_transaction_timeout_enabled)
4339 idle_in_transaction_timeout_enabled =
false;
4341 if (idle_session_timeout_enabled)
4344 idle_session_timeout_enabled =
false;
4380 const char *query_string;
4396 send_ready_for_query =
true;
4402 const char *stmt_name;
4403 const char *query_string;
4405 Oid *paramTypes = NULL;
4418 for (
int i = 0;
i < numParams;
i++)
4424 paramTypes, numParams);
4443 const char *portal_name;
4489 send_ready_for_query =
true;
4495 const char *close_target;
4506 if (close_target[0] !=
'\0')
4525 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4526 errmsg(
"invalid CLOSE message subtype %d",
4539 const char *describe_target;
4550 switch (describe_type)
4560 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4561 errmsg(
"invalid DESCRIBE message subtype %d",
4577 send_ready_for_query =
true;
4623 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4624 errmsg(
"invalid frontend message type %d",
4642 if (firstchar ==
'F')
4644 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4645 errmsg(
"fastpath function calls not supported in a replication connection")));
4648 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4649 errmsg(
"extended query protocol not supported in a replication connection")));
4662 #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_STACK) 4663 static long val = 0;
4670 if (getrlimit(RLIMIT_STACK, &rlim) < 0)
4672 else if (rlim.rlim_cur == RLIM_INFINITY)
4675 else if (rlim.rlim_cur >= LONG_MAX)
4678 val = rlim.rlim_cur;
4682 #if defined(WIN32) || defined(__CYGWIN__) 4684 return WIN32_STACK_RLIMIT;
4706 struct timeval user,
4708 struct timeval elapse_t;
4713 memcpy((
char *) &user, (
char *) &r.
ru_utime,
sizeof(user));
4714 memcpy((
char *) &sys, (
char *) &r.
ru_stime,
sizeof(sys));
4715 if (elapse_t.tv_usec <
Save_t.tv_usec)
4718 elapse_t.tv_usec += 1000000;
4739 "!\t%ld.%06ld s user, %ld.%06ld s system, %ld.%06ld s elapsed\n",
4744 (
long) (elapse_t.tv_sec -
Save_t.tv_sec),
4745 (
long) (elapse_t.tv_usec -
Save_t.tv_usec));
4747 "!\t[%ld.%06ld s user, %ld.%06ld s system total]\n",
4749 (
long) user.tv_usec,
4751 (
long) sys.tv_usec);
4752 #if defined(HAVE_GETRUSAGE) 4754 "!\t%ld kB max resident size\n",
4764 "!\t%ld/%ld [%ld/%ld] filesystem blocks in/out\n",
4765 r.ru_inblock -
Save_r.ru_inblock,
4767 r.ru_oublock -
Save_r.ru_oublock,
4768 r.ru_inblock, r.ru_oublock);
4770 "!\t%ld/%ld [%ld/%ld] page faults/reclaims, %ld [%ld] swaps\n",
4771 r.ru_majflt -
Save_r.ru_majflt,
4772 r.ru_minflt -
Save_r.ru_minflt,
4773 r.ru_majflt, r.ru_minflt,
4774 r.ru_nswap -
Save_r.ru_nswap,
4777 "!\t%ld [%ld] signals rcvd, %ld/%ld [%ld/%ld] messages rcvd/sent\n",
4778 r.ru_nsignals -
Save_r.ru_nsignals,
4780 r.ru_msgrcv -
Save_r.ru_msgrcv,
4781 r.ru_msgsnd -
Save_r.ru_msgsnd,
4782 r.ru_msgrcv, r.ru_msgsnd);
4784 "!\t%ld/%ld [%ld/%ld] voluntary/involuntary context switches\n",
4785 r.ru_nvcsw -
Save_r.ru_nvcsw,
4786 r.ru_nivcsw -
Save_r.ru_nivcsw,
4787 r.ru_nvcsw, r.ru_nivcsw);
4791 if (str.
data[str.
len - 1] ==
'\n')
4818 msecs = usecs / 1000;
4826 (
errmsg(
"disconnection: session time: %d:%02d:%02d.%03d " 4827 "user=%s database=%s host=%s%s%s",
4828 hours, minutes, seconds, msecs,
pg_stack_base_t set_stack_base(void)
void ProcessCatchupInterrupt(void)
static bool IsTransactionStmtList(List *pstmts)
void InitializeTimeouts(void)
ParamExternData params[FLEXIBLE_ARRAY_MEMBER]
int log_min_duration_statement
void AbortCurrentTransaction(void)
volatile uint32 InterruptHoldoffCount
void SetRemoteDestReceiverParams(DestReceiver *self, Portal portal)
Portal CreatePortal(const char *name, bool allowDup, bool dupSilent)
static void exec_describe_portal_message(const char *portal_name)
TimestampTz get_timeout_finish_time(TimeoutId id)
#define IsA(nodeptr, _type_)
double log_statement_sample_rate
int gettimeofday(struct timeval *tp, struct timezone *tzp)
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
bool IsWaitingForLock(void)
void RecoveryConflictInterrupt(ProcSignalReason reason)
#define HOLD_CANCEL_INTERRUPTS()
List * QueryRewrite(Query *parsetree)
volatile sig_atomic_t QueryCancelPending
void BeginReportingGUCOptions(void)
int errhint(const char *fmt,...)
char * pnstrdup(const char *in, Size len)
CachedPlan * GetCachedPlan(CachedPlanSource *plansource, ParamListInfo boundParams, bool useResOwner, QueryEnvironment *queryEnv)
void PortalSetResultFormat(Portal portal, int nFormats, int16 *formats)
bool analyze_requires_snapshot(RawStmt *parseTree)
int GetOldFunctionMessage(StringInfo buf)
CachedPlanSource * CreateCachedPlan(RawStmt *raw_parse_tree, const char *query_string, CommandTag commandTag)
static int ReadCommand(StringInfo inBuf)
void PortalStart(Portal portal, ParamListInfo params, int eflags, Snapshot snapshot)
void pgstat_report_recovery_conflict(int reason)
static void finish_xact_command(void)
void elog_node_display(int lev, const char *title, const void *obj, bool pretty)
void ProcessConfigFile(GucContext context)
static ListCell * lnext(const List *l, const ListCell *c)
bool equal(const void *a, const void *b)
bool exec_replication_command(const char *cmd_string)
#define castNode(_type_, nodeptr)
TimestampTz GetCurrentTimestamp(void)
#define GUC_check_errdetail
void on_proc_exit(pg_on_exit_callback function, Datum arg)
void pgstat_report_activity(BackendState state, const char *cmd_str)
QueryEnvironment * p_queryEnv
CachedPlanSource * plansource
void ShowUsage(const char *title)
void MemoryContextSetParent(MemoryContext context, MemoryContext new_parent)
List * pg_plan_queries(List *querytrees, const char *query_string, int cursorOptions, ParamListInfo boundParams)
Portal GetPortalByName(const char *name)
#define CURSOR_OPT_BINARY
void SignalHandlerForConfigReload(SIGNAL_ARGS)
char * pstrdup(const char *in)
void CommitTransactionCommand(void)
void InitStandaloneProcess(const char *argv0)
QuitSignalReason GetQuitSignalReason(void)
void ParseLongOption(const char *string, char **name, char **value)
void ProcessProcSignalBarrier(void)
volatile sig_atomic_t IdleSessionTimeoutPending
bool IsAbortedTransactionBlockState(void)
bool set_plan_disabling_options(const char *arg, GucContext context, GucSource source)
static struct rusage Save_r
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
volatile uint32 QueryCancelHoldoffCount
static void forbidden_in_wal_sender(char firstchar)
int log_parameter_max_length
int errcode(int sqlerrcode)
int errhidestmt(bool hide_stmt)
Query * parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, Oid **paramTypes, int *numParams)
bool IsTransactionOrTransactionBlock(void)
const char * get_stats_option_name(const char *arg)
#define SetProcessingMode(mode)
BackgroundWorker * MyBgworkerEntry
static int errdetail_abort(void)
void PopActiveSnapshot(void)
void set_debug_options(int debug_flag, GucContext context, GucSource source)
void pgstat_report_stat(bool disconnect)
SessionEndType pgStatSessionEndCause
int getrusage(int who, struct rusage *rusage)
void PortalDefineQuery(Portal portal, const char *prepStmtName, const char *sourceText, CommandTag commandTag, List *stmts, CachedPlan *cplan)
List * pg_analyze_and_rewrite(RawStmt *parsetree, const char *query_string, Oid *paramTypes, int numParams, QueryEnvironment *queryEnv)
#define PG_PROTOCOL_MAJOR(v)
void SetLatch(Latch *latch)
#define linitial_node(type, l)
void restore_stack_base(pg_stack_base_t base)
bool IsLogicalWorker(void)
ParamListInfo makeParamList(int numParams)
void(* callback)(void *arg)
struct ErrorContextCallback * previous
Snapshot GetTransactionSnapshot(void)
MemoryContext portalContext
int getopt(int nargc, char *const *nargv, const char *ostr)
void FlushErrorState(void)
void StatementCancelHandler(SIGNAL_ARGS)
static void exec_execute_message(const char *portal_name, long max_rows)
int errdetail_internal(const char *fmt,...)
static bool IsTransactionExitStmt(Node *parsetree)
static void log_disconnections(int code, Datum arg)
ParseState * make_parsestate(ParseState *parentParseState)
void jit_reset_after_error(void)
#define RESUME_INTERRUPTS()
ErrorContextCallback * error_context_stack
int check_log_duration(char *msec_str, bool was_logged)
void set_ps_display(const char *activity)
volatile bool ParallelMessagePending
bool PortalRun(Portal portal, long count, bool isTopLevel, bool run_once, DestReceiver *dest, DestReceiver *altdest, QueryCompletion *qc)
static int errdetail_execute(List *raw_parsetree_list)
bool ClientAuthInProgress
static void disable_statement_timeout(void)
bool check_max_stack_depth(int *newval, void **extra, GucSource source)
void pfree(void *pointer)
ParamListInfo portalParams
char * pg_client_to_server(const char *s, int len)
void disable_all_timeouts(bool keep_indicators)
void appendStringInfo(StringInfo str, const char *fmt,...)
void CreateDataDirLockFile(bool amPostmaster)
void pq_startmsgread(void)
void ProcessNotifyInterrupt(void)
int log_min_duration_sample
#define WARNING_CLIENT_ONLY
static int InteractiveBackend(StringInfo inBuf)
bool pq_is_reading_msg(void)
int IdleInTransactionSessionTimeout
void EndCommand(const QueryCompletion *qc, CommandDest dest, bool force_undecorated_output)
static int interactive_getc(void)
void ProcessInterrupts(void)
List * pg_parse_query(const char *query_string)
void MemoryContextStats(MemoryContext context)
Datum OidReceiveFunctionCall(Oid functionId, StringInfo buf, Oid typioparam, int32 typmod)
void PostgresMain(int argc, char *argv[], const char *dbname, const char *username)
#define ALLOCSET_DEFAULT_SIZES
#define lfirst_node(type, lc)
void ReportChangedGUCOptions(void)
void HandleParallelMessages(void)
void appendStringInfoString(StringInfo str, const char *s)
void(* ParserSetupHook)(struct ParseState *pstate, void *arg)
static void enable_statement_timeout(void)
char * BuildParamLogString(ParamListInfo params, char **knownTextValues, int maxlen)
char OutputFileName[MAXPGPATH]
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
static struct timeval Save_t
void PushActiveSnapshot(Snapshot snap)
List * CachedPlanGetTargetList(CachedPlanSource *plansource, QueryEnvironment *queryEnv)
bool recoveryConflictPending
void BeginImplicitTransactionBlock(void)
void check_stack_depth(void)
static CachedPlanSource * unnamed_stmt_psrc
DestReceiver * CreateDestReceiver(CommandDest dest)
static void exec_bind_message(StringInfo input_message)
int errdetail(const char *fmt,...)
void LocalProcessControlFile(bool reset)
volatile sig_atomic_t ClientConnectionLost
void ChangeToDataDir(void)
void resetStringInfo(StringInfo str)
void ReplicationSlotRelease(void)
bool ActiveSnapshotSet(void)
static int SocketBackend(StringInfo inBuf)
void PortalErrorCleanup(void)
const char * p_sourcetext
volatile uint32 CritSectionCount
static int errdetail_params(ParamListInfo params)
void getTypeBinaryInputInfo(Oid type, Oid *typReceive, Oid *typIOParam)
volatile sig_atomic_t IdleInTransactionSessionTimeoutPending
bool IsAutoVacuumWorkerProcess(void)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
void LockErrorCleanup(void)
MemoryContext TopMemoryContext
static ProcSignalReason RecoveryConflictReason
long get_stack_depth_rlimit(void)
List * lappend(List *list, void *datum)
static bool RecoveryConflictPending
#define MAX_MULTIBYTE_CHAR_LEN
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
const char * debug_query_string
int GetStartupBufferPinWaitBufId(void)
#define unconstify(underlying_type, expr)
int pq_getmessage(StringInfo s, int maxlen)
static List * pg_rewrite_query(Query *query)
#define MemoryContextResetAndDeleteChildren(ctx)
static bool check_log_statement(List *stmt_list)
static void exec_parse_message(const char *query_string, const char *stmt_name, Oid *paramTypes, int numParams)
static bool RecoveryConflictRetryable
static void start_xact_command(void)
static bool doing_extended_query_message
void process_session_preload_libraries(void)
void WalSndErrorCleanup(void)
void EndImplicitTransactionBlock(void)
void * palloc0(Size size)
TimestampTz MyStartTimestamp
void CommandCounterIncrement(void)
bool SelectConfigFiles(const char *userDoption, const char *progname)
void ProcessClientReadInterrupt(bool blocked)
bool get_timeout_indicator(TimeoutId id, bool reset_indicator)
PlannedStmt * planner(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams)
static int errdetail_recovery_conflict(void)
void EmitErrorReport(void)
static StringInfoData row_description_buf
void StorePreparedStatement(const char *stmt_name, CachedPlanSource *plansource, bool from_sql)
#define ereport(elevel,...)
void SaveCachedPlan(CachedPlanSource *plansource)
void InitPostgres(const char *in_dbname, Oid dboid, const char *username, Oid useroid, char *out_dbname, bool override_allow_connections)
Query * parse_analyze(RawStmt *parseTree, const char *sourceText, Oid *paramTypes, int numParams, QueryEnvironment *queryEnv)
pqsigfunc pqsignal(int signum, pqsigfunc handler)
void(* rDestroy)(DestReceiver *self)
size_t strlcpy(char *dst, const char *src, size_t siz)
int errmsg_internal(const char *fmt,...)
void enable_timeout_after(TimeoutId id, int delay_ms)
ReplicationSlot * MyReplicationSlot
static long max_stack_depth_bytes
#define Assert(condition)
void ProcessCompletedNotifies(void)
volatile sig_atomic_t ProcDiePending
CommandTag CreateCommandTag(Node *parsetree)
bool proc_exit_inprogress
void CompleteCachedPlan(CachedPlanSource *plansource, List *querytree_list, MemoryContext querytree_context, Oid *param_types, int num_params, ParserSetupHook parserSetup, void *parserSetupArg, int cursor_options, bool fixed_result)
void HandleFunctionRequest(StringInfo msgBuf)
void InvalidateCatalogSnapshotConditionally(void)
volatile sig_atomic_t ProcSignalBarrierPending
bool HoldingBufferPinThatDelaysRecovery(void)
void StartTransactionCommand(void)
static bool DoingCommandRead
Query * transformTopLevelStmt(ParseState *pstate, RawStmt *parseTree)
static rewind_source * source
const char * query_string
void InitializeMaxBackends(void)
static int list_length(const List *l)
bool IsTransactionState(void)
volatile sig_atomic_t InterruptPending
MemoryContext MessageContext
static bool IsTransactionExitStmtList(List *pstmts)
List * pg_analyze_and_rewrite_params(RawStmt *parsetree, const char *query_string, ParserSetupHook parserSetup, void *parserSetupArg, QueryEnvironment *queryEnv)
Datum querytree(PG_FUNCTION_ARGS)
struct RawStmt * raw_parse_tree
sigjmp_buf * PG_exception_stack
static const char * userDoption
bool IsSubTransaction(void)
const char * GetCommandTagName(CommandTag commandTag)
static bool UseSemiNewlineNewline
char bgw_type[BGW_MAXLEN]
#define CURSOR_OPT_PARALLEL_OK
void SetCurrentStatementStartTimestamp(void)
void BeginCommand(CommandTag commandTag, CommandDest dest)
#define GUC_check_errhint
int errmsg(const char *fmt,...)
void PortalDrop(Portal portal, bool isTopCommit)
void ReadyForQuery(CommandDest dest)
bool IsLogicalLauncher(void)
#define HOLD_INTERRUPTS()
volatile sig_atomic_t ConfigReloadPending
void FloatExceptionHandler(SIGNAL_ARGS)
static void drop_unnamed_stmt(void)
PlannedStmt * pg_plan_query(Query *querytree, const char *query_string, int cursorOptions, ParamListInfo boundParams)
char * nodeToString(const void *obj)
int pq_getstring(StringInfo s)
void ParamsErrorCallback(void *arg)
void DropCachedPlan(CachedPlanSource *plansource)
void ReplicationSlotCleanup(void)
volatile sig_atomic_t notifyInterruptPending
void CheckDeadLockAlert(void)
bool Debug_print_rewritten
volatile sig_atomic_t catchupInterruptPending
#define CHECK_FOR_INTERRUPTS()
void process_postgres_switches(int argc, char *argv[], GucContext ctx, const char **dbname)
void disable_timeout(TimeoutId id, bool keep_indicator)
void procsignal_sigusr1_handler(SIGNAL_ARGS)
CommandDest whereToSendOutput
List * FetchPortalTargetList(Portal portal)
void TimestampDifference(TimestampTz start_time, TimestampTz stop_time, long *secs, int *microsecs)
List * raw_parser(const char *str, RawParseMode mode)
void free_parsestate(ParseState *pstate)
static bool ignore_till_sync
void assign_max_stack_depth(int newval, void *extra)
void SendRowDescriptionMessage(StringInfo buf, TupleDesc typeinfo, List *targetlist, int16 *formats)
PreparedStatement * FetchPreparedStatement(const char *stmt_name, bool throwError)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
static MemoryContext row_description_context
void quickdie(SIGNAL_ARGS)
static List * new_list(NodeTag type, int min_size)
ProtocolVersion FrontendProtocol
MemoryContext PostmasterContext
post_parse_analyze_hook_type post_parse_analyze_hook
static void exec_simple_query(const char *query_string)
const char * prepStmtName
LogStmtLevel GetCommandLogLevel(Node *parsetree)
void NullCommand(CommandDest dest)
TimestampTz GetCurrentStatementStartTimestamp(void)
void InitializeGUCOptions(void)
bool stack_is_too_deep(void)
#define RESUME_CANCEL_INTERRUPTS()
void ProcessClientWriteInterrupt(bool blocked)
int log_parameter_max_length_on_error
bool get_timeout_active(TimeoutId id)
void DropPreparedStatement(const char *stmt_name, bool showError)
static void exec_describe_statement_message(const char *stmt_name)