31 #include <valgrind/valgrind.h>
204 static unsigned int old_valgrind_error_count;
214 unsigned int valgrind_error_count = VALGRIND_COUNT_ERRORS;
216 if (
unlikely(valgrind_error_count != old_valgrind_error_count) &&
218 VALGRIND_PRINTF(
"Valgrind detected %u error(s) during execution of \"%s\"\n",
219 valgrind_error_count - old_valgrind_error_count,
224 #define valgrind_report_error_query(query) ((void) 0)
269 if (inBuf->
len > 1 &&
270 inBuf->
data[inBuf->
len - 1] ==
'\n' &&
271 inBuf->
data[inBuf->
len - 2] ==
';')
283 if (inBuf->
len > 0 &&
284 inBuf->
data[inBuf->
len - 1] ==
'\\')
287 inBuf->
data[--inBuf->
len] =
'\0';
305 if (
c == EOF && inBuf->
len == 0)
376 (
errcode(ERRCODE_CONNECTION_FAILURE),
377 errmsg(
"unexpected EOF on client connection with an open transaction")));
387 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
462 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
463 errmsg(
"invalid frontend message type %d", qtype)));
511 int save_errno = errno;
557 int save_errno = errno;
613 List *raw_parsetree_list;
615 TRACE_POSTGRESQL_QUERY_PARSE_START(query_string);
625 #ifdef COPY_PARSE_PLAN_TREES
632 elog(
WARNING,
"copyObject() failed to produce an equal raw parse tree");
642 #ifdef WRITE_READ_PARSE_PLAN_TREES
650 elog(
WARNING,
"outfuncs/readfuncs failed to produce an equal raw parse tree");
656 TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);
658 return raw_parsetree_list;
672 const char *query_string,
673 const Oid *paramTypes,
678 List *querytree_list;
680 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
699 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
701 return querytree_list;
711 const char *query_string,
717 List *querytree_list;
719 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
733 for (
int i = 0;
i < *numParams;
i++)
735 Oid ptype = (*paramTypes)[
i];
737 if (ptype ==
InvalidOid || ptype == UNKNOWNOID)
739 (
errcode(ERRCODE_INDETERMINATE_DATATYPE),
740 errmsg(
"could not determine data type of parameter $%d",
752 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
754 return querytree_list;
765 const char *query_string,
767 void *parserSetupArg,
771 List *querytree_list;
773 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
792 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
794 return querytree_list;
806 List *querytree_list;
829 #ifdef COPY_PARSE_PLAN_TREES
837 elog(
WARNING,
"copyObject() failed to produce an equal rewritten parse tree");
843 #ifdef WRITE_READ_PARSE_PLAN_TREES
849 foreach(lc, querytree_list)
853 Query *new_query = stringToNodeWithLocations(
str);
859 new_query->queryId = curr_query->queryId;
867 elog(
WARNING,
"outfuncs/readfuncs failed to produce an equal rewritten parse tree");
877 return querytree_list;
898 TRACE_POSTGRESQL_QUERY_PLAN_START();
909 #ifdef COPY_PARSE_PLAN_TREES
921 elog(
WARNING,
"copyObject() failed to produce an equal plan tree");
928 #ifdef WRITE_READ_PARSE_PLAN_TREES
935 new_plan = stringToNodeWithLocations(
str);
945 elog(
WARNING,
"outfuncs/readfuncs failed to produce an equal plan tree");
958 TRACE_POSTGRESQL_QUERY_PLAN_DONE();
978 foreach(query_list, querytrees)
988 stmt->canSetTag = query->canSetTag;
991 stmt->stmt_len = query->stmt_len;
992 stmt->queryId = query->queryId;
1017 List *parsetree_list;
1020 bool was_logged =
false;
1021 bool use_implicit_block;
1031 TRACE_POSTGRESQL_QUERY_START(query_string);
1037 if (save_log_statement_stats)
1072 (
errmsg(
"statement: %s", query_string),
1091 use_implicit_block = (
list_length(parsetree_list) > 1);
1096 foreach(parsetree_item, parsetree_list)
1099 bool snapshot_set =
false;
1103 List *querytree_list,
1108 const char *cmdtagname;
1137 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1138 errmsg(
"current transaction is aborted, "
1139 "commands ignored until end of transaction block"),
1152 if (use_implicit_block)
1164 snapshot_set =
true;
1179 if (
lnext(parsetree_list, parsetree_item) != NULL)
1181 per_parsetree_context =
1183 "per-parsetree message context",
1286 if (
lnext(parsetree_list, parsetree_item) == NULL)
1297 if (use_implicit_block)
1341 if (per_parsetree_context)
1355 if (!parsetree_list)
1365 (
errmsg(
"duration: %s ms", msec_str),
1370 (
errmsg(
"duration: %s ms statement: %s",
1371 msec_str, query_string),
1377 if (save_log_statement_stats)
1380 TRACE_POSTGRESQL_QUERY_DONE(query_string);
1392 const char *stmt_name,
1398 List *parsetree_list;
1400 List *querytree_list;
1415 if (save_log_statement_stats)
1420 *stmt_name ? stmt_name :
"<unnamed>",
1444 is_named = (stmt_name[0] !=
'\0');
1455 unnamed_stmt_context =
1457 "unnamed prepared statement",
1475 (
errcode(ERRCODE_SYNTAX_ERROR),
1476 errmsg(
"cannot insert multiple commands into a prepared statement")));
1478 if (parsetree_list !=
NIL)
1480 bool snapshot_set =
false;
1495 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1496 errmsg(
"current transaction is aborted, "
1497 "commands ignored until end of transaction block"),
1513 snapshot_set =
true;
1534 raw_parse_tree = NULL;
1537 querytree_list =
NIL;
1546 if (unnamed_stmt_context)
1552 unnamed_stmt_context,
1601 (
errmsg(
"duration: %s ms", msec_str),
1606 (
errmsg(
"duration: %s ms parse %s: %s",
1608 *stmt_name ? stmt_name :
"<unnamed>",
1614 if (save_log_statement_stats)
1628 const char *portal_name;
1629 const char *stmt_name;
1631 int16 *pformats = NULL;
1634 int16 *rformats = NULL;
1639 char *saved_stmt_name;
1643 bool snapshot_set =
false;
1654 *portal_name ? portal_name :
"<unnamed>",
1655 *stmt_name ? stmt_name :
"<unnamed>")));
1658 if (stmt_name[0] !=
'\0')
1671 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
1672 errmsg(
"unnamed prepared statement does not exist")));
1684 if (save_log_statement_stats)
1700 if (numPFormats > 0)
1703 for (
int i = 0;
i < numPFormats;
i++)
1710 if (numPFormats > 1 && numPFormats != numParams)
1712 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1713 errmsg(
"bind message has %d parameter formats but %d parameters",
1714 numPFormats, numParams)));
1718 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1719 errmsg(
"bind message supplies %d parameters, but prepared statement \"%s\" requires %d",
1735 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1736 errmsg(
"current transaction is aborted, "
1737 "commands ignored until end of transaction block"),
1744 if (portal_name[0] ==
'\0')
1762 saved_stmt_name =
pstrdup(stmt_name);
1764 saved_stmt_name = NULL;
1773 if (numParams > 0 ||
1778 snapshot_set =
true;
1786 char **knownTextValues = NULL;
1798 params_errcxt.
arg = (
void *) &one_param_data;
1803 for (
int paramno = 0; paramno < numParams; paramno++)
1813 one_param_data.
paramno = paramno;
1817 isNull = (plength == -1);
1831 csave = pvalue[plength];
1832 pvalue[plength] =
'\0';
1841 if (numPFormats > 1)
1842 pformat = pformats[paramno];
1843 else if (numPFormats > 0)
1844 pformat = pformats[0];
1885 if (knownTextValues == NULL)
1889 knownTextValues[paramno] =
pstrdup(pstring);
1899 knownTextValues[paramno] =
1907 if (pstring != pbuf.
data)
1911 else if (pformat == 1)
1932 (
errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
1933 errmsg(
"incorrect binary data format in bind parameter %d",
1939 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1940 errmsg(
"unsupported format code: %d",
1947 pbuf.
data[plength] = csave;
1985 params_data.
params = params;
1988 params_errcxt.
arg = (
void *) ¶ms_data;
1993 if (numRFormats > 0)
1996 for (
int i = 0;
i < numRFormats;
i++)
2055 (
errmsg(
"duration: %s ms", msec_str),
2060 (
errmsg(
"duration: %s ms bind %s%s%s: %s",
2062 *stmt_name ? stmt_name :
"<unnamed>",
2063 *portal_name ?
"/" :
"",
2064 *portal_name ? portal_name :
"",
2071 if (save_log_statement_stats)
2092 const char *sourceText;
2093 const char *prepStmtName;
2096 bool is_xact_command;
2097 bool execute_is_fetch;
2098 bool was_logged =
false;
2102 const char *cmdtagname;
2113 (
errcode(ERRCODE_UNDEFINED_CURSOR),
2114 errmsg(
"portal \"%s\" does not exist", portal_name)));
2140 prepStmtName =
"<unnamed>";
2154 if (save_log_statement_stats)
2179 execute_is_fetch = !portal->
atStart;
2187 _(
"execute fetch from") :
2190 *portal_name ?
"/" :
"",
2191 *portal_name ? portal_name :
"",
2205 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2206 errmsg(
"current transaction is aborted, "
2207 "commands ignored until end of transaction block"),
2218 params_data.
params = portalParams;
2221 params_errcxt.
arg = (
void *) ¶ms_data;
2230 !execute_is_fetch && max_rows ==
FETCH_ALL,
2259 portalParams = NULL;
2305 (
errmsg(
"duration: %s ms", msec_str),
2310 (
errmsg(
"duration: %s ms %s %s%s%s: %s",
2313 _(
"execute fetch from") :
2316 *portal_name ?
"/" :
"",
2317 *portal_name ? portal_name :
"",
2324 if (save_log_statement_stats)
2325 ShowUsage(
"EXECUTE MESSAGE STATISTICS");
2350 foreach(stmt_item, stmt_list)
2387 bool exceeded_duration;
2388 bool exceeded_sample_duration;
2389 bool in_sample =
false;
2394 msecs = usecs / 1000;
2416 if (exceeded_sample_duration)
2424 secs * 1000 + msecs, usecs % 1000);
2425 if ((exceeded_duration || in_sample ||
xact_is_sampled) && !was_logged)
2446 foreach(parsetree_item, raw_parsetree_list)
2458 errdetail(
"prepare: %s", pstmt->plansource->query_string);
2482 if (
str &&
str[0] !=
'\0')
2498 errdetail(
"Abort reason: recovery conflict");
2514 errdetail(
"User was holding shared buffer pin for too long.");
2517 errdetail(
"User was holding a relation lock for too long.");
2520 errdetail(
"User was or might have been using tablespace that must be dropped.");
2523 errdetail(
"User query might have needed to see row versions that must be removed.");
2526 errdetail(
"User was using a logical replication slot that must be invalidated.");
2529 errdetail(
"User transaction caused buffer deadlock with recovery.");
2532 errdetail(
"User was connected to a database that must be dropped.");
2554 if (
data->paramno < 0)
2563 quotedval =
buf.data;
2568 if (
data->portalName &&
data->portalName[0] !=
'\0')
2571 errcontext(
"portal \"%s\" parameter $%d = %s",
2572 data->portalName,
data->paramno + 1, quotedval);
2575 data->portalName,
data->paramno + 1);
2580 errcontext(
"unnamed portal parameter $%d = %s",
2581 data->paramno + 1, quotedval);
2611 if (stmt_name[0] !=
'\0')
2624 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
2625 errmsg(
"unnamed prepared statement does not exist")));
2643 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2644 errmsg(
"current transaction is aborted, "
2645 "commands ignored until end of transaction block"),
2707 (
errcode(ERRCODE_UNDEFINED_CURSOR),
2708 errmsg(
"portal \"%s\" does not exist", portal_name)));
2721 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2722 errmsg(
"current transaction is aborted, "
2723 "commands ignored until end of transaction block"),
2780 #ifdef MEMORY_CONTEXT_CHECKING
2786 #ifdef SHOW_MEMORY_STATS
2878 sigprocmask(SIG_SETMASK, &
BlockSig, NULL);
2927 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2928 errmsg(
"terminating connection because of unexpected SIGQUIT signal")));
2933 (
errcode(ERRCODE_CRASH_SHUTDOWN),
2934 errmsg(
"terminating connection because of crash of another server process"),
2935 errdetail(
"The postmaster has commanded this server process to roll back"
2936 " the current transaction and exit, because another"
2937 " server process exited abnormally and possibly corrupted"
2939 errhint(
"In a moment you should be able to reconnect to the"
2940 " database and repeat your command.")));
2945 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2946 errmsg(
"terminating connection due to immediate shutdown command")));
3023 (
errcode(ERRCODE_FLOATING_POINT_EXCEPTION),
3024 errmsg(
"floating-point exception"),
3025 errdetail(
"An invalid floating-point operation was signaled. "
3026 "This probably means an out-of-range result or an "
3027 "invalid operation, such as division by zero.")));
3169 errmsg(
"canceling statement due to conflict with recovery"),
3188 ERRCODE_DATABASE_DROPPED :
3190 errmsg(
"terminating connection due to conflict with recovery"),
3192 errhint(
"In a moment you should be able to reconnect to the"
3193 " database and repeat your command.")));
3197 elog(
FATAL,
"unrecognized conflict mode: %d", (
int) reason);
3261 (
errcode(ERRCODE_QUERY_CANCELED),
3262 errmsg(
"canceling authentication due to timeout")));
3265 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3266 errmsg(
"terminating autovacuum process due to administrator command")));
3269 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3270 errmsg(
"terminating logical replication worker due to administrator command")));
3284 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3285 errmsg(
"terminating background worker \"%s\" due to administrator command",
3289 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
3290 errmsg(
"terminating connection due to administrator command")));
3320 (
errcode(ERRCODE_CONNECTION_FAILURE),
3321 errmsg(
"connection to client lost")));
3346 bool lock_timeout_occurred;
3347 bool stmt_timeout_occurred;
3364 if (lock_timeout_occurred && stmt_timeout_occurred &&
3366 lock_timeout_occurred =
false;
3368 if (lock_timeout_occurred)
3372 (
errcode(ERRCODE_LOCK_NOT_AVAILABLE),
3373 errmsg(
"canceling statement due to lock timeout")));
3375 if (stmt_timeout_occurred)
3379 (
errcode(ERRCODE_QUERY_CANCELED),
3380 errmsg(
"canceling statement due to statement timeout")));
3386 (
errcode(ERRCODE_QUERY_CANCELED),
3387 errmsg(
"canceling autovacuum task")));
3399 (
errcode(ERRCODE_QUERY_CANCELED),
3400 errmsg(
"canceling statement due to user request")));
3420 (
errcode(ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT),
3421 errmsg(
"terminating connection due to idle-in-transaction timeout")));
3433 (
errcode(ERRCODE_TRANSACTION_TIMEOUT),
3434 errmsg(
"terminating connection due to transaction timeout")));
3446 (
errcode(ERRCODE_IDLE_SESSION_TIMEOUT),
3447 errmsg(
"terminating connection due to idle-session timeout")));
3483 #ifndef HAVE__BUILTIN_FRAME_ADDRESS
3495 #ifdef HAVE__BUILTIN_FRAME_ADDRESS
3536 (
errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
3537 errmsg(
"stack depth limit exceeded"),
3538 errhint(
"Increase the configuration parameter max_stack_depth (currently %dkB), "
3539 "after ensuring the platform's stack depth limit is adequate.",
3558 if (stack_depth < 0)
3559 stack_depth = -stack_depth;
3580 long newval_bytes = *
newval * 1024L;
3587 GUC_check_errhint(
"Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent.");
3597 long newval_bytes =
newval * 1024L;
3610 GUC_check_errdetail(
"client_connection_check_interval must be set to 0 on this platform.");
3647 "log_parser_stats, log_planner_stats, "
3648 "or log_executor_stats is true.");
3685 sprintf(debugstr,
"debug%d", debug_flag);
3696 if (debug_flag >= 2)
3698 if (debug_flag >= 3)
3700 if (debug_flag >= 4)
3702 if (debug_flag >= 5)
3710 const char *tmp = NULL;
3715 tmp =
"enable_seqscan";
3718 tmp =
"enable_indexscan";
3721 tmp =
"enable_indexonlyscan";
3724 tmp =
"enable_bitmapscan";
3727 tmp =
"enable_tidscan";
3730 tmp =
"enable_nestloop";
3733 tmp =
"enable_mergejoin";
3736 tmp =
"enable_hashjoin";
3756 return "log_parser_stats";
3757 else if (
optarg[1] ==
'l')
3758 return "log_planner_stats";
3762 return "log_executor_stats";
3803 if (argc > 1 && strcmp(argv[1],
"--single") == 0)
3814 #ifdef HAVE_INT_OPTERR
3829 while ((
flag =
getopt(argc, argv,
"B:bC:c:D:d:EeFf:h:ijk:lN:nOPp:r:S:sTt:v:W:-:")) != -1)
3858 (
errcode(ERRCODE_SYNTAX_ERROR),
3859 errmsg(
"--%s requires a value",
3863 (
errcode(ERRCODE_SYNTAX_ERROR),
3864 errmsg(
"-c %s requires a value",
4002 if (errs || argc !=
optind)
4010 errcode(ERRCODE_SYNTAX_ERROR),
4011 errmsg(
"invalid command-line argument for server process: %s", argv[
optind]),
4015 errcode(ERRCODE_SYNTAX_ERROR),
4016 errmsg(
"%s: invalid command-line argument: %s",
4026 #ifdef HAVE_INT_OPTRESET
4045 const char *
dbname = NULL;
4068 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
4069 errmsg(
"%s: no database nor user name specified",
4154 sigjmp_buf local_sigjmp_buf;
4157 volatile bool send_ready_for_query =
true;
4158 volatile bool idle_in_transaction_timeout_enabled =
false;
4159 volatile bool idle_session_timeout_enabled =
false;
4289 printf(
"\nPostgreSQL stand-alone backend %s\n", PG_VERSION);
4308 "RowDescriptionContext",
4339 if (sigsetjmp(local_sigjmp_buf, 1) != 0)
4368 idle_in_transaction_timeout_enabled =
false;
4369 idle_session_timeout_enabled =
false;
4445 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4446 errmsg(
"terminating connection because protocol synchronization was lost")));
4456 send_ready_for_query =
true;
4477 old_valgrind_error_count = VALGRIND_COUNT_ERRORS;
4511 if (send_ready_for_query)
4522 idle_in_transaction_timeout_enabled =
true;
4536 idle_in_transaction_timeout_enabled =
true;
4569 if (stats_timeout > 0)
4588 idle_session_timeout_enabled =
true;
4598 send_ready_for_query =
false;
4622 if (idle_in_transaction_timeout_enabled)
4625 idle_in_transaction_timeout_enabled =
false;
4627 if (idle_session_timeout_enabled)
4630 idle_session_timeout_enabled =
false;
4666 const char *query_string;
4684 send_ready_for_query =
true;
4690 const char *stmt_name;
4691 const char *query_string;
4693 Oid *paramTypes = NULL;
4706 for (
int i = 0;
i < numParams;
i++)
4712 paramTypes, numParams);
4735 const char *portal_name;
4785 send_ready_for_query =
true;
4791 const char *close_target;
4802 if (close_target[0] !=
'\0')
4821 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4822 errmsg(
"invalid CLOSE message subtype %d",
4837 const char *describe_target;
4848 switch (describe_type)
4858 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4859 errmsg(
"invalid DESCRIBE message subtype %d",
4878 send_ready_for_query =
true;
4924 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4925 errmsg(
"invalid frontend message type %d",
4945 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4946 errmsg(
"fastpath function calls not supported in a replication connection")));
4949 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4950 errmsg(
"extended query protocol not supported in a replication connection")));
4963 #if defined(HAVE_GETRLIMIT)
4964 static long val = 0;
4971 if (getrlimit(RLIMIT_STACK, &rlim) < 0)
4973 else if (rlim.rlim_cur == RLIM_INFINITY)
4976 else if (rlim.rlim_cur >= LONG_MAX)
4979 val = rlim.rlim_cur;
4984 return WIN32_STACK_RLIMIT;
4990 static struct timeval
Save_t;
5003 struct timeval
user,
5005 struct timeval elapse_t;
5011 memcpy((
char *) &sys, (
char *) &r.
ru_stime,
sizeof(sys));
5012 if (elapse_t.tv_usec <
Save_t.tv_usec)
5015 elapse_t.tv_usec += 1000000;
5036 "!\t%ld.%06ld s user, %ld.%06ld s system, %ld.%06ld s elapsed\n",
5041 (
long) (elapse_t.tv_sec -
Save_t.tv_sec),
5042 (
long) (elapse_t.tv_usec -
Save_t.tv_usec));
5044 "!\t[%ld.%06ld s user, %ld.%06ld s system total]\n",
5046 (
long)
user.tv_usec,
5048 (
long) sys.tv_usec);
5058 "!\t%ld kB max resident size\n",
5068 "!\t%ld/%ld [%ld/%ld] filesystem blocks in/out\n",
5069 r.ru_inblock -
Save_r.ru_inblock,
5071 r.ru_oublock -
Save_r.ru_oublock,
5072 r.ru_inblock, r.ru_oublock);
5074 "!\t%ld/%ld [%ld/%ld] page faults/reclaims, %ld [%ld] swaps\n",
5075 r.ru_majflt -
Save_r.ru_majflt,
5076 r.ru_minflt -
Save_r.ru_minflt,
5077 r.ru_majflt, r.ru_minflt,
5078 r.ru_nswap -
Save_r.ru_nswap,
5081 "!\t%ld [%ld] signals rcvd, %ld/%ld [%ld/%ld] messages rcvd/sent\n",
5082 r.ru_nsignals -
Save_r.ru_nsignals,
5084 r.ru_msgrcv -
Save_r.ru_msgrcv,
5085 r.ru_msgsnd -
Save_r.ru_msgsnd,
5086 r.ru_msgrcv, r.ru_msgsnd);
5088 "!\t%ld/%ld [%ld/%ld] voluntary/involuntary context switches\n",
5089 r.ru_nvcsw -
Save_r.ru_nvcsw,
5090 r.ru_nivcsw -
Save_r.ru_nivcsw,
5091 r.ru_nvcsw, r.ru_nivcsw);
5095 if (
str.data[
str.len - 1] ==
'\n')
5096 str.data[--
str.len] =
'\0';
5122 msecs = usecs / 1000;
5130 (
errmsg(
"disconnection: session time: %d:%02d:%02d.%03d "
5131 "user=%s database=%s host=%s%s%s",
5132 hours, minutes, seconds, msecs,
5133 port->user_name,
port->database_name,
port->remote_host,
5134 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
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)
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 EventTriggerOnLogin(void)
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 TransactionTimeoutPending
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
#define INJECTION_POINT(name)
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 MemoryContextReset(MemoryContext context)
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 RESUME_INTERRUPTS()
#define HOLD_CANCEL_INTERRUPTS()
#define INIT_PG_LOAD_SESSION_LIBS
#define AmAutoVacuumWorkerProcess()
#define RESUME_CANCEL_INTERRUPTS()
#define AmBackgroundWorkerProcess()
#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)
void assign_transaction_timeout(int newval, void *extra)
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, bits32 flags, 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)
List * QueryRewrite(Query *parsetree)
void ProcessCatchupInterrupt(void)
volatile sig_atomic_t catchupInterruptPending
void ReplicationSlotCleanup(void)
ReplicationSlot * MyReplicationSlot
void ReplicationSlotRelease(void)
Snapshot GetTransactionSnapshot(void)
void PushActiveSnapshot(Snapshot snapshot)
bool ActiveSnapshotSet(void)
void InvalidateCatalogSnapshotConditionally(void)
void PopActiveSnapshot(void)
bool IsWaitingForLock(void)
int IdleInTransactionSessionTimeout
int GetStartupBufferPinWaitBufId(void)
void LockErrorCleanup(void)
void CheckDeadLockAlert(void)
void resetStringInfo(StringInfo str)
void appendStringInfo(StringInfo str, const char *fmt,...)
void appendStringInfoString(StringInfo str, const char *s)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
static void initReadOnlyStringInfo(StringInfo str, char *data, int len)
void appendStringInfoStringQuoted(StringInfo str, const char *s, int maxlen)
char bgw_type[BGW_MAXLEN]
const char * query_string
struct RawStmt * raw_parse_tree
struct ErrorContextCallback * previous
void(* callback)(void *arg)
bool recoveryConflictPending
ParamExternData params[FLEXIBLE_ARRAY_MEMBER]
MemoryContext portalContext
ParamListInfo portalParams
const char * prepStmtName
CachedPlanSource * plansource
void(* rDestroy)(DestReceiver *self)
void enable_timeout_after(TimeoutId id, int delay_ms)
bool get_timeout_active(TimeoutId id)
void disable_all_timeouts(bool keep_indicators)
TimestampTz get_timeout_finish_time(TimeoutId id)
void InitializeTimeouts(void)
void disable_timeout(TimeoutId id, bool keep_indicator)
bool get_timeout_indicator(TimeoutId id, bool reset_indicator)
@ IDLE_IN_TRANSACTION_SESSION_TIMEOUT
@ IDLE_STATS_UPDATE_TIMEOUT
@ CLIENT_CONNECTION_CHECK_TIMEOUT
CommandTag CreateCommandTag(Node *parsetree)
LogStmtLevel GetCommandLogLevel(Node *parsetree)
void WalSndErrorCleanup(void)
bool exec_replication_command(const char *cmd_string)
int gettimeofday(struct timeval *tp, void *tzp)
bool IsTransactionOrTransactionBlock(void)
void BeginImplicitTransactionBlock(void)
bool IsTransactionState(void)
void CommandCounterIncrement(void)
void StartTransactionCommand(void)
bool IsAbortedTransactionBlockState(void)
void EndImplicitTransactionBlock(void)
bool IsSubTransaction(void)
void SetCurrentStatementStartTimestamp(void)
TimestampTz GetCurrentStatementStartTimestamp(void)
void CommitTransactionCommand(void)
void AbortCurrentTransaction(void)
#define XACT_FLAGS_PIPELINING
#define XACT_FLAGS_NEEDIMMEDIATECOMMIT
void InitializeWalConsistencyChecking(void)
void LocalProcessControlFile(bool reset)