35#define LOG_SERVER_ONLY 16
37#define COMMERROR LOG_SERVER_ONLY
51#define WARNING_CLIENT_ONLY 20
57#define FATAL_CLIENT_ONLY 23
69#define PGSIXBIT(ch) (((ch) - '0') & 0x3F)
70#define PGUNSIXBIT(val) (((val) & 0x3F) + '0')
72#define MAKE_SQLSTATE(ch1,ch2,ch3,ch4,ch5) \
73 (PGSIXBIT(ch1) + (PGSIXBIT(ch2) << 6) + (PGSIXBIT(ch3) << 12) + \
74 (PGSIXBIT(ch4) << 18) + (PGSIXBIT(ch5) << 24))
77#define ERRCODE_TO_CATEGORY(ec) ((ec) & ((1 << 12) - 1))
78#define ERRCODE_IS_CATEGORY(ec) (((ec) & ~((1 << 12) - 1)) == 0)
81#include "utils/errcodes.h"
92#if defined(errno) && defined(__linux__)
93#define pg_prevent_errno_in_scope() int __errno_location pg_attribute_unused()
94#elif defined(errno) && (defined(__darwin__) || defined(__FreeBSD__))
95#define pg_prevent_errno_in_scope() int __error pg_attribute_unused()
97#define pg_prevent_errno_in_scope()
143#ifdef HAVE_PG_INTEGER_CONSTANT_P
144#define ereport_domain(elevel, domain, ...) \
146 pg_prevent_errno_in_scope(); \
147 if (pg_integer_constant_p(elevel) && (elevel) >= ERROR ? \
148 errstart_cold(elevel, domain) : \
149 errstart(elevel, domain)) \
150 __VA_ARGS__, errfinish(__FILE__, __LINE__, __func__); \
151 if (pg_integer_constant_p(elevel) && (elevel) >= ERROR) \
155#define ereport_domain(elevel, domain, ...) \
157 const int elevel_ = (elevel); \
158 pg_prevent_errno_in_scope(); \
159 if (errstart(elevel_, domain)) \
160 __VA_ARGS__, errfinish(__FILE__, __LINE__, __func__); \
161 if (elevel_ >= ERROR) \
166#define ereport(elevel, ...) \
167 ereport_domain(elevel, TEXTDOMAIN, __VA_ARGS__)
169#define TEXTDOMAIN NULL
173extern bool errstart(
int elevel,
const char *domain);
214#define errcontext set_errcontext_domain(TEXTDOMAIN), errcontext_msg
242#define elog(elevel, ...) \
243 ereport(elevel, errmsg_internal(__VA_ARGS__))
270#define errsave_domain(context, domain, ...) \
272 struct Node *context_ = (context); \
273 pg_prevent_errno_in_scope(); \
274 if (errsave_start(context_, domain)) \
275 __VA_ARGS__, errsave_finish(context_, __FILE__, __LINE__, __func__); \
278#define errsave(context, ...) \
279 errsave_domain(context, TEXTDOMAIN, __VA_ARGS__)
288#define ereturn_domain(context, dummy_value, domain, ...) \
290 errsave_domain(context, domain, __VA_ARGS__); \
291 return dummy_value; \
294#define ereturn(context, dummy_value, ...) \
295 ereturn_domain(context, dummy_value, TEXTDOMAIN, __VA_ARGS__)
390 sigjmp_buf *_save_exception_stack##__VA_ARGS__ = PG_exception_stack; \
391 ErrorContextCallback *_save_context_stack##__VA_ARGS__ = error_context_stack; \
392 sigjmp_buf _local_sigjmp_buf##__VA_ARGS__; \
393 bool _do_rethrow##__VA_ARGS__ = false; \
394 if (sigsetjmp(_local_sigjmp_buf##__VA_ARGS__, 0) == 0) \
396 PG_exception_stack = &_local_sigjmp_buf##__VA_ARGS__
398#define PG_CATCH(...) \
402 PG_exception_stack = _save_exception_stack##__VA_ARGS__; \
403 error_context_stack = _save_context_stack##__VA_ARGS__
405#define PG_FINALLY(...) \
408 _do_rethrow##__VA_ARGS__ = true; \
410 PG_exception_stack = _save_exception_stack##__VA_ARGS__; \
411 error_context_stack = _save_context_stack##__VA_ARGS__
413#define PG_END_TRY(...) \
415 if (_do_rethrow##__VA_ARGS__) \
417 PG_exception_stack = _save_exception_stack##__VA_ARGS__; \
418 error_context_stack = _save_context_stack##__VA_ARGS__; \
421#define PG_RE_THROW() \
501#define LOG_DESTINATION_STDERR 1
502#define LOG_DESTINATION_SYSLOG 2
503#define LOG_DESTINATION_EVENTLOG 4
504#define LOG_DESTINATION_CSVLOG 8
505#define LOG_DESTINATION_JSONLOG 16
#define write_stderr(str)
#define pg_attribute_cold
#define pg_attribute_printf(f, a)
int getinternalerrposition(void)
int int errhidestmt(bool hide_stmt)
PGDLLIMPORT int Log_error_verbosity
PGDLLIMPORT int Log_destination
void(* emit_log_hook_type)(ErrorData *edata)
int errcode_for_socket_access(void)
bool errsave_start(struct Node *context, const char *domain)
int err_generic_string(int field, const char *str)
PGDLLIMPORT sigjmp_buf * PG_exception_stack
int int errdetail_internal(const char *fmt,...) pg_attribute_printf(1
void errsave_finish(struct Node *context, const char *filename, int lineno, const char *funcname)
int errhint(const char *fmt,...) pg_attribute_printf(1
int internalerrquery(const char *query)
int int int errhint_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...) pg_attribute_printf(1
int internalerrposition(int cursorpos)
bool check_log_of_query(ErrorData *edata)
bool errstart(int elevel, const char *domain)
void EmitErrorReport(void)
int errdetail(const char *fmt,...) pg_attribute_printf(1
char * GetErrorContextStack(void)
void FreeErrorData(ErrorData *edata)
const char * error_severity(int elevel)
int int errmsg_internal(const char *fmt,...) pg_attribute_printf(1
int errcode_for_file_access(void)
pg_noreturn void ReThrowError(ErrorData *edata)
void pre_format_elog_string(int errnumber, const char *domain)
int int int errmsg_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...) pg_attribute_printf(1
char * get_formatted_start_time(void)
ErrorData * CopyErrorData(void)
PGDLLIMPORT char * Log_destination_string
void FlushErrorState(void)
PGDLLIMPORT emit_log_hook_type emit_log_hook
int errcontext_msg(const char *fmt,...) pg_attribute_printf(1
void ThrowErrorData(ErrorData *edata)
bool message_level_is_interesting(int elevel)
void write_pipe_chunks(char *data, int len, int dest)
int errhidecontext(bool hide_ctx)
int int int errdetail_log(const char *fmt,...) pg_attribute_printf(1
PGDLLIMPORT char * Log_line_prefix
void write_csvlog(ErrorData *edata)
void void vwrite_stderr(const char *fmt, va_list ap) pg_attribute_printf(1
pg_attribute_cold bool errstart_cold(int elevel, const char *domain)
void write_jsonlog(ErrorData *edata)
const char * get_backend_type_for_log(void)
int errcode(int sqlerrcode)
pg_noreturn void pg_re_throw(void)
PGDLLIMPORT bool syslog_split_messages
PGDLLIMPORT ErrorContextCallback * error_context_stack
PGDLLIMPORT bool syslog_sequence_numbers
char * format_elog_string(const char *fmt,...) pg_attribute_printf(1
void log_status_format(StringInfo buf, const char *format, ErrorData *edata)
char * get_formatted_log_time(void)
bool in_error_recursion_trouble(void)
void errfinish(const char *filename, int lineno, const char *funcname)
int errposition(int cursorpos)
char * unpack_sql_state(int sql_state)
int int int int errdetail_log_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...) pg_attribute_printf(1
int set_errcontext_domain(const char *domain)
void reset_formatted_start_time(void)
int errdetail_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...) pg_attribute_printf(1
int int errhint_internal(const char *fmt,...) pg_attribute_printf(1
static char buf[DEFAULT_XLOG_SEG_SIZE]
struct ErrorContextCallback * previous
struct MemoryContextData * assoc_context
const char * context_domain
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)