31 #include <valgrind/valgrind.h>
202 static unsigned int old_valgrind_error_count;
212 unsigned int valgrind_error_count = VALGRIND_COUNT_ERRORS;
214 if (
unlikely(valgrind_error_count != old_valgrind_error_count) &&
216 VALGRIND_PRINTF(
"Valgrind detected %u error(s) during execution of \"%s\"\n",
217 valgrind_error_count - old_valgrind_error_count,
222 #define valgrind_report_error_query(query) ((void) 0)
267 if (inBuf->
len > 1 &&
268 inBuf->
data[inBuf->
len - 1] ==
'\n' &&
269 inBuf->
data[inBuf->
len - 2] ==
';')
281 if (inBuf->
len > 0 &&
282 inBuf->
data[inBuf->
len - 1] ==
'\\')
285 inBuf->
data[--inBuf->
len] =
'\0';
303 if (
c == EOF && inBuf->
len == 0)
374 (
errcode(ERRCODE_CONNECTION_FAILURE),
375 errmsg(
"unexpected EOF on client connection with an open transaction")));
385 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
460 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
461 errmsg(
"invalid frontend message type %d", qtype)));
509 int save_errno = errno;
555 int save_errno = errno;
611 List *raw_parsetree_list;
613 TRACE_POSTGRESQL_QUERY_PARSE_START(query_string);
623 #ifdef COPY_PARSE_PLAN_TREES
630 elog(
WARNING,
"copyObject() failed to produce an equal raw parse tree");
640 #ifdef WRITE_READ_PARSE_PLAN_TREES
648 elog(
WARNING,
"outfuncs/readfuncs failed to produce an equal raw parse tree");
654 TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);
656 return raw_parsetree_list;
670 const char *query_string,
671 const Oid *paramTypes,
676 List *querytree_list;
678 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
697 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
699 return querytree_list;
709 const char *query_string,
715 List *querytree_list;
717 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
731 for (
int i = 0;
i < *numParams;
i++)
733 Oid ptype = (*paramTypes)[
i];
735 if (ptype ==
InvalidOid || ptype == UNKNOWNOID)
737 (
errcode(ERRCODE_INDETERMINATE_DATATYPE),
738 errmsg(
"could not determine data type of parameter $%d",
750 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
752 return querytree_list;
763 const char *query_string,
765 void *parserSetupArg,
769 List *querytree_list;
771 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
790 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
792 return querytree_list;
804 List *querytree_list;
827 #ifdef COPY_PARSE_PLAN_TREES
835 elog(
WARNING,
"copyObject() failed to produce an equal rewritten parse tree");
841 #ifdef WRITE_READ_PARSE_PLAN_TREES
847 foreach(lc, querytree_list)
851 Query *new_query = stringToNodeWithLocations(
str);
857 new_query->queryId = curr_query->queryId;
865 elog(
WARNING,
"outfuncs/readfuncs failed to produce an equal rewritten parse tree");
875 return querytree_list;
896 TRACE_POSTGRESQL_QUERY_PLAN_START();
907 #ifdef COPY_PARSE_PLAN_TREES
919 elog(
WARNING,
"copyObject() failed to produce an equal plan tree");
926 #ifdef WRITE_READ_PARSE_PLAN_TREES
933 new_plan = stringToNodeWithLocations(
str);
943 elog(
WARNING,
"outfuncs/readfuncs failed to produce an equal plan tree");
956 TRACE_POSTGRESQL_QUERY_PLAN_DONE();
976 foreach(query_list, querytrees)
986 stmt->canSetTag = query->canSetTag;
989 stmt->stmt_len = query->stmt_len;
990 stmt->queryId = query->queryId;
1015 List *parsetree_list;
1018 bool was_logged =
false;
1019 bool use_implicit_block;
1029 TRACE_POSTGRESQL_QUERY_START(query_string);
1035 if (save_log_statement_stats)
1070 (
errmsg(
"statement: %s", query_string),
1089 use_implicit_block = (
list_length(parsetree_list) > 1);
1094 foreach(parsetree_item, parsetree_list)
1097 bool snapshot_set =
false;
1101 List *querytree_list,
1106 const char *cmdtagname;
1135 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1136 errmsg(
"current transaction is aborted, "
1137 "commands ignored until end of transaction block"),
1150 if (use_implicit_block)
1162 snapshot_set =
true;
1177 if (
lnext(parsetree_list, parsetree_item) != NULL)
1179 per_parsetree_context =
1181 "per-parsetree message context",
1284 if (
lnext(parsetree_list, parsetree_item) == NULL)
1295 if (use_implicit_block)
1339 if (per_parsetree_context)
1353 if (!parsetree_list)
1363 (
errmsg(
"duration: %s ms", msec_str),
1368 (
errmsg(
"duration: %s ms statement: %s",
1369 msec_str, query_string),
1375 if (save_log_statement_stats)
1378 TRACE_POSTGRESQL_QUERY_DONE(query_string);
1390 const char *stmt_name,
1396 List *parsetree_list;
1398 List *querytree_list;
1413 if (save_log_statement_stats)
1418 *stmt_name ? stmt_name :
"<unnamed>",
1442 is_named = (stmt_name[0] !=
'\0');
1453 unnamed_stmt_context =
1455 "unnamed prepared statement",
1473 (
errcode(ERRCODE_SYNTAX_ERROR),
1474 errmsg(
"cannot insert multiple commands into a prepared statement")));
1476 if (parsetree_list !=
NIL)
1478 bool snapshot_set =
false;
1493 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1494 errmsg(
"current transaction is aborted, "
1495 "commands ignored until end of transaction block"),
1511 snapshot_set =
true;
1532 raw_parse_tree = NULL;
1535 querytree_list =
NIL;
1544 if (unnamed_stmt_context)
1550 unnamed_stmt_context,
1599 (
errmsg(
"duration: %s ms", msec_str),
1604 (
errmsg(
"duration: %s ms parse %s: %s",
1606 *stmt_name ? stmt_name :
"<unnamed>",
1612 if (save_log_statement_stats)
1626 const char *portal_name;
1627 const char *stmt_name;
1629 int16 *pformats = NULL;
1632 int16 *rformats = NULL;
1637 char *saved_stmt_name;
1641 bool snapshot_set =
false;
1652 *portal_name ? portal_name :
"<unnamed>",
1653 *stmt_name ? stmt_name :
"<unnamed>")));
1656 if (stmt_name[0] !=
'\0')
1669 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
1670 errmsg(
"unnamed prepared statement does not exist")));
1682 if (save_log_statement_stats)
1698 if (numPFormats > 0)
1701 for (
int i = 0;
i < numPFormats;
i++)
1708 if (numPFormats > 1 && numPFormats != numParams)
1710 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1711 errmsg(
"bind message has %d parameter formats but %d parameters",
1712 numPFormats, numParams)));
1716 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1717 errmsg(
"bind message supplies %d parameters, but prepared statement \"%s\" requires %d",
1733 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1734 errmsg(
"current transaction is aborted, "
1735 "commands ignored until end of transaction block"),
1742 if (portal_name[0] ==
'\0')
1760 saved_stmt_name =
pstrdup(stmt_name);
1762 saved_stmt_name = NULL;
1771 if (numParams > 0 ||
1776 snapshot_set =
true;
1784 char **knownTextValues = NULL;
1796 params_errcxt.
arg = (
void *) &one_param_data;
1801 for (
int paramno = 0; paramno < numParams; paramno++)
1811 one_param_data.
paramno = paramno;
1815 isNull = (plength == -1);
1830 pbuf.
maxlen = plength + 1;
1834 csave = pbuf.
data[plength];
1835 pbuf.
data[plength] =
'\0';
1843 if (numPFormats > 1)
1844 pformat = pformats[paramno];
1845 else if (numPFormats > 0)
1846 pformat = pformats[0];
1887 if (knownTextValues == NULL)
1891 knownTextValues[paramno] =
pstrdup(pstring);
1901 knownTextValues[paramno] =
1909 if (pstring != pbuf.
data)
1913 else if (pformat == 1)
1934 (
errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
1935 errmsg(
"incorrect binary data format in bind parameter %d",
1941 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1942 errmsg(
"unsupported format code: %d",
1949 pbuf.
data[plength] = csave;
1987 params_data.
params = params;
1990 params_errcxt.
arg = (
void *) ¶ms_data;
1995 if (numRFormats > 0)
1998 for (
int i = 0;
i < numRFormats;
i++)
2057 (
errmsg(
"duration: %s ms", msec_str),
2062 (
errmsg(
"duration: %s ms bind %s%s%s: %s",
2064 *stmt_name ? stmt_name :
"<unnamed>",
2065 *portal_name ?
"/" :
"",
2066 *portal_name ? portal_name :
"",
2073 if (save_log_statement_stats)
2094 const char *sourceText;
2095 const char *prepStmtName;
2098 bool is_xact_command;
2099 bool execute_is_fetch;
2100 bool was_logged =
false;
2104 const char *cmdtagname;
2115 (
errcode(ERRCODE_UNDEFINED_CURSOR),
2116 errmsg(
"portal \"%s\" does not exist", portal_name)));
2142 prepStmtName =
"<unnamed>";
2156 if (save_log_statement_stats)
2181 execute_is_fetch = !portal->
atStart;
2189 _(
"execute fetch from") :
2192 *portal_name ?
"/" :
"",
2193 *portal_name ? portal_name :
"",
2207 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2208 errmsg(
"current transaction is aborted, "
2209 "commands ignored until end of transaction block"),
2220 params_data.
params = portalParams;
2223 params_errcxt.
arg = (
void *) ¶ms_data;
2232 !execute_is_fetch && max_rows ==
FETCH_ALL,
2261 portalParams = NULL;
2307 (
errmsg(
"duration: %s ms", msec_str),
2312 (
errmsg(
"duration: %s ms %s %s%s%s: %s",
2315 _(
"execute fetch from") :
2318 *portal_name ?
"/" :
"",
2319 *portal_name ? portal_name :
"",
2326 if (save_log_statement_stats)
2327 ShowUsage(
"EXECUTE MESSAGE STATISTICS");
2352 foreach(stmt_item, stmt_list)
2389 bool exceeded_duration;
2390 bool exceeded_sample_duration;
2391 bool in_sample =
false;
2396 msecs = usecs / 1000;
2418 if (exceeded_sample_duration)
2426 secs * 1000 + msecs, usecs % 1000);
2427 if ((exceeded_duration || in_sample ||
xact_is_sampled) && !was_logged)
2448 foreach(parsetree_item, raw_parsetree_list)
2460 errdetail(
"prepare: %s", pstmt->plansource->query_string);
2484 if (
str &&
str[0] !=
'\0')
2500 errdetail(
"abort reason: recovery conflict");
2516 errdetail(
"User was holding shared buffer pin for too long.");
2519 errdetail(
"User was holding a relation lock for too long.");
2522 errdetail(
"User was or might have been using tablespace that must be dropped.");
2525 errdetail(
"User query might have needed to see row versions that must be removed.");
2528 errdetail(
"User was using a logical replication slot that must be invalidated.");
2531 errdetail(
"User transaction caused buffer deadlock with recovery.");
2534 errdetail(
"User was connected to a database that must be dropped.");
2556 if (
data->paramno < 0)
2565 quotedval =
buf.data;
2570 if (
data->portalName &&
data->portalName[0] !=
'\0')
2573 errcontext(
"portal \"%s\" parameter $%d = %s",
2574 data->portalName,
data->paramno + 1, quotedval);
2577 data->portalName,
data->paramno + 1);
2582 errcontext(
"unnamed portal parameter $%d = %s",
2583 data->paramno + 1, quotedval);
2613 if (stmt_name[0] !=
'\0')
2626 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
2627 errmsg(
"unnamed prepared statement does not exist")));
2645 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2646 errmsg(
"current transaction is aborted, "
2647 "commands ignored until end of transaction block"),
2709 (
errcode(ERRCODE_UNDEFINED_CURSOR),
2710 errmsg(
"portal \"%s\" does not exist", portal_name)));
2723 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2724 errmsg(
"current transaction is aborted, "
2725 "commands ignored until end of transaction block"),
2782 #ifdef MEMORY_CONTEXT_CHECKING
2788 #ifdef SHOW_MEMORY_STATS
2880 sigprocmask(SIG_SETMASK, &
BlockSig, NULL);
2929 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2930 errmsg(
"terminating connection because of unexpected SIGQUIT signal")));
2935 (
errcode(ERRCODE_CRASH_SHUTDOWN),
2936 errmsg(
"terminating connection because of crash of another server process"),
2937 errdetail(
"The postmaster has commanded this server process to roll back"
2938 " the current transaction and exit, because another"
2939 " server process exited abnormally and possibly corrupted"
2941 errhint(
"In a moment you should be able to reconnect to the"
2942 " database and repeat your command.")));
2947 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2948 errmsg(
"terminating connection due to immediate shutdown command")));
2976 int save_errno = errno;
3010 int save_errno = errno;
3033 (
errcode(ERRCODE_FLOATING_POINT_EXCEPTION),
3034 errmsg(
"floating-point exception"),
3035 errdetail(
"An invalid floating-point operation was signaled. "
3036 "This probably means an out-of-range result or an "
3037 "invalid operation, such as division by zero.")));
3179 errmsg(
"canceling statement due to conflict with recovery"),
3198 ERRCODE_DATABASE_DROPPED :
3200 errmsg(
"terminating connection due to conflict with recovery"),
3202 errhint(
"In a moment you should be able to reconnect to the"
3203 " database and repeat your command.")));
3207 elog(
FATAL,
"unrecognized conflict mode: %d", (
int) reason);
3271 (
errcode(ERRCODE_QUERY_CANCELED),
3272 errmsg(
"canceling authentication due to timeout")));
3275 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3276 errmsg(
"terminating autovacuum process due to administrator command")));
3279 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3280 errmsg(
"terminating logical replication worker due to administrator command")));
3294 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3295 errmsg(
"terminating background worker \"%s\" due to administrator command",
3299 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3300 errmsg(
"terminating connection due to administrator command")));
3330 (
errcode(ERRCODE_CONNECTION_FAILURE),
3331 errmsg(
"connection to client lost")));
3356 bool lock_timeout_occurred;
3357 bool stmt_timeout_occurred;
3374 if (lock_timeout_occurred && stmt_timeout_occurred &&
3376 lock_timeout_occurred =
false;
3378 if (lock_timeout_occurred)
3382 (
errcode(ERRCODE_LOCK_NOT_AVAILABLE),
3383 errmsg(
"canceling statement due to lock timeout")));
3385 if (stmt_timeout_occurred)
3389 (
errcode(ERRCODE_QUERY_CANCELED),
3390 errmsg(
"canceling statement due to statement timeout")));
3396 (
errcode(ERRCODE_QUERY_CANCELED),
3397 errmsg(
"canceling autovacuum task")));
3409 (
errcode(ERRCODE_QUERY_CANCELED),
3410 errmsg(
"canceling statement due to user request")));
3426 (
errcode(ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT),
3427 errmsg(
"terminating connection due to idle-in-transaction timeout")));
3437 (
errcode(ERRCODE_IDLE_SESSION_TIMEOUT),
3438 errmsg(
"terminating connection due to idle-session timeout")));
3475 #ifndef HAVE__BUILTIN_FRAME_ADDRESS
3487 #ifdef HAVE__BUILTIN_FRAME_ADDRESS
3528 (
errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
3529 errmsg(
"stack depth limit exceeded"),
3530 errhint(
"Increase the configuration parameter \"max_stack_depth\" (currently %dkB), "
3531 "after ensuring the platform's stack depth limit is adequate.",
3550 if (stack_depth < 0)
3551 stack_depth = -stack_depth;
3572 long newval_bytes = *
newval * 1024L;
3579 GUC_check_errhint(
"Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent.");
3589 long newval_bytes =
newval * 1024L;
3602 GUC_check_errdetail(
"client_connection_check_interval must be set to 0 on this platform.");
3639 "\"log_parser_stats\", \"log_planner_stats\", "
3640 "or \"log_executor_stats\" is true.");
3660 sprintf(debugstr,
"debug%d", debug_flag);
3671 if (debug_flag >= 2)
3673 if (debug_flag >= 3)
3675 if (debug_flag >= 4)
3677 if (debug_flag >= 5)
3685 const char *tmp = NULL;
3690 tmp =
"enable_seqscan";
3693 tmp =
"enable_indexscan";
3696 tmp =
"enable_indexonlyscan";
3699 tmp =
"enable_bitmapscan";
3702 tmp =
"enable_tidscan";
3705 tmp =
"enable_nestloop";
3708 tmp =
"enable_mergejoin";
3711 tmp =
"enable_hashjoin";
3731 return "log_parser_stats";
3732 else if (
optarg[1] ==
'l')
3733 return "log_planner_stats";
3737 return "log_executor_stats";
3778 if (argc > 1 && strcmp(argv[1],
"--single") == 0)
3789 #ifdef HAVE_INT_OPTERR
3804 while ((
flag =
getopt(argc, argv,
"B:bC:c:D:d:EeFf:h:ijk:lN:nOPp:r:S:sTt:v:W:-:")) != -1)
3833 (
errcode(ERRCODE_SYNTAX_ERROR),
3834 errmsg(
"--%s requires a value",
3838 (
errcode(ERRCODE_SYNTAX_ERROR),
3839 errmsg(
"-c %s requires a value",
3977 if (errs || argc !=
optind)
3985 errcode(ERRCODE_SYNTAX_ERROR),
3986 errmsg(
"invalid command-line argument for server process: %s", argv[
optind]),
3990 errcode(ERRCODE_SYNTAX_ERROR),
3991 errmsg(
"%s: invalid command-line argument: %s",
4001 #ifdef HAVE_INT_OPTRESET
4020 const char *
dbname = NULL;
4043 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4044 errmsg(
"%s: no database nor user name specified",
4129 sigjmp_buf local_sigjmp_buf;
4132 volatile bool send_ready_for_query =
true;
4133 volatile bool idle_in_transaction_timeout_enabled =
false;
4134 volatile bool idle_session_timeout_enabled =
false;
4266 printf(
"\nPostgreSQL stand-alone backend %s\n", PG_VERSION);
4285 "RowDescriptionContext",
4313 if (sigsetjmp(local_sigjmp_buf, 1) != 0)
4342 idle_in_transaction_timeout_enabled =
false;
4343 idle_session_timeout_enabled =
false;
4419 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4420 errmsg(
"terminating connection because protocol synchronization was lost")));
4430 send_ready_for_query =
true;
4451 old_valgrind_error_count = VALGRIND_COUNT_ERRORS;
4485 if (send_ready_for_query)
4495 idle_in_transaction_timeout_enabled =
true;
4508 idle_in_transaction_timeout_enabled =
true;
4541 if (stats_timeout > 0)
4560 idle_session_timeout_enabled =
true;
4570 send_ready_for_query =
false;
4594 if (idle_in_transaction_timeout_enabled)
4597 idle_in_transaction_timeout_enabled =
false;
4599 if (idle_session_timeout_enabled)
4602 idle_session_timeout_enabled =
false;
4638 const char *query_string;
4656 send_ready_for_query =
true;
4662 const char *stmt_name;
4663 const char *query_string;
4665 Oid *paramTypes = NULL;
4678 for (
int i = 0;
i < numParams;
i++)
4684 paramTypes, numParams);
4707 const char *portal_name;
4757 send_ready_for_query =
true;
4763 const char *close_target;
4774 if (close_target[0] !=
'\0')
4793 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4794 errmsg(
"invalid CLOSE message subtype %d",
4809 const char *describe_target;
4820 switch (describe_type)
4830 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4831 errmsg(
"invalid DESCRIBE message subtype %d",
4850 send_ready_for_query =
true;
4896 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4897 errmsg(
"invalid frontend message type %d",
4917 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4918 errmsg(
"fastpath function calls not supported in a replication connection")));
4921 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4922 errmsg(
"extended query protocol not supported in a replication connection")));
4935 #if defined(HAVE_GETRLIMIT)
4936 static long val = 0;
4943 if (getrlimit(RLIMIT_STACK, &rlim) < 0)
4945 else if (rlim.rlim_cur == RLIM_INFINITY)
4948 else if (rlim.rlim_cur >= LONG_MAX)
4951 val = rlim.rlim_cur;
4956 return WIN32_STACK_RLIMIT;
4962 static struct timeval
Save_t;
4975 struct timeval
user,
4977 struct timeval elapse_t;
4983 memcpy((
char *) &sys, (
char *) &r.
ru_stime,
sizeof(sys));
4984 if (elapse_t.tv_usec <
Save_t.tv_usec)
4987 elapse_t.tv_usec += 1000000;
5008 "!\t%ld.%06ld s user, %ld.%06ld s system, %ld.%06ld s elapsed\n",
5013 (
long) (elapse_t.tv_sec -
Save_t.tv_sec),
5014 (
long) (elapse_t.tv_usec -
Save_t.tv_usec));
5016 "!\t[%ld.%06ld s user, %ld.%06ld s system total]\n",
5018 (
long)
user.tv_usec,
5020 (
long) sys.tv_usec);
5030 "!\t%ld kB max resident size\n",
5040 "!\t%ld/%ld [%ld/%ld] filesystem blocks in/out\n",
5041 r.ru_inblock -
Save_r.ru_inblock,
5043 r.ru_oublock -
Save_r.ru_oublock,
5044 r.ru_inblock, r.ru_oublock);
5046 "!\t%ld/%ld [%ld/%ld] page faults/reclaims, %ld [%ld] swaps\n",
5047 r.ru_majflt -
Save_r.ru_majflt,
5048 r.ru_minflt -
Save_r.ru_minflt,
5049 r.ru_majflt, r.ru_minflt,
5050 r.ru_nswap -
Save_r.ru_nswap,
5053 "!\t%ld [%ld] signals rcvd, %ld/%ld [%ld/%ld] messages rcvd/sent\n",
5054 r.ru_nsignals -
Save_r.ru_nsignals,
5056 r.ru_msgrcv -
Save_r.ru_msgrcv,
5057 r.ru_msgsnd -
Save_r.ru_msgsnd,
5058 r.ru_msgrcv, r.ru_msgsnd);
5060 "!\t%ld/%ld [%ld/%ld] voluntary/involuntary context switches\n",
5061 r.ru_nvcsw -
Save_r.ru_nvcsw,
5062 r.ru_nivcsw -
Save_r.ru_nivcsw,
5063 r.ru_nvcsw, r.ru_nivcsw);
5067 if (
str.data[
str.len - 1] ==
'\n')
5068 str.data[--
str.len] =
'\0';
5094 msecs = usecs / 1000;
5102 (
errmsg(
"disconnection: session time: %d:%02d:%02d.%03d "
5103 "user=%s database=%s host=%s%s%s",
5104 hours, minutes, seconds, msecs,
5105 port->user_name,
port->database_name,
port->remote_host,
5106 port->remote_port[0] ?
" port=" :
"",
port->remote_port)));
Datum querytree(PG_FUNCTION_ARGS)
volatile sig_atomic_t ParallelApplyMessagePending
void HandleParallelApplyMessages(void)
void ProcessNotifyInterrupt(bool flush)
volatile sig_atomic_t notifyInterruptPending
bool IsAutoVacuumWorkerProcess(void)
void HandleParallelMessages(void)
volatile sig_atomic_t ParallelMessagePending
void DropPreparedStatement(const char *stmt_name, bool showError)
PreparedStatement * FetchPreparedStatement(const char *stmt_name, bool throwError)
void StorePreparedStatement(const char *stmt_name, CachedPlanSource *plansource, bool from_sql)
void elog_node_display(int lev, const char *title, const void *obj, bool pretty)
List * raw_parser(const char *str, RawParseMode mode)
bool IsLogicalWorker(void)
void TimestampDifference(TimestampTz start_time, TimestampTz stop_time, long *secs, int *microsecs)
TimestampTz GetCurrentTimestamp(void)
void pgstat_report_query_id(uint64 query_id, bool force)
void pgstat_report_activity(BackendState state, const char *cmd_str)
@ STATE_IDLEINTRANSACTION_ABORTED
@ STATE_IDLEINTRANSACTION
bool HoldingBufferPinThatDelaysRecovery(void)
#define unconstify(underlying_type, expr)
const char * GetCommandTagNameAndLen(CommandTag commandTag, Size *len)
elog(ERROR, "%s: %s", p2, msg)
void EndCommand(const QueryCompletion *qc, CommandDest dest, bool force_undecorated_output)
void BeginCommand(CommandTag commandTag, CommandDest dest)
void ReadyForQuery(CommandDest dest)
DestReceiver * CreateDestReceiver(CommandDest dest)
void NullCommand(CommandDest dest)
int errmsg_internal(const char *fmt,...)
int errhidestmt(bool hide_stmt)
void EmitErrorReport(void)
int errdetail_internal(const char *fmt,...)
int errdetail(const char *fmt,...)
ErrorContextCallback * error_context_stack
void FlushErrorState(void)
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
sigjmp_buf * PG_exception_stack
#define WARNING_CLIENT_ONLY
#define ereport(elevel,...)
bool equal(const void *a, const void *b)
void HandleFunctionRequest(StringInfo msgBuf)
#define palloc_array(type, count)
#define palloc0_array(type, count)
Datum OidReceiveFunctionCall(Oid functionId, StringInfo buf, Oid typioparam, int32 typmod)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
volatile sig_atomic_t IdleStatsUpdateTimeoutPending
volatile sig_atomic_t LogMemoryContextPending
volatile sig_atomic_t ProcSignalBarrierPending
volatile sig_atomic_t InterruptPending
volatile sig_atomic_t IdleSessionTimeoutPending
volatile uint32 QueryCancelHoldoffCount
ProtocolVersion FrontendProtocol
volatile sig_atomic_t IdleInTransactionSessionTimeoutPending
volatile uint32 InterruptHoldoffCount
volatile sig_atomic_t ClientConnectionLost
volatile uint32 CritSectionCount
volatile sig_atomic_t QueryCancelPending
TimestampTz MyStartTimestamp
char OutputFileName[MAXPGPATH]
volatile sig_atomic_t ProcDiePending
volatile sig_atomic_t CheckClientConnectionPending
void BeginReportingGUCOptions(void)
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
bool SelectConfigFiles(const char *userDoption, const char *progname)
void ParseLongOption(const char *string, char **name, char **value)
void InitializeGUCOptions(void)
void ReportChangedGUCOptions(void)
#define GUC_check_errdetail
#define GUC_check_errhint
void ProcessConfigFile(GucContext context)
int log_parameter_max_length_on_error
int log_min_duration_statement
int log_min_duration_sample
bool Debug_print_rewritten
int log_parameter_max_length
double log_statement_sample_rate
volatile sig_atomic_t ConfigReloadPending
void SignalHandlerForConfigReload(SIGNAL_ARGS)
void on_proc_exit(pg_on_exit_callback function, Datum arg)
bool proc_exit_inprogress
void InitializeShmemGUCs(void)
void CreateSharedMemoryAndSemaphores(void)
if(TABLE==NULL||TABLE_index==NULL)
void jit_reset_after_error(void)
void SetLatch(Latch *latch)
bool WaitEventSetCanReportClosed(void)
bool IsLogicalLauncher(void)
#define PQ_SMALL_MESSAGE_LIMIT
#define PQ_LARGE_MESSAGE_LIMIT
static void const char fflush(stdout)
Assert(fmt[strlen(fmt) - 1] !='\n')
static List * new_list(NodeTag type, int min_size)
List * lappend(List *list, void *datum)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
void getTypeBinaryInputInfo(Oid type, Oid *typReceive, Oid *typIOParam)
char * pg_client_to_server(const char *s, int len)
char * pnstrdup(const char *in, Size len)
MemoryContext MessageContext
void MemoryContextSetParent(MemoryContext context, MemoryContext new_parent)
char * pstrdup(const char *in)
void pfree(void *pointer)
MemoryContext TopMemoryContext
void MemoryContextStats(MemoryContext context)
MemoryContext PostmasterContext
void ProcessLogMemoryContextInterrupt(void)
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define MemoryContextResetAndDeleteChildren(ctx)
#define RESUME_INTERRUPTS()
#define HOLD_CANCEL_INTERRUPTS()
#define RESUME_CANCEL_INTERRUPTS()
#define CHECK_FOR_INTERRUPTS()
#define HOLD_INTERRUPTS()
#define SetProcessingMode(mode)
void ChangeToDataDir(void)
void process_shmem_requests(void)
void InitStandaloneProcess(const char *argv0)
void process_shared_preload_libraries(void)
void CreateDataDirLockFile(bool amPostmaster)
#define IsA(nodeptr, _type_)
char * nodeToString(const void *obj)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
ParamListInfo makeParamList(int numParams)
char * BuildParamLogString(ParamListInfo params, char **knownTextValues, int maxlen)
void ParamsErrorCallback(void *arg)
void(* ParserSetupHook)(struct ParseState *pstate, void *arg)
#define CURSOR_OPT_PARALLEL_OK
#define CURSOR_OPT_BINARY
Query * parse_analyze_withcb(RawStmt *parseTree, const char *sourceText, ParserSetupHook parserSetup, void *parserSetupArg, QueryEnvironment *queryEnv)
bool analyze_requires_snapshot(RawStmt *parseTree)
Query * parse_analyze_varparams(RawStmt *parseTree, const char *sourceText, Oid **paramTypes, int *numParams, QueryEnvironment *queryEnv)
Query * parse_analyze_fixedparams(RawStmt *parseTree, const char *sourceText, const Oid *paramTypes, int numParams, QueryEnvironment *queryEnv)
int getopt(int nargc, char *const *nargv, const char *ostr)
PGDLLIMPORT char * optarg
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define linitial_node(type, l)
static ListCell * lnext(const List *l, const ListCell *c)
double pg_prng_double(pg_prng_state *state)
pg_prng_state pg_global_prng_state
static rewind_source * source
#define MAX_MULTIBYTE_CHAR_LEN
#define ERRCODE_T_R_SERIALIZATION_FAILURE
long pgstat_report_stat(bool force)
void pgstat_report_connect(Oid dboid)
void pgstat_report_recovery_conflict(int reason)
SessionEndType pgStatSessionEndCause
void DropCachedPlan(CachedPlanSource *plansource)
List * CachedPlanGetTargetList(CachedPlanSource *plansource, QueryEnvironment *queryEnv)
void SaveCachedPlan(CachedPlanSource *plansource)
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)
CachedPlanSource * CreateCachedPlan(RawStmt *raw_parse_tree, const char *query_string, CommandTag commandTag)
CachedPlan * GetCachedPlan(CachedPlanSource *plansource, ParamListInfo boundParams, ResourceOwner owner, QueryEnvironment *queryEnv)
PlannedStmt * planner(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams)
QuitSignalReason GetQuitSignalReason(void)
pqsigfunc pqsignal(int signo, pqsigfunc func)
size_t strlcpy(char *dst, const char *src, size_t siz)
void PortalDrop(Portal portal, bool isTopCommit)
Portal GetPortalByName(const char *name)
void PortalDefineQuery(Portal portal, const char *prepStmtName, const char *sourceText, CommandTag commandTag, List *stmts, CachedPlan *cplan)
Portal CreatePortal(const char *name, bool allowDup, bool dupSilent)
void PortalErrorCleanup(void)
static int errdetail_recovery_conflict(ProcSignalReason reason)
struct BindParamCbData BindParamCbData
static void disable_statement_timeout(void)
List * pg_parse_query(const char *query_string)
static bool IsTransactionStmtList(List *pstmts)
static bool check_log_statement(List *stmt_list)
static void exec_describe_statement_message(const char *stmt_name)
void process_postgres_switches(int argc, char *argv[], GucContext ctx, const char **dbname)
void restore_stack_base(pg_stack_base_t base)
void quickdie(SIGNAL_ARGS)
static bool IsTransactionExitStmtList(List *pstmts)
static void log_disconnections(int code, Datum arg)
static int errdetail_abort(void)
static void forbidden_in_wal_sender(char firstchar)
static void exec_execute_message(const char *portal_name, long max_rows)
bool check_max_stack_depth(int *newval, void **extra, GucSource source)
void PostgresSingleUserMain(int argc, char *argv[], const char *username)
void set_debug_options(int debug_flag, GucContext context, GucSource source)
static bool UseSemiNewlineNewline
static CachedPlanSource * unnamed_stmt_psrc
void FloatExceptionHandler(SIGNAL_ARGS)
int client_connection_check_interval
bool check_log_stats(bool *newval, void **extra, GucSource source)
void StatementCancelHandler(SIGNAL_ARGS)
CommandDest whereToSendOutput
long get_stack_depth_rlimit(void)
static bool ignore_till_sync
static void finish_xact_command(void)
bool set_plan_disabling_options(const char *arg, GucContext context, GucSource source)
static void enable_statement_timeout(void)
static long max_stack_depth_bytes
int check_log_duration(char *msec_str, bool was_logged)
static struct timeval Save_t
const char * debug_query_string
static void exec_simple_query(const char *query_string)
List * pg_analyze_and_rewrite_varparams(RawStmt *parsetree, const char *query_string, Oid **paramTypes, int *numParams, QueryEnvironment *queryEnv)
void HandleRecoveryConflictInterrupt(ProcSignalReason reason)
static volatile sig_atomic_t RecoveryConflictPendingReasons[NUM_PROCSIGNALS]
static int errdetail_execute(List *raw_parsetree_list)
List * pg_analyze_and_rewrite_withcb(RawStmt *parsetree, const char *query_string, ParserSetupHook parserSetup, void *parserSetupArg, QueryEnvironment *queryEnv)
void ShowUsage(const char *title)
static void exec_parse_message(const char *query_string, const char *stmt_name, Oid *paramTypes, int numParams)
List * pg_analyze_and_rewrite_fixedparams(RawStmt *parsetree, const char *query_string, const Oid *paramTypes, int numParams, QueryEnvironment *queryEnv)
static const char * userDoption
static volatile sig_atomic_t RecoveryConflictPending
static void exec_bind_message(StringInfo input_message)
static bool DoingCommandRead
List * pg_rewrite_query(Query *query)
const char * get_stats_option_name(const char *arg)
static int interactive_getc(void)
bool stack_is_too_deep(void)
static int errdetail_params(ParamListInfo params)
static void ProcessRecoveryConflictInterrupts(void)
static int SocketBackend(StringInfo inBuf)
void ProcessClientReadInterrupt(bool blocked)
void assign_max_stack_depth(int newval, void *extra)
void ProcessInterrupts(void)
static void bind_param_error_callback(void *arg)
static bool IsTransactionExitStmt(Node *parsetree)
PlannedStmt * pg_plan_query(Query *querytree, const char *query_string, int cursorOptions, ParamListInfo boundParams)
void PostgresMain(const char *dbname, const char *username)
static MemoryContext row_description_context
static int InteractiveBackend(StringInfo inBuf)
static void ProcessRecoveryConflictInterrupt(ProcSignalReason reason)
static char * stack_base_ptr
static struct rusage Save_r
bool check_client_connection_check_interval(int *newval, void **extra, GucSource source)
static StringInfoData row_description_buf
void ProcessClientWriteInterrupt(bool blocked)
static bool doing_extended_query_message
static void start_xact_command(void)
List * pg_plan_queries(List *querytrees, const char *query_string, int cursorOptions, ParamListInfo boundParams)
static void exec_describe_portal_message(const char *portal_name)
void check_stack_depth(void)
pg_stack_base_t set_stack_base(void)
static void drop_unnamed_stmt(void)
#define valgrind_report_error_query(query)
static int ReadCommand(StringInfo inBuf)
bool check_stage_log_stats(bool *newval, void **extra, GucSource source)
void InitializeMaxBackends(void)
void InitPostgres(const char *in_dbname, Oid dboid, const char *username, Oid useroid, bool load_session_libraries, bool override_allow_connections, char *out_dbname)
bool ClientAuthInProgress
BackgroundWorker * MyBgworkerEntry
int pq_getmessage(StringInfo s, int maxlen)
bool pq_is_reading_msg(void)
bool pq_check_connection(void)
void pq_startmsgread(void)
void PortalSetResultFormat(Portal portal, int nFormats, int16 *formats)
void PortalStart(Portal portal, ParamListInfo params, int eflags, Snapshot snapshot)
bool PortalRun(Portal portal, long count, bool isTopLevel, bool run_once, DestReceiver *dest, DestReceiver *altdest, QueryCompletion *qc)
List * FetchPortalTargetList(Portal portal)
void SetRemoteDestReceiverParams(DestReceiver *self, Portal portal)
void SendRowDescriptionMessage(StringInfo buf, TupleDesc typeinfo, List *targetlist, int16 *formats)
void ProcessProcSignalBarrier(void)
void procsignal_sigusr1_handler(SIGNAL_ARGS)
@ PROCSIG_RECOVERY_CONFLICT_BUFFERPIN
@ PROCSIG_RECOVERY_CONFLICT_LOCK
@ PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT
@ PROCSIG_RECOVERY_CONFLICT_DATABASE
@ PROCSIG_RECOVERY_CONFLICT_SNAPSHOT
@ PROCSIG_RECOVERY_CONFLICT_LAST
@ PROCSIG_RECOVERY_CONFLICT_FIRST
@ PROCSIG_RECOVERY_CONFLICT_TABLESPACE
@ PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK
#define PqMsg_CloseComplete
#define PqMsg_BindComplete
#define PqMsg_FunctionCall
#define PqMsg_PortalSuspended
#define PqMsg_BackendKeyData
#define PqMsg_ParseComplete
void set_ps_display_with_len(const char *activity, size_t len)
static void set_ps_display(const char *activity)
int getrusage(int who, struct rusage *rusage)