서버 코드 내에서 생성 된 스포츠 토토 베트맨, 경고 및 로그 메시지를 사용하여 생성해야합니다EREPORT
또는 그 오래된 사촌elog
. 이 기능의 사용은 설명을 요구할 정도로 복잡합니다.
모든 메시지에 필요한 요소는 두 가지 있습니다 : 심각도 수준 (범위디버그
topanic
, 정의src/include/utils/elog.h
) 및 기본 메시지 텍스트. 또한 옵션 요소가 있으며, 그 중 가장 일반적인 요소는 SQL Spec의 SQLState 규칙을 따르는 스포츠 토토 베트맨 식별자 코드입니다.Ereport
자체는 메시지 생성을 C 소스 코드의 단일 함수 호출처럼 보이게하는 구문 편의를위한 주로 존재하는 쉘 매크로입니다. 에 의해 직접 허용되는 유일한 매개 변수Ereport
는 심각도 수준입니다. 기본 메시지 텍스트와 옵션 메시지 요소는와 같은 보조 함수를 호출하여 생성됩니다.errmsg
, 내에서Ereport
전화.
전형적인 호출Ereport
다음과 같이 보일 수 있습니다 :
Ereport (스포츠 토토 베트맨,
이것은 스포츠 토토 베트맨 심각도 수준을 지정합니다스포츠 토토 베트맨
(실행 스포츠 토토 베트맨). 그만큼errcode
Call에 정의 된 매크로를 사용하여 SQLSTATE 스포츠 토토 베트맨 코드를 지정합니다src/include/utils/errcodes.h
. 그만큼errmsg
Call은 기본 메시지 텍스트를 제공합니다.
보조 기능 호출을 둘러싼 여분의 괄호가있는이 오래된 스타일도 자주 보게됩니다.
Ereport (스포츠 토토 베트맨,
추가 괄호는 전에 필요했습니다PostgreSQL버전 12이지만 이제 선택 사항입니다.
여기 더 복잡한 예가 있습니다 :
Ereport (스포츠 토토 베트맨,
이것은 런타임 값을 메시지 텍스트에 포함시키기 위해 형식 코드를 사용하는 것을 보여줍니다. 또한 선택 사항“힌트”메시지가 제공됩니다. 보조 기능 호출은 어떤 순서로든 작성할 수 있지만 일반적으로errcode
anderrmsg
먼저 나타납니다.
심각도 레벨이스포츠 토토 베트맨
이상,Ereport
현재 쿼리의 실행을 중단하고 발신자에게 돌아 가지 않습니다. 심각도 수준이보다 낮 으면스포츠 토토 베트맨
,Ereport
정상적으로 반환합니다.
사용 가능한 보조 루틴Ereport
are :
errcode (sqlerrcode)
조건에 대한 sqlstate 스포츠 토토 베트맨 식별자 코드를 지정합니다. 이 루틴이 호출되지 않으면 스포츠 토토 베트맨 식별자가 기본값으로errcode_internal_error
스포츠 토토 베트맨 심각도 레벨이있는 경우스포츠 토토 베트맨
이상,errcode_warning
스포츠 토토 베트맨 레벨이있는 경우경고
, 그렇지 않으면 (for통지
아래)errcode_successful_completion
. 이러한 기본값은 종종 편리하지만 항상 생략하기 전에 적절한 지 생각하십시오.errcode ()
전화.
errmsg (const char *msg, ...)
기본 스포츠 토토 베트맨 메시지 텍스트를 지정하고 실행 시간 값을 삽입 할 수 있습니다. 삽입은에 의해 지정됩니다.Sprintf
-스타일 형식 코드. 에 의해 허용되는 표준 형식 코드 외에Sprintf
, 형식 코드%m
|Strerror
현재 값의 경우errno
.[18] %m
매개 변수 목록에 해당 항목이 필요하지 않습니다.errmsg
. 메시지 문자열이 실행됩니다getText
형식 코드가 처리되기 전에 가능한 현지화.
errmsg_internal (const char *msg, ...)
|errmsg
, 메시지 문자열이 국제화 메시지 사전에 번역되거나 포함되지 않는 것을 제외하고. 이것은에 사용되어야합니다.“일어날 수 없습니다”아마도 번역 노력을 소비 할 가치가없는 경우.
errmsg_plural (const char *fmt_singular, const char *fmt_plural, unsigned long n, ...)
errmsg
, 그러나 다양한 복수 형태의 메시지를 지원합니다.fmt_singular
English Singular 형식,fmt_plural
영어 복수 형식,n
필요한 복수 양식을 결정하는 정수 값이며 나머지 인수는 선택한 형식 문자열에 따라 형식화됩니다. 자세한 내용은 참조섹션 56.2.2.
errdetail (const char *msg, ...)
선택 사항을 제공“세부 사항”메시지; 이것은 기본 메시지에 부적절한 것으로 보이는 추가 정보가있을 때 사용됩니다.errmsg
.
errdetail_internal (const char *msg, ...)
|errdetail
, 메시지 문자열이 국제화 메시지 사전에 번역되거나 포함되지 않는다는 점을 제외하고. 예를 들어 대부분의 사용자에게 유용하기에는 너무 기술적이기 때문에 번역 노력을 소비 할 가치가없는 세부 메시지에 사용해야합니다.
errdetail_plural (const char *fmt_singular, const char *fmt_plural, unsigned long n, ...)
errdetail
, 그러나 다양한 복수 형태의 메시지를 지원합니다. 자세한 내용은 참조섹션 56.2.2.
errdetail_log (const char *msg, ...)
|errdetail
이 문자열은 서버 로그에만 사용되며 클라이언트에 절대 절대 없습니다. 둘 다errdetail
(또는 위에 해당하는 것 중 하나) 및errdetail_log
사용됩니다. 그러면 하나의 문자열이 클라이언트에게, 다른 문자열은 로그로 이동합니다. 이것은 너무 보안에 민감하거나 너무 부피가 큰 스포츠 토토 베트맨 세부 정보에 유용합니다.
errdetail_log_plural (const char *fmt_singular, const char *fmt_plural, unsigned long n, ...)
errdetail_log
, 그러나 다양한 복수 형태의 메시지를 지원합니다. 자세한 내용은 참조섹션 56.2.2.
errhint (const char *msg, ...)
선택 사항을 제공“힌트”메시지; 이것은 무엇이 잘못되었는지에 대한 사실적인 세부 사항과 달리 문제를 해결하는 방법에 대한 제안을 제공 할 때 사용됩니다.errmsg
.
errhint_plural (const char *fmt_singular, const char *fmt_plural, unsigned long n, ...)
같아errhint
, 그러나 다양한 복수 형태의 메시지를 지원합니다. 자세한 내용은 참조섹션 56.2.2.
errcontext (const char *msg, ...)
일반적으로 직접 호출되지 않습니다EREPORT
메시지 사이트; 오히려 그것은에서 사용됩니다.ERROR_CONTEXT_STACK
콜백 함수 PL 함수의 현재 위치와 같은 스포츠 토토 베트맨가 발생한 컨텍스트에 대한 정보를 제공합니다. 메시지 문자열은와 같은 방식으로 처리됩니다.errmsg
. 다른 보조 함수와 달리, 이것은 당시 두 번 이상 호출 될 수 있습니다Ereport
전화; 이렇게 제공되는 연속적인 줄은 신형 분리와 관련이 있습니다.
스포츠 토토 베트맨 (int cursorpos)
쿼리 문자열 내에서 스포츠 토토 베트맨의 텍스트 위치를 지정합니다. 현재 쿼리 처리의 어휘 및 구문 분석 단계에서 감지 된 스포츠 토토 베트맨에만 유용합니다.
errtable (관계 rel)
스포츠 토토 베트맨 보고서에서 이름과 스키마 이름이 보조 필드로 포함되어야하는 관계를 지정합니다.
errtablecol (관계 Rel, int attnum)
스포츠 토토 베트맨 보고서에 이름, 테이블 이름 및 스키마 이름이 보조 필드로 포함되어야하는 열을 지정합니다.
errtableconstraint (관계 rel, const char *conname)
스포츠 토토 베트맨 보고서에 이름, 테이블 이름 및 스키마 이름이 보조 필드로 포함되어야하는 테이블 제약 조건을 지정합니다. 인덱스는 관련이 있는지 여부에 관계 없이이 목적에 대한 제약으로 간주되어야합니다pg_constraint
입력. 색인 자체가 아닌 기본 힙 관계를 통과하도록주의하십시오.Rel
.
errdatatype (OID DataTypeoid)
스포츠 토토 베트맨 보고서에 이름과 스키마 이름이 보조 필드로 포함되어야하는 데이터 유형을 지정합니다.
errdomainconstraint (OID DataTypeoid, const char *conname)
스포츠 토토 베트맨 보고서에 이름, 도메인 이름 및 스키마 이름이 보조 필드로 포함되어야하는 도메인 제약 조건을 지정합니다.
errcode_for_file_access ()
는 파일 액세스 관련 시스템 호출의 고장에 대한 적절한 SQLState 스포츠 토토 베트맨 식별자를 선택하는 편의 기능입니다. 저장된 것을 사용합니다errno
생성 할 스포츠 토토 베트맨 코드를 결정합니다. 일반적으로 이것은와 함께 사용해야합니다.%m
기본 스포츠 토토 베트맨 메시지 텍스트에서
errcode_for_socket_access ()
소켓 관련 시스템 호출에서 실패에 대한 적절한 SQLState 스포츠 토토 베트맨 식별자를 선택하는 편의 기능입니다.
errhidestmt (bool hide_stmt)
|진술 :
우체국 마스터 로그의 메시지 부분. 일반적으로 이것은 메시지 텍스트에 이미 현재 진술이 포함 된 경우 적절합니다.
errhidecontext (bool hide_ctx)
를 지정하기 위해 호출 될 수 있습니다컨텍스트 :
우체국 마스터 로그의 메시지 부분. 이것은 컨텍스트의 반복적 인 포함이 로그를 너무 많이 부풀릴 수있는 장점 디버깅 메시지에만 사용해야합니다.
최대 기능 중 하나errtable
,errtablecol
,errtableconstraint
,errdatatype
또는errdomainconstraint
에서 사용해야합니다Ereport
전화. 이러한 기능은 응용 프로그램이 잠재적으로 국소화 된 스포츠 토토 베트맨 메시지 텍스트를 검사하지 않고 스포츠 토토 베트맨 조건과 관련된 데이터베이스 객체의 이름을 추출 할 수 있도록 존재합니다.PostgreSQL9.3, SQLSTATE 클래스 23 (무결성 제약 조건 위반)의 스포츠 토토 베트맨에 대해서만 완전한 적용 범위가 존재하지만 향후 확장 될 가능성이 높습니다.
오래된 기능이 있습니다elog
여전히 많이 사용됩니다.elog
전화 :
elog (레벨, "형식 문자열", ...);
정확히 다음과 같습니다.
Ereport (레벨, errmsg_internal ( "format string", ...));
SQLSTATE 스포츠 토토 베트맨 코드는 항상 기본값이 표시되고 메시지 문자열은 번역이 적용되지 않습니다. 그러므로,elog
내부 스포츠 토토 베트맨 및 저수준 디버그 로깅에만 사용해야합니다. 일반 사용자에게 관심이있는 모든 메시지는EREPORT
. 그럼에도 불구하고 충분한 내부가 있습니다“일어날 수 없습니다”시스템의 스포츠 토토 베트맨 확인elog
여전히 널리 사용됩니다. 표기법 단순성에 대한 메시지가 선호됩니다.
좋은 스포츠 토토 베트맨 메시지 작성에 대한 조언섹션 55.3.
[18]Ereport
전화에 도달했습니다. 의 변화errno
보조보고 루틴 내에서는 영향을 미치지 않습니다. 글을 쓰면 사실이 아닐 것입니다strerror (errno)
명시 적으로errmsg
의 매개 변수 목록; 따라서 그렇게하지 마십시오.