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
120 #if defined(__ia64__) || defined(__ia64)
121 char *register_stack_base_ptr =
NULL;
234 if (inBuf->
len > 1 &&
235 inBuf->
data[inBuf->
len - 1] ==
'\n' &&
236 inBuf->
data[inBuf->
len - 2] ==
';')
248 if (inBuf->
len > 0 &&
249 inBuf->
data[inBuf->
len - 1] ==
'\\')
252 inBuf->
data[--inBuf->
len] =
'\0';
270 if (c == EOF && inBuf->
len == 0)
284 printf(
"statement: %s\n", inBuf->
data);
340 (
errcode(ERRCODE_CONNECTION_FAILURE),
341 errmsg(
"unexpected EOF on client connection with an open transaction")));
351 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
352 errmsg(
"unexpected EOF on client connection")));
376 (
errcode(ERRCODE_CONNECTION_FAILURE),
377 errmsg(
"unexpected EOF on client connection with an open transaction")));
387 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
388 errmsg(
"unexpected EOF on client connection")));
403 (
errcode(ERRCODE_CONNECTION_FAILURE),
404 errmsg(
"unexpected EOF on client connection with an open transaction")));
414 (
errcode(ERRCODE_CONNECTION_DOES_NOT_EXIST),
415 errmsg(
"unexpected EOF on client connection")));
437 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
438 errmsg(
"invalid frontend message type %d", qtype)));
449 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
450 errmsg(
"invalid frontend message type %d", qtype)));
460 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
461 errmsg(
"invalid frontend message type %d", qtype)));
472 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
473 errmsg(
"invalid frontend message type %d", qtype)));
524 int save_errno = errno;
562 int save_errno = errno;
604 List *raw_parsetree_list;
606 TRACE_POSTGRESQL_QUERY_PARSE_START(query_string);
611 raw_parsetree_list =
raw_parser(query_string);
616 #ifdef COPY_PARSE_PLAN_TREES
622 if (!
equal(new_list, raw_parsetree_list))
623 elog(
WARNING,
"copyObject() failed to produce an equal raw parse tree");
629 TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);
631 return raw_parsetree_list;
645 Oid *paramTypes,
int numParams)
648 List *querytree_list;
650 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
658 query =
parse_analyze(parsetree, query_string, paramTypes, numParams);
668 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
670 return querytree_list;
680 const char *query_string,
682 void *parserSetupArg)
686 List *querytree_list;
690 TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
700 (*parserSetup) (pstate, parserSetupArg);
705 (*post_parse_analyze_hook) (pstate, query);
717 TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
719 return querytree_list;
731 List *querytree_list;
754 #ifdef COPY_PARSE_PLAN_TREES
761 if (!
equal(new_list, querytree_list))
762 elog(
WARNING,
"copyObject() failed to produce equal parse tree");
772 return querytree_list;
792 TRACE_POSTGRESQL_QUERY_PLAN_START();
798 plan =
planner(querytree, cursorOptions, boundParams);
803 #ifdef COPY_PARSE_PLAN_TREES
814 if (!
equal(new_plan, plan))
815 elog(
WARNING,
"copyObject() failed to produce an equal plan tree");
828 TRACE_POSTGRESQL_QUERY_PLAN_DONE();
845 foreach(query_list, querytrees)
860 stmt_list =
lappend(stmt_list, stmt);
877 List *parsetree_list;
880 bool was_logged =
false;
892 TRACE_POSTGRESQL_QUERY_START(query_string);
898 if (save_log_statement_stats)
933 (
errmsg(
"statement: %s", query_string),
956 foreach(parsetree_item, parsetree_list)
959 bool snapshot_set =
false;
960 const char *commandTag;
962 List *querytree_list,
991 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
992 errmsg(
"current transaction is aborted, "
993 "commands ignored until end of transaction block"),
1008 snapshot_set =
true;
1153 if (!parsetree_list)
1163 (
errmsg(
"duration: %s ms", msec_str),
1168 (
errmsg(
"duration: %s ms statement: %s",
1169 msec_str, query_string),
1175 if (save_log_statement_stats)
1178 TRACE_POSTGRESQL_QUERY_DONE(query_string);
1190 const char *stmt_name,
1196 List *parsetree_list;
1197 Node *raw_parse_tree;
1198 const char *commandTag;
1199 List *querytree_list;
1214 if (save_log_statement_stats)
1219 *stmt_name ? stmt_name :
"<unnamed>",
1242 is_named = (stmt_name[0] !=
'\0');
1253 unnamed_stmt_context =
1255 "unnamed prepared statement",
1275 (
errcode(ERRCODE_SYNTAX_ERROR),
1276 errmsg(
"cannot insert multiple commands into a prepared statement")));
1278 if (parsetree_list !=
NIL)
1281 bool snapshot_set =
false;
1302 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1303 errmsg(
"current transaction is aborted, "
1304 "commands ignored until end of transaction block"),
1319 snapshot_set =
true;
1338 for (i = 0; i < numParams; i++)
1340 Oid ptype = paramTypes[
i];
1344 (
errcode(ERRCODE_INDETERMINATE_DATATYPE),
1345 errmsg(
"could not determine data type of parameter $%d",
1361 raw_parse_tree =
NULL;
1364 querytree_list =
NIL;
1373 if (unnamed_stmt_context)
1379 unnamed_stmt_context,
1403 unnamed_stmt_psrc = psrc;
1428 (
errmsg(
"duration: %s ms", msec_str),
1433 (
errmsg(
"duration: %s ms parse %s: %s",
1435 *stmt_name ? stmt_name :
"<unnamed>",
1441 if (save_log_statement_stats)
1455 const char *portal_name;
1456 const char *stmt_name;
1466 char *saved_stmt_name;
1470 bool snapshot_set =
false;
1479 *portal_name ? portal_name :
"<unnamed>",
1480 *stmt_name ? stmt_name :
"<unnamed>")));
1483 if (stmt_name[0] !=
'\0')
1496 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
1497 errmsg(
"unnamed prepared statement does not exist")));
1509 if (save_log_statement_stats)
1524 if (numPFormats > 0)
1529 for (i = 0; i < numPFormats; i++)
1536 if (numPFormats > 1 && numPFormats != numParams)
1538 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1539 errmsg(
"bind message has %d parameter formats but %d parameters",
1540 numPFormats, numParams)));
1544 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
1545 errmsg(
"bind message supplies %d parameters, but prepared statement \"%s\" requires %d",
1560 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1561 errmsg(
"current transaction is aborted, "
1562 "commands ignored until end of transaction block"),
1569 if (portal_name[0] ==
'\0')
1587 saved_stmt_name =
pstrdup(stmt_name);
1589 saved_stmt_name =
NULL;
1598 if (numParams > 0 ||
1603 snapshot_set =
true;
1623 for (paramno = 0; paramno < numParams; paramno++)
1634 isNull = (plength == -1);
1648 pbuf.
data = (
char *) pvalue;
1649 pbuf.
maxlen = plength + 1;
1653 csave = pbuf.
data[plength];
1654 pbuf.
data[plength] =
'\0';
1662 if (numPFormats > 1)
1663 pformat = pformats[paramno];
1664 else if (numPFormats > 0)
1665 pformat = pformats[0];
1689 if (pstring && pstring != pbuf.
data)
1692 else if (pformat == 1)
1713 (
errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
1714 errmsg(
"incorrect binary data format in bind parameter %d",
1720 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
1721 errmsg(
"unsupported format code: %d",
1728 pbuf.
data[plength] = csave;
1749 if (numRFormats > 0)
1754 for (i = 0; i < numRFormats; i++)
1807 (
errmsg(
"duration: %s ms", msec_str),
1812 (
errmsg(
"duration: %s ms bind %s%s%s: %s",
1814 *stmt_name ? stmt_name :
"<unnamed>",
1815 *portal_name ?
"/" :
"",
1816 *portal_name ? portal_name :
"",
1823 if (save_log_statement_stats)
1842 const char *sourceText;
1843 const char *prepStmtName;
1846 bool is_xact_command;
1847 bool execute_is_fetch;
1848 bool was_logged =
false;
1859 (
errcode(ERRCODE_UNDEFINED_CURSOR),
1860 errmsg(
"portal \"%s\" does not exist", portal_name)));
1881 if (is_xact_command)
1887 prepStmtName =
"<unnamed>";
1893 portalParams =
NULL;
1901 prepStmtName =
"<unnamed>";
1914 if (save_log_statement_stats)
1939 execute_is_fetch = !portal->
atStart;
1947 _(
"execute fetch from") :
1950 *portal_name ?
"/" :
"",
1951 *portal_name ? portal_name :
"",
1965 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
1966 errmsg(
"current transaction is aborted, "
1967 "commands ignored until end of transaction block"),
1990 if (is_xact_command)
2024 (
errmsg(
"duration: %s ms", msec_str),
2029 (
errmsg(
"duration: %s ms %s %s%s%s: %s",
2032 _(
"execute fetch from") :
2035 *portal_name ?
"/" :
"",
2036 *portal_name ? portal_name :
"",
2043 if (save_log_statement_stats)
2044 ShowUsage(
"EXECUTE MESSAGE STATISTICS");
2067 foreach(stmt_item, stmt_list)
2106 msecs = usecs / 1000;
2121 secs * 1000 + msecs, usecs % 1000);
2122 if (exceeded && !was_logged)
2143 foreach(parsetree_item, raw_parsetree_list)
2184 for (paramno = 0; paramno < params->
numParams; paramno++)
2193 paramno > 0 ?
", " :
"",
2207 for (p = pstring; *p; p++)
2237 errdetail(
"abort reason: recovery conflict");
2253 errdetail(
"User was holding shared buffer pin for too long.");
2256 errdetail(
"User was holding a relation lock for too long.");
2259 errdetail(
"User was or might have been using tablespace that must be dropped.");
2262 errdetail(
"User query might have needed to see row versions that must be removed.");
2265 errdetail(
"User transaction caused buffer deadlock with recovery.");
2268 errdetail(
"User was connected to a database that must be dropped.");
2300 if (stmt_name[0] !=
'\0')
2313 (
errcode(ERRCODE_UNDEFINED_PSTATEMENT),
2314 errmsg(
"unnamed prepared statement does not exist")));
2332 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2333 errmsg(
"current transaction is aborted, "
2334 "commands ignored until end of transaction block"),
2393 (
errcode(ERRCODE_UNDEFINED_CURSOR),
2394 errmsg(
"portal \"%s\" does not exist", portal_name)));
2407 (
errcode(ERRCODE_IN_FAILED_SQL_TRANSACTION),
2408 errmsg(
"current transaction is aborted, "
2409 "commands ignored until end of transaction block"),
2461 #ifdef MEMORY_CONTEXT_CHECKING
2467 #ifdef SHOW_MEMORY_STATS
2548 if (unnamed_stmt_psrc)
2552 unnamed_stmt_psrc =
NULL;
2596 (
errcode(ERRCODE_CRASH_SHUTDOWN),
2597 errmsg(
"terminating connection because of crash of another server process"),
2598 errdetail(
"The postmaster has commanded this server process to roll back"
2599 " the current transaction and exit, because another"
2600 " server process exited abnormally and possibly corrupted"
2602 errhint(
"In a moment you should be able to reconnect to the"
2603 " database and repeat your command.")));
2633 int save_errno = errno;
2664 int save_errno = errno;
2687 (
errcode(ERRCODE_FLOATING_POINT_EXCEPTION),
2688 errmsg(
"floating-point exception"),
2689 errdetail(
"An invalid floating-point operation was signaled. "
2690 "This probably means an out-of-range result or an "
2691 "invalid operation, such as division by zero.")));
2698 int save_errno = errno;
2715 int save_errno = errno;
2799 elog(
FATAL,
"unrecognized conflict mode: %d",
2850 (
errcode(ERRCODE_QUERY_CANCELED),
2851 errmsg(
"canceling authentication due to timeout")));
2854 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2855 errmsg(
"terminating autovacuum process due to administrator command")));
2860 (
errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2861 errmsg(
"terminating connection due to conflict with recovery"),
2870 (
errcode(ERRCODE_DATABASE_DROPPED),
2871 errmsg(
"terminating connection due to conflict with recovery"),
2876 (
errcode(ERRCODE_ADMIN_SHUTDOWN),
2877 errmsg(
"terminating connection due to administrator command")));
2886 (
errcode(ERRCODE_CONNECTION_FAILURE),
2887 errmsg(
"connection to client lost")));
2903 (
errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2904 errmsg(
"terminating connection due to conflict with recovery"),
2906 errhint(
"In a moment you should be able to reconnect to the"
2907 " database and repeat your command.")));
2912 bool lock_timeout_occurred;
2913 bool stmt_timeout_occurred;
2946 if (lock_timeout_occurred && stmt_timeout_occurred &&
2948 lock_timeout_occurred =
false;
2950 if (lock_timeout_occurred)
2954 (
errcode(ERRCODE_LOCK_NOT_AVAILABLE),
2955 errmsg(
"canceling statement due to lock timeout")));
2957 if (stmt_timeout_occurred)
2961 (
errcode(ERRCODE_QUERY_CANCELED),
2962 errmsg(
"canceling statement due to statement timeout")));
2968 (
errcode(ERRCODE_QUERY_CANCELED),
2969 errmsg(
"canceling autovacuum task")));
2977 (
errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
2978 errmsg(
"canceling statement due to conflict with recovery"),
2991 (
errcode(ERRCODE_QUERY_CANCELED),
2992 errmsg(
"canceling statement due to user request")));
3001 (
errcode(ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT),
3002 errmsg(
"terminating connection due to idle-in-transaction timeout")));
3022 #if defined(__ia64__) || defined(__ia64)
3024 #if defined(__hpux) && !defined(__GNUC__) && !defined(__INTEL_COMPILER)
3026 #include <ia64/sys/inline.h>
3027 #define ia64_get_bsp() ((char *) (_Asm_mov_from_ar(_AREG_BSP, _NO_FENCE)))
3028 #elif defined(__INTEL_COMPILER)
3030 #include <asm/ia64regs.h>
3031 #define ia64_get_bsp() ((char *) __getReg(_IA64_REG_AR_BSP))
3034 static __inline__
char *
3040 __asm__ __volatile__(
3062 #if defined(__ia64__) || defined(__ia64)
3064 old.register_stack_base_ptr = register_stack_base_ptr;
3071 #if defined(__ia64__) || defined(__ia64)
3072 register_stack_base_ptr = ia64_get_bsp();
3090 #if defined(__ia64__) || defined(__ia64)
3092 register_stack_base_ptr = base.register_stack_base_ptr;
3115 (
errcode(ERRCODE_STATEMENT_TOO_COMPLEX),
3116 errmsg(
"stack depth limit exceeded"),
3117 errhint(
"Increase the configuration parameter \"max_stack_depth\" (currently %dkB), "
3118 "after ensuring the platform's stack depth limit is adequate.",
3137 if (stack_depth < 0)
3138 stack_depth = -stack_depth;
3160 #if defined(__ia64__) || defined(__ia64)
3161 stack_depth = (long) (ia64_get_bsp() - register_stack_base_ptr);
3164 register_stack_base_ptr !=
NULL)
3175 long newval_bytes = *newval * 1024L;
3182 GUC_check_errhint(
"Increase the platform's stack depth limit via \"ulimit -s\" or local equivalent.");
3192 long newval_bytes = newval * 1024L;
3211 sprintf(debugstr,
"debug%d", debug_flag);
3222 if (debug_flag >= 2)
3224 if (debug_flag >= 3)
3226 if (debug_flag >= 4)
3228 if (debug_flag >= 5)
3236 const char *tmp =
NULL;
3241 tmp =
"enable_seqscan";
3244 tmp =
"enable_indexscan";
3247 tmp =
"enable_indexonlyscan";
3250 tmp =
"enable_bitmapscan";
3253 tmp =
"enable_tidscan";
3256 tmp =
"enable_nestloop";
3259 tmp =
"enable_mergejoin";
3262 tmp =
"enable_hashjoin";
3282 return "log_parser_stats";
3283 else if (
optarg[1] ==
'l')
3284 return "log_planner_stats";
3288 return "log_executor_stats";
3329 if (argc > 1 && strcmp(argv[1],
"--single") == 0)
3340 #ifdef HAVE_INT_OPTERR
3355 while ((flag =
getopt(argc, argv,
"B:bc:C:D:d:EeFf:h:ijk:lN:nOo:Pp:r:S:sTt:v:W:-:")) != -1)
3502 (
errcode(ERRCODE_SYNTAX_ERROR),
3503 errmsg(
"--%s requires a value",
3507 (
errcode(ERRCODE_SYNTAX_ERROR),
3508 errmsg(
"-c %s requires a value",
3530 if (!errs && dbname && *dbname ==
NULL && argc -
optind >= 1)
3531 *dbname = strdup(argv[
optind++]);
3533 if (errs || argc !=
optind)
3541 (
errcode(ERRCODE_SYNTAX_ERROR),
3542 errmsg(
"invalid command-line argument for server process: %s", argv[
optind]),
3546 (
errcode(ERRCODE_SYNTAX_ERROR),
3547 errmsg(
"%s: invalid command-line argument: %s",
3557 #ifdef HAVE_INT_OPTRESET
3581 sigjmp_buf local_sigjmp_buf;
3582 volatile bool send_ready_for_query =
true;
3583 bool disable_idle_in_transaction_timeout =
false;
3608 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
3609 errmsg(
"%s: no database nor user name specified",
3787 printf(
"\nPostgreSQL stand-alone backend %s\n", PG_VERSION);
3829 if (sigsetjmp(local_sigjmp_buf, 1) != 0)
3920 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
3921 errmsg(
"terminating connection because protocol synchronization was lost")));
3931 send_ready_for_query =
true;
3967 if (send_ready_for_query)
3977 disable_idle_in_transaction_timeout =
true;
3990 disable_idle_in_transaction_timeout =
true;
4005 send_ready_for_query =
false;
4036 if (disable_idle_in_transaction_timeout)
4039 disable_idle_in_transaction_timeout =
false;
4063 const char *query_string;
4076 send_ready_for_query =
true;
4082 const char *stmt_name;
4083 const char *query_string;
4100 for (i = 0; i < numParams; i++)
4106 paramTypes, numParams);
4125 const char *portal_name;
4183 send_ready_for_query =
true;
4189 const char *close_target;
4200 if (close_target[0] !=
'\0')
4219 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4220 errmsg(
"invalid CLOSE message subtype %d",
4233 const char *describe_target;
4244 switch (describe_type)
4254 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4255 errmsg(
"invalid DESCRIBE message subtype %d",
4271 send_ready_for_query =
true;
4311 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4312 errmsg(
"invalid frontend message type %d",
4330 if (firstchar ==
'F')
4332 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4333 errmsg(
"fastpath function calls not supported in a replication connection")));
4336 (
errcode(ERRCODE_PROTOCOL_VIOLATION),
4337 errmsg(
"extended query protocol not supported in a replication connection")));
4350 #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_STACK)
4351 static long val = 0;
4358 if (getrlimit(RLIMIT_STACK, &rlim) < 0)
4360 else if (rlim.rlim_cur == RLIM_INFINITY)
4363 else if (rlim.rlim_cur >= LONG_MAX)
4366 val = rlim.rlim_cur;
4370 #if defined(WIN32) || defined(__CYGWIN__)
4372 return WIN32_STACK_RLIMIT;
4394 struct timeval user,
4396 struct timeval elapse_t;
4401 memcpy((
char *) &user, (
char *) &r.
ru_utime,
sizeof(user));
4402 memcpy((
char *) &sys, (
char *) &r.
ru_stime,
sizeof(sys));
4403 if (elapse_t.tv_usec <
Save_t.tv_usec)
4406 elapse_t.tv_usec += 1000000;
4430 "!\t%ld.%06ld elapsed %ld.%06ld user %ld.%06ld system sec\n",
4431 (
long) (elapse_t.tv_sec -
Save_t.tv_sec),
4432 (
long) (elapse_t.tv_usec -
Save_t.tv_usec),
4438 "!\t[%ld.%06ld user %ld.%06ld sys total]\n",
4440 (
long) user.tv_usec,
4442 (
long) sys.tv_usec);
4443 #if defined(HAVE_GETRUSAGE)
4445 "!\t%ld/%ld [%ld/%ld] filesystem blocks in/out\n",
4446 r.ru_inblock -
Save_r.ru_inblock,
4448 r.ru_oublock -
Save_r.ru_oublock,
4449 r.ru_inblock, r.ru_oublock);
4451 "!\t%ld/%ld [%ld/%ld] page faults/reclaims, %ld [%ld] swaps\n",
4452 r.ru_majflt -
Save_r.ru_majflt,
4453 r.ru_minflt -
Save_r.ru_minflt,
4454 r.ru_majflt, r.ru_minflt,
4455 r.ru_nswap -
Save_r.ru_nswap,
4458 "!\t%ld [%ld] signals rcvd, %ld/%ld [%ld/%ld] messages rcvd/sent\n",
4459 r.ru_nsignals -
Save_r.ru_nsignals,
4461 r.ru_msgrcv -
Save_r.ru_msgrcv,
4462 r.ru_msgsnd -
Save_r.ru_msgsnd,
4463 r.ru_msgrcv, r.ru_msgsnd);
4465 "!\t%ld/%ld [%ld/%ld] voluntary/involuntary context switches\n",
4466 r.ru_nvcsw -
Save_r.ru_nvcsw,
4467 r.ru_nivcsw -
Save_r.ru_nivcsw,
4468 r.ru_nvcsw, r.ru_nivcsw);
4472 if (str.
data[str.
len - 1] ==
'\n')
4499 msecs = usecs / 1000;
4507 (
errmsg(
"disconnection: session time: %d:%02d:%02d.%03d "
4508 "user=%s database=%s host=%s%s%s",
4509 hours, minutes, seconds, msecs,
pg_stack_base_t set_stack_base(void)
void ProcessCatchupInterrupt(void)
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)
void(* rDestroy)(DestReceiver *self)
#define IsA(nodeptr, _type_)
int gettimeofday(struct timeval *tp, struct timezone *tzp)
void MemoryContextDelete(MemoryContext context)
bool IsWaitingForLock(void)
void RecoveryConflictInterrupt(ProcSignalReason reason)
#define HOLD_CANCEL_INTERRUPTS()
List * QueryRewrite(Query *parsetree)
void BeginReportingGUCOptions(void)
int errhint(const char *fmt,...)
void getTypeOutputInfo(Oid type, Oid *typOutput, bool *typIsVarlena)
void PortalSetResultFormat(Portal portal, int nFormats, int16 *formats)
int GetOldFunctionMessage(StringInfo buf)
List * raw_parser(const char *str)
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)
volatile bool IdleInTransactionSessionTimeoutPending
bool equal(const void *a, const void *b)
void PortalDefineQuery(Portal portal, const char *prepStmtName, const char *sourceText, const char *commandTag, List *stmts, CachedPlan *cplan)
static volatile sig_atomic_t got_SIGHUP
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)
CachedPlanSource * plansource
void ShowUsage(const char *title)
void MemoryContextSetParent(MemoryContext context, MemoryContext new_parent)
Portal GetPortalByName(const char *name)
#define CURSOR_OPT_BINARY
char * pstrdup(const char *in)
void CommitTransactionCommand(void)
void InitStandaloneProcess(const char *argv0)
void ParseLongOption(const char *string, char **name, char **value)
void ValidatePgVersion(const char *path)
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
void set_ps_display(const char *activity, bool force)
static bool IsTransactionStmtList(List *parseTrees)
List * pg_analyze_and_rewrite_params(Node *parsetree, const char *query_string, ParserSetupHook parserSetup, void *parserSetupArg)
static void forbidden_in_wal_sender(char firstchar)
int errcode(int sqlerrcode)
int errhidestmt(bool hide_stmt)
bool IsTransactionOrTransactionBlock(void)
const char * get_stats_option_name(const char *arg)
static List * new_list(NodeTag type)
#define SetProcessingMode(mode)
static int errdetail_abort(void)
int snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3
void PopActiveSnapshot(void)
void set_debug_options(int debug_flag, GucContext context, GucSource source)
void BeginCommand(const char *commandTag, CommandDest dest)
ParserSetupHook parserSetup
struct ParamListInfoData * ParamListInfo
int getrusage(int who, struct rusage *rusage)
#define PG_PROTOCOL_MAJOR(v)
volatile bool QueryCancelPending
void restore_stack_base(pg_stack_base_t base)
Snapshot GetTransactionSnapshot(void)
#define OidIsValid(objectId)
void SendRowDescriptionMessage(TupleDesc typeinfo, List *targetlist, int16 *formats)
List * pg_analyze_and_rewrite(Node *parsetree, const char *query_string, Oid *paramTypes, int numParams)
PlannedStmt * planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
int getopt(int nargc, char *const *nargv, const char *ostr)
void FlushErrorState(void)
void StatementCancelHandler(SIGNAL_ARGS)
#define ALLOCSET_DEFAULT_MINSIZE
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 * copyObject(const void *from)
#define RESUME_INTERRUPTS()
ErrorContextCallback * error_context_stack
int check_log_duration(char *msec_str, bool was_logged)
volatile bool ClientConnectionLost
static int errdetail_execute(List *raw_parsetree_list)
bool ClientAuthInProgress
bool check_max_stack_depth(int *newval, void **extra, GucSource source)
#define appendStringInfoCharMacro(str, ch)
ParamFetchHook paramFetch
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 EndCommand(const char *commandTag, CommandDest dest)
void CreateDataDirLockFile(bool amPostmaster)
void pq_startmsgread(void)
void ProcessNotifyInterrupt(void)
static int InteractiveBackend(StringInfo inBuf)
bool pq_is_reading_msg(void)
CachedPlan * GetCachedPlan(CachedPlanSource *plansource, ParamListInfo boundParams, bool useResOwner)
int IdleInTransactionSessionTimeout
static int interactive_getc(void)
void ProcessInterrupts(void)
List * pg_parse_query(const char *query_string)
void MemoryContextStats(MemoryContext context)
static void SigHupHandler(SIGNAL_ARGS)
TimestampTz SessionStartTime
Datum OidReceiveFunctionCall(Oid functionId, StringInfo buf, Oid typioparam, int32 typmod)
void PostgresMain(int argc, char *argv[], const char *dbname, const char *username)
void HandleParallelMessages(void)
void appendStringInfoString(StringInfo str, const char *s)
char OutputFileName[MAXPGPATH]
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
bool analyze_requires_snapshot(Node *parseTree)
static struct timeval Save_t
void PushActiveSnapshot(Snapshot snap)
bool recoveryConflictPending
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 ChangeToDataDir(void)
void resetStringInfo(StringInfo str)
void ReplicationSlotRelease(void)
void(* ParserSetupHook)(struct ParseState *pstate, void *arg)
bool ActiveSnapshotSet(void)
static int SocketBackend(StringInfo inBuf)
struct Bitmapset * paramMask
const char * p_sourcetext
volatile uint32 CritSectionCount
static int errdetail_params(ParamListInfo params)
Query * parse_analyze(Node *parseTree, const char *sourceText, Oid *paramTypes, int numParams)
void getTypeBinaryInputInfo(Oid type, Oid *typReceive, Oid *typIOParam)
bool IsAutoVacuumWorkerProcess(void)
void getTypeInputInfo(Oid type, Oid *typInput, Oid *typIOParam)
#define ereport(elevel, rest)
void exec_replication_command(const char *cmd_string)
void LockErrorCleanup(void)
MemoryContext TopMemoryContext
const char * CreateCommandTag(Node *parsetree)
static ProcSignalReason RecoveryConflictReason
long get_stack_depth_rlimit(void)
struct ParamExternData ParamExternData
List * lappend(List *list, void *datum)
static bool RecoveryConflictPending
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
const char * debug_query_string
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 IsTransactionExitStmtList(List *parseTrees)
static bool doing_extended_query_message
void process_session_preload_libraries(void)
void WalSndErrorCleanup(void)
MemoryContext AllocSetContextCreate(MemoryContext parent, const char *name, Size minContextSize, Size initBlockSize, Size maxBlockSize)
void CommandCounterIncrement(void)
bool SelectConfigFiles(const char *userDoption, const char *progname)
void ProcessClientReadInterrupt(bool blocked)
bool get_timeout_indicator(TimeoutId id, bool reset_indicator)
static int errdetail_recovery_conflict(void)
void EmitErrorReport(void)
Query * transformTopLevelStmt(ParseState *pstate, Node *parseTree)
void StorePreparedStatement(const char *stmt_name, CachedPlanSource *plansource, bool from_sql)
void SaveCachedPlan(CachedPlanSource *plansource)
pqsigfunc pqsignal(int signum, pqsigfunc handler)
volatile bool InterruptPending
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 COMPLETION_TAG_BUFSIZE
void SetLatch(volatile Latch *latch)
Query * parse_analyze_varparams(Node *parseTree, const char *sourceText, Oid **paramTypes, int *numParams)
bool PortalRun(Portal portal, long count, bool isTopLevel, DestReceiver *dest, DestReceiver *altdest, char *completionTag)
#define Assert(condition)
void ProcessCompletedNotifies(void)
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)
bool HoldingBufferPinThatDelaysRecovery(void)
void StartTransactionCommand(void)
static bool DoingCommandRead
const char * query_string
void InitializeMaxBackends(void)
bool ParallelMessagePending
static int list_length(const List *l)
#define PortalGetHeapMemory(portal)
List * CachedPlanGetTargetList(CachedPlanSource *plansource)
bool IsTransactionState(void)
MemoryContext MessageContext
Datum querytree(PG_FUNCTION_ARGS)
sigjmp_buf * PG_exception_stack
static const char * userDoption
bool IsSubTransaction(void)
volatile bool ProcDiePending
static bool UseSemiNewlineNewline
#define CURSOR_OPT_PARALLEL_OK
void SetCurrentStatementStartTimestamp(void)
void InitPostgres(const char *in_dbname, Oid dboid, const char *username, Oid useroid, char *out_dbname)
char * OidOutputFunctionCall(Oid functionId, Datum val)
#define GUC_check_errhint
int errmsg(const char *fmt,...)
void PortalDrop(Portal portal, bool isTopCommit)
void ReadyForQuery(CommandDest dest)
#define HOLD_INTERRUPTS()
#define ALLOCSET_DEFAULT_INITSIZE
void FloatExceptionHandler(SIGNAL_ARGS)
static void drop_unnamed_stmt(void)
int pq_getstring(StringInfo s)
void DropCachedPlan(CachedPlanSource *plansource)
volatile sig_atomic_t notifyInterruptPending
#define ALLOCSET_DEFAULT_MAXSIZE
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)
void free_parsestate(ParseState *pstate)
static bool ignore_till_sync
void assign_max_stack_depth(int newval, void *extra)
PreparedStatement * FetchPreparedStatement(const char *stmt_name, bool throwError)
CachedPlanSource * CreateCachedPlan(Node *raw_parse_tree, const char *query_string, const char *commandTag)
Datum OidInputFunctionCall(Oid functionId, char *str, Oid typioparam, int32 typmod)
List * pg_plan_queries(List *querytrees, int cursorOptions, ParamListInfo boundParams)
void quickdie(SIGNAL_ARGS)
ProtocolVersion FrontendProtocol
MemoryContext PostmasterContext
post_parse_analyze_hook_type post_parse_analyze_hook
#define offsetof(type, field)
static void exec_simple_query(const char *query_string)
const char * prepStmtName
LogStmtLevel GetCommandLogLevel(Node *parsetree)
int HandleFunctionRequest(StringInfo msgBuf)
void NullCommand(CommandDest dest)
TimestampTz GetCurrentStatementStartTimestamp(void)
void InitializeGUCOptions(void)
bool stack_is_too_deep(void)
#define RESUME_CANCEL_INTERRUPTS()
void ProcessClientWriteInterrupt(bool blocked)
void pgstat_report_stat(bool force)
void DropPreparedStatement(const char *stmt_name, bool showError)
static void exec_describe_statement_message(const char *stmt_name)
PlannedStmt * pg_plan_query(Query *querytree, int cursorOptions, ParamListInfo boundParams)