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

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

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

  • errdetail_internal(const char *msg, ...)다음과 같습니다errdetail, 단, 메시지 문자열은 번역되거나 포함되지 않습니다. 국제화 메시지 사전에 있습니다. 이것을 사용해야합니다 번역 노력을 기울일 가치가 없는 자세한 메시지의 경우 예를 들어, 너무 기술적이어서 유용하지 않기 때문입니다. 대부분의 사용자입니다.

  • errdetail_plural(상수 문자 *fmt_singular, const char *fmt_plural, 부호 없는 long n, ...)다음과 같습니다errdetail(지원 있음) 메시지의 다양한 복수형에 대해. 자세한 내용은 참조섹션 50.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)쿼리 문자열 내에서 와이즈 토토의 텍스트 위치를 지정합니다. 현재는 어휘 및 구문에서 감지된 와이즈 토토에만 유용합니다. 쿼리 처리의 구문 분석 단계.

  • errtable(관계 관련)을 지정합니다 이름과 스키마 이름이 보조로 포함되어야 하는 관계 와이즈 토토 보고서의 필드입니다.

  • errtablecol(관계 rel, int attnum)이름, 테이블 이름 및 스키마 이름은 와이즈 토토의 보조 필드로 포함되어야 합니다. 보고합니다.

  • errtableconstraint(관계 rel, const 문자 *이름)이름이 다음과 같은 테이블 제약 조건을 지정합니다. 테이블 이름, 스키마 이름은 보조 필드로 포함되어야 합니다. 와이즈 토토 보고서에서. 인덱스는 제약 조건으로 간주되어야 합니다. 이 목적을 위해 관련 항목이 있는지 여부에 관계없이pg_constraint항목. 통과 조심하세요 인덱스 자체가 아닌 기본 힙 관계rel.

  • errdatatype(Oid datatypeOid)이름과 스키마 이름이 포함되어야 하는 데이터 유형을 지정합니다. 와이즈 토토 보고서의 보조 필드로 사용됩니다.

  • errdomainconstraint(Oid 데이터 유형Oid, const char *conname)도메인 제약 조건을 지정합니다. 이름, 도메인 이름, 스키마 이름이 보조로 포함되어야 합니다. 와이즈 토토 보고서의 필드입니다.

  • errcode_for_file_access()은 적절한 SQLSTATE 와이즈 토토를 선택하는 편의 함수 파일 액세스 관련 시스템 호출의 실패에 대한 식별자입니다. 그것 저장된 것을 사용합니다errno어느 것을 결정하기 위해 생성할 와이즈 토토 코드입니다. 일반적으로 이것을 조합하여 사용해야 합니다. 와 함께%m주요 와이즈 토토 메시지에 텍스트.

  • errcode_for_socket_access()은 적절한 SQLSTATE 와이즈 토토를 선택하는 편의 함수 소켓 관련 시스템 호출의 실패에 대한 식별자입니다.

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

참고:최대 하나의 기능와이즈 토토 가능, errtablecol, errtableconstraint, errdatatype, 또는errdomainconstraint다음에서 사용해야 합니다ereport전화. 이런 기능이 존재합니다 애플리케이션이 데이터베이스 객체의 이름을 추출할 수 있도록 허용 검사할 필요 없이 와이즈 토토 조건과 관련된 잠재적으로 현지화된 와이즈 토토 메시지 텍스트. 이러한 기능은 응용 프로그램이 와이즈 토토를 일으킬 가능성이 있는 와이즈 토토 보고서에 사용됩니다. 자동 와이즈 토토 처리를 원합니다. 현재포스트그레SQL9.3, 전체 적용 범위만 존재합니다. SQLSTATE 클래스 23의 와이즈 토토(무결성 제약 조건 위반) 하지만 이는 향후 확대될 가능성이 높습니다.

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

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

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

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

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

좋은 와이즈 토토 메시지 작성에 대한 조언은 다음에서 찾을 수 있습니다.PostgreSQL : 문서 : 9.3 : 오류 토토 핫 스타일 안내서.

참고

[1]

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