이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 54.2. 서버 내보고 무지개 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

47.2. 배트맨 토토 보고 섬기는 사람

서버 내에서 생성된 배트맨 토토, 경고 및 로그 메시지 코드는 다음을 사용하여 생성되어야 합니다.ereport또는 그 사촌elog. 이 기능의 사용은 복잡합니다 설명이 필요할 만큼 충분합니다.

모든 메시지에는 두 가지 필수 요소가 있습니다: 심각도 레벨(범위:디버그패닉) 및 기본 메시지 텍스트입니다. 게다가 선택적 요소가 있으며 그 중 가장 일반적인 것은 배트맨 토토입니다. SQL 사양의 SQLSTATE 규칙을 따르는 식별자 코드입니다.ereport그 자체는 단지 껍질일 뿐입니다 주로 구문상의 편의를 위해 존재하는 함수입니다. 메시지 생성을 C의 함수 호출처럼 보이게 만들기 소스 코드. 에서 직접 허용하는 유일한 매개변수ereport심각도 수준입니다. 기본 메시지 텍스트 및 선택적 메시지 요소는 다음에 의해 생성됩니다. 다음과 같은 보조 기능 호출errmsg, 내부ereport전화.

일반적인 호출ereport아마도 다음과 같습니다:

ereport(배트맨 토토,
        (errcode(ERRCODE_DIVISION_BY_ZERO),
         errmsg("0으로 나누기")));

배트맨 토토 심각도 수준을 지정합니다.배트맨 토토(평범한 배트맨 토토). 그만큼errcode호출이 SQLSTATE 배트맨 토토 코드를 지정합니다. 에 정의된 매크로 사용src/include/utils/errcodes.h. 그만큼errmsgcall은 기본 메시지 텍스트를 제공합니다. 보조 문자를 둘러싼 추가 괄호 세트에 주목하세요. 함수 호출 — 성가시지만 구문적으로는 필요한.

여기에 더 복잡한 예가 있습니다:

ereport(배트맨 토토,
        (errcode(ERRCODE_AMBIGUOUS_FUNCTION),
         errmsg("%s 함수는 고유하지 않습니다.",
                func_signature_string(funcname, nargs,
                                      NIL, 실제_arg_types)),
         errint("최적의 후보 함수를 선택할 수 없습니다. "
                 "명시적인 유형 변환을 추가해야 할 수도 있습니다.")));

이것은 런타임 삽입을 위한 형식 코드의 사용을 보여줍니다. 값을 메시지 텍스트로 변환합니다. 또한 선택사항입니다."힌트"메시지가 제공됩니다.

