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

54.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사용자 정의 함수의 실행을 중단하고 호출자에게 반환되지 않습니다. 심각도 수준이 다음보다 낮은 경우와이즈 토토, ereport정상적으로 반환됩니다.

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

  • errcode(sqlerrcode)조건에 대한 SQLSTATE 와이즈 토토 식별자 코드를 지정합니다. 이 루틴이 호출되지 않으면 와이즈 토토 식별자의 기본값은ERRCODE_INTERNAL_ERROR와이즈 토토 심각도 수준이 다음과 같은 경우와이즈 토토이상,ERRCODE_WARNI와이즈 토토와이즈 토토 수준이 다음과 같은 경우경고, 그렇지 않은 경우(for공지이하)ERRCODE_SUCCESSFUL_COMPLETION. 이러한 기본값은 편리한 경우가 많지만, 생략하기 전에 항상 적절한지 생각해 보세요.errcode()전화하세요.

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

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

  • errmsg_plural(const char *fmt_si와이즈 토토ular, const char *fmt_plural, unsigned long n, ...)다음과 같습니다errmsg, 그러나 다양한 복수 형태의 메시지를 지원합니다.fmt_si와이즈 토토ular은 영어 단수 형식입니다.fmt_plural은 영어 복수 형식입니다.n은 필요한 복수형을 결정하는 정수 값이며, 나머지 인수는 선택한 형식 문자열에 따라 형식이 지정됩니다. 자세한 내용은 참조섹션 55.2.2.

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

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

  • errdetail_plural(const char *fmt_si와이즈 토토ular, const char *fmt_plural, unsigned long n, ...)다음과 같습니다errdetail, 그러나 다양한 복수 형태의 메시지를 지원합니다. 자세한 내용은 참조섹션 55.2.2.

  • errdetail_log(const char *msg, ...)다음과 같습니다errdetail단, 이 문자열은 서버 로그에만 전달되고 클라이언트에는 전달되지 않습니다. 둘 다인 경우errdetail(또는 위의 이에 상응하는 항목 중 하나) 및errdetail_log이 사용되면 한 문자열은 클라이언트로 이동하고 다른 문자열은 로그로 이동합니다. 이는 보안에 너무 민감하거나 너무 커서 클라이언트에게 전송되는 보고서에 포함할 수 없는 와이즈 토토 세부정보에 유용합니다.

  • errdetail_log_plural(const char *fmt_si와이즈 토토ular, const char *fmt_plural, unsigned long n, ...)다음과 같습니다errdetail_log, 그러나 다양한 복수 형태의 메시지를 지원합니다. 자세한 내용은 참조섹션 55.2.2.

  • errint(const char *msg, ...)선택사항 제공힌트메시지; 이는 무엇이 잘못되었는지에 대한 사실적 세부 정보가 아니라 문제 해결 방법에 대한 제안을 제공할 때 사용됩니다. 메시지 문자열은와 동일한 방식으로 처리됩니다.errmsg.

  • errcontext(const char *msg, ...)일반적으로 다음에서 직접 호출되지 않습니다.ereport메시지 사이트; 오히려 그것은에서 사용됩니다error_context_stack콜백 함수는 PL 함수의 현재 위치와 같이 와이즈 토토가 발생한 컨텍스트에 대한 정보를 제공합니다. 메시지 문자열은와 동일한 방식으로 처리됩니다.errmsg. 다른 보조 함수와 달리 이 함수는 한 번 이상 호출될 수 있습니다.ereport전화; 이렇게 제공된 연속 문자열은 분리된 개행 문자로 연결됩니다.

  • errposition(intcursorpos)쿼리 문자열 내 와이즈 토토의 텍스트 위치를 지정합니다. 현재는 쿼리 처리의 어휘 및 구문 분석 단계에서 감지된 와이즈 토토에만 유용합니다.

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

  • errtablecol(Relation rel, int attnum)와이즈 토토 보고서의 보조 필드로 포함되어야 하는 이름, 테이블 이름 및 스키마 이름이 있는 열을 지정합니다.

  • errtableconstraint(Relation 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)억제를 지정하기 위해 호출될 수 있습니다.진술:포스트마스터 로그에 있는 메시지의 일부. 일반적으로 이는 메시지 텍스트에 현재 명령문이 이미 포함되어 있는 경우 적합합니다.

  • erridecontext(bool hide_ctx)억제를 지정하기 위해 호출될 수 있습니다.컨텍스트:포스트마스터 로그에 있는 메시지의 일부. 이는 컨텍스트를 반복적으로 포함하면 로그가 너무 커지는 자세한 디버깅 메시지에만 사용해야 합니다.

참고

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

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

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

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

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

SQLSTATE 와이즈 토토 코드는 항상 기본값이며 메시지 문자열은 번역되지 않습니다. 그러므로elog내부 와이즈 토토 및 낮은 수준의 디버그 로깅에만 사용해야 합니다. 일반 사용자가 관심을 가질 만한 메시지는 모두 통과해야 합니다.ereport. 그럼에도 불구하고 내부 내용은 충분합니다.일어날 수 없는 일입니다시스템에서 와이즈 토토를 확인합니다.elog여전히 널리 사용되고 있습니다. 표기상의 단순성으로 인해 해당 메시지에 선호됩니다.

좋은 와이즈 토토 메시지 작성에 대한 조언은 다음에서 찾을 수 있습니다.PostgreSQL : 문서 : 11 : 54.3. 오류 사설 토토 사이트 스타일 가이드.



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