다음에 사용 가능한 보조 루틴ereport다음은:

  • errcode(sqlerrcode)에 대한 SQLSTATE 배트맨 토토 식별자 코드를 지정합니다. 상태. 이 루틴이 호출되지 않으면 배트맨 토토가 발생합니다. 식별자의 기본값은ERRCODE_INTERNAL_ERROR배트맨 토토 심각도가 레벨은배트맨 토토이상,ERRCODE_WARNING배트맨 토토 수준이 다음과 같은 경우경고, 그렇지 않은 경우(for공지이하)ERRCODE_SUCCESSFUL_COMPLETION. 반면 이것들은 기본값은 편리한 경우가 많습니다. 항상 기본값이 맞는지 생각해 보세요. 를 생략하기 전에 적절함errcode()전화하세요.

  • errmsg(const char *msg, ...)주요 배트맨 토토 메시지 텍스트를 지정합니다. 삽입할 런타임 값입니다. 삽입이 지정됨 에 의해스프린트f-스타일 형식 코드. 다음에서 허용하는 표준 형식 코드 외에스프린트f, 형식 코드%m배트맨 토토를 삽입하는 데 사용할 수 있습니다. 에서 반환한 메시지strerror현재 값에 대한errno. [1] %m다음에 해당 항목이 필요하지 않습니다. 매개변수 목록errmsg. 메시지 문자열이 실행됩니다.gettext이전 현지화 가능 형식 코드가 처리됩니다.

  • errmsg_internal(const char *msg, ...)다음과 같습니다errmsg, 단, 메시지 문자열은 번역되거나 국제화에 포함되지 않습니다. 메시지 사전. 이것은 다음 용도로 사용되어야 합니다."일어날 수 없는 일입니다"아마도 그렇지 않은 경우 번역 노력을 기울일 가치가 있습니다.

  • errmsg_plural(상수 문자 *fmt_singular, const char *fmt_plural, 부호 없는 long n, ...)다음과 같습니다errmsg하지만 다양한 복수형의 메시지를 지원합니다.fmt_singular영어입니다 단수 형식,fmt_plural는 영어 복수 형식입니다.n은 다음을 결정하는 정수 값입니다. 어떤 복수형이 필요한지, 나머지 인수는 다음과 같습니다. 선택한 형식 문자열에 따라 형식이 지정됩니다. 더 알아보기 정보 참조섹션 48.2.2.

  • errdetail(const char *msg, ...)선택사항 제공"세부사항"메시지; 이것은 다음과 같은 경우에 사용됩니다. 부적절해 보이는 추가 정보가 있습니다. 기본 메시지를 넣으세요. 메시지 문자열이 처리됩니다. 와 같은 방식으로errmsg.

  • errdetail_internal(const char *msg, ...)다음과 같습니다errdetail, 메시지 문자열을 제외하고 번역되지도 않고 포함되지도 않습니다. 국제화 메시지 사전. 이것을 사용해야합니다 번역을 쓸 가치가 없는 상세한 메시지에 대해서는 예를 들어, 너무 기술적이기 때문에 노력하지 마세요. 대부분의 사용자에게 유용합니다.

  • errdetail_plural(상수 문자 *fmt_singular, const char *fmt_plural, 부호 없는 long n, ...)다음과 같습니다errdetail, 그러나 다양한 복수 형태의 메시지를 지원합니다. 을 위한 자세한 내용은 참조섹션 48.2.2.

  • errdetail_log(const char *msg, ...)다음과 같습니다errdetail이 문자열은 오직 서버 로그에는 없고 클라이언트에는 없습니다. 둘 다인 경우errdetail(또는 위의 이에 상응하는 항목 중 하나) 그리고errdetail_log그러면 사용됩니다 한 문자열은 클라이언트로 이동하고 다른 문자열은 로그로 이동합니다. 이것 보안에 너무 민감한 배트맨 토토 세부정보에 유용합니다. 또는 너무 커서 고객에게 보내는 보고서에 포함할 수 없습니다.

  • errint(const char *msg, ...)선택사항 제공"힌트"메시지; 이것은 다음과 같은 경우에 사용됩니다. 반대로 문제를 해결하는 방법에 대한 제안을 제공합니다. 무엇이 잘못되었는지에 대한 사실적인 세부정보를 제공합니다. 메시지 문자열 와 같은 방식으로 처리됩니다.errmsg.

  • errcontext(const char *msg, ...)일반적으로 다음에서 직접 호출되지 않습니다.ereport메시지 사이트; 오히려 그것 에서 사용됨error_context_stack컨텍스트에 대한 정보를 제공하는 콜백 함수 배트맨 토토가 발생한 곳(예: 현재 위치) PL 기능. 메시지 문자열은 동일한 방식으로 처리됩니다. 방법은errmsg. 와 달리 다른 보조 기능은 두 번 이상 호출할 수 있습니다. 당ereport전화; 그만큼 따라서 제공된 연속 문자열은 다음과 연결됩니다. 개행을 분리합니다.

  • errposition(intcursorpos)쿼리 내 배트맨 토토의 텍스트 위치를 지정합니다. 끈. 현재는 다음에서 감지된 배트맨 토토에만 유용합니다. 쿼리의 어휘 및 구문 분석 단계 처리 중입니다.

  • errcode_for_file_access()입니다 적절한 SQLSTATE를 선택하는 편의 함수 파일 액세스 관련 배트맨 토토에 대한 배트맨 토토 식별자 시스템 호출. 저장된 것을 사용합니다errno생성할 배트맨 토토 코드를 결정합니다. 보통 이 와 함께 사용해야 합니다.%m기본 배트맨 토토 메시지 텍스트에.

  • errcode_for_socket_access()은 적절한 것을 선택하는 편의 함수입니다. 소켓 관련 배트맨 토토에 대한 SQLSTATE 배트맨 토토 식별자 시스템 호출.

  • errhidestmt(bool hide_stmt)억제를 지정하기 위해 호출될 수 있습니다.진술:메시지의 일부 우체국장 로그. 일반적으로 이는 메시지가 다음과 같은 경우에 적합합니다. 텍스트에는 현재 문이 이미 포함되어 있습니다.

이전 기능이 있습니다elog아직도 많이 사용되고 있습니다. 안elog전화:

elog(레벨, "형식 문자열", ...);

다음과 정확히 동일합니다.

ereport(level, (errmsg_internal("형식 문자열", ...)));

SQLSTATE 배트맨 토토 코드는 항상 기본값이며, 메시지 문자열은 번역 대상이 아닙니다. 그러므로,elog다음 용도로만 사용해야 합니다. 내부 배트맨 토토 및 낮은 수준의 디버그 로깅. 어떤 메시지라도 일반 사용자가 관심을 가질 가능성이 있는 내용은 반드시 거쳐야 합니다.ereport. 그럼에도 불구하고 내부적으로는 충분함"그런 일은 일어날 수 없습니다"배트맨 토토 시스템에서 확인합니다.elog이다 아직도 널리 사용되고 있습니다. 해당 메시지에 대해 선호됩니다. 표기법의 단순함.

좋은 배트맨 토토 메시지 작성에 대한 조언은 다음에서 찾을 수 있습니다.PostgreSQL : 문서 : 9.2 : 오류 토토 사이트 추천 스타일 안내서.

참고

[1]

즉, 당시의 현재 값은ereport전화가 연결되었습니다; 변경 사항errno보조 보고 내에서 루틴은 영향을 미치지 않습니다. 당신이 그렇다면 그것은 사실이 아닐 것입니다 쓰기로 했어요strerror(errno)명시적으로errmsg의 매개변수 목록; 그러므로 그렇게 하지 마십시오.