이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 54.2. 서버 내보고 무지개 와이즈 토토버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

49.2. 내에서의보고 와이즈 토토 섬기는 사람

서버 내에서 생성 된 와이즈 토토, 경고 및 로그 메시지 코드는를 사용하여 작성해야합니다.Ereport, 또는 오래된 사촌elog. 사용 이 기능은 설명을 요구할 정도로 복잡합니다.

모든 메시지에 필요한 요소는 두 가지 있습니다 : 심각도 레벨 (범위디버그topanic) 및 기본 메시지 텍스트. 또한 거기에 선택적 요소이며 가장 일반적으로 와이즈 토토입니다. SQL Spec의 SQLState Concentions를 따르는 식별자 코드.Ereport그 자체는 단지 껍질 일뿐입니다 기능은 주로 구문 편의를위한 존재입니다 메시지 생성을 C 소스에서 함수 호출처럼 보이게합니다. 암호. 에 의해 직접 허용되는 유일한 매개 변수Ereport는 심각도 수준입니다. 기본 메시지 텍스트 및 모든 선택적 메시지 요소가 생성됩니다. 와 같은 보조 함수 호출errmsg, 내에서Ereport전화.

전형적인 호출Ereport이렇게 보인다 :

Ereport (와이즈 토토,
        (errcode (errcode_division_by_zero),
         errmsg ( "division by zero"));

이것은 와이즈 토토 심각도 레벨을 지정합니다와이즈 토토(실행 와이즈 토토). 그만큼errcode통화 SQLSTATE 와이즈 토토 코드를 지정합니다 정의 된 매크로 사용src/include/utils/errcodes.h. 그만큼errmsg호출은 기본 메시지 텍스트를 제공합니다. 보조 주변의 추가 괄호 세트에 주목하십시오 기능 호출 - 이들은 성가 시지만 구문 적으로입니다 필요한.

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

Ereport (와이즈 토토,
        (errcode (errcode_ambiguous_function),
         errmsg ( "function %s는 고유하지 않습니다",
                func_signature_string (funcname, nargs,
                                      nil, real_arg_types)),
         errhint ( "최고의 후보 기능을 선택할 수 없습니다."
                 "명시 적 타입 캐스트를 추가해야 할 수도 있습니다."));

이것은 런타임을 포함시키는 형식 코드를 사용합니다. 메시지 텍스트에 값. 또한 선택 사항"힌트"메시지가 제공됩니다.

사용 가능한 보조 루틴Ereportare :

  • errcode (sqlerrcode)조건에 대한 sqlstate 와이즈 토토 식별자 코드. 이 루틴이라면 호출되지 않으면 와이즈 토토 식별자 기본값errcode_internal_error와이즈 토토 심각도 레벨이있을 때 이다와이즈 토토이상,errcode_warning와이즈 토토 레벨이있는 ​​경우경고, 그렇지 않으면 (for통지아래)errcode_successful_completion. 이 기본값은 종종 편리하고 항상 그들이 적절한 지 생각하십시오 생략하기 전에errcode ()전화.

  • errmsg (const char *msg, ...)기본 와이즈 토토 메시지 텍스트와 런타임을 지정합니다 삽입 할 값. 삽입은에 의해 지정됩니다.Sprintf-스타일 형식 코드. 외에 수락 된 표준 형식 코드Sprintf, 형식 코드%m반환 된 와이즈 토토 메시지를 삽입하는 데 사용할 수 있습니다 에 의해Strerror현재 값의 경우errno. ​​[1] %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영어 단수 형식입니다.fmt_plural영어는 복수입니다 체재,n는 정수 값입니다 어떤 복수 형태가 필요한지, 나머지 인수를 결정합니다. 선택한 형식 문자열에 따라 형식화됩니다. 자세한 내용 정보 참조섹션 50.2.2.

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

  • errdetail_internal (const char *msg, ...)|errdetail, 메시지 문자열이 번역되거나 포함되지 않는 것을 제외하고 국제화 메시지 사전에서. 이것은 사용해야합니다 번역 노력을 소비 할 가치가없는 세부 메시지는 예를 들어, 그들은 너무 기술적이기 때문에 대부분의 사용자.

  • errdetail_plural (const char *fmt_singular, const char *fmt_plural, unsigned long n, ...)errdetail그러나 지원이 있습니다 다양한 복수 형태의 메시지. 자세한 내용은 참조섹션 50.2.2.

  • errdetail_log (const char *msg, ...)|errdetail이 문자열이 서버 로그에만 이동하는 것을 제외하고는 절대 고객. 둘 다errdetail(또는 그 중 하나 위의 동등한) 및errdetail_log사용 된 다음 하나의 문자열이 이동합니다 클라이언트와 다른 하나는 로그입니다. 이것은 와이즈 토토에 유용합니다 너무 보안에 민감하거나 너무 부피가 큰 세부 사항 보고서는 고객에게 보냈습니다.

  • errhint (const char *msg, ...)선택 사항을 제공"힌트"메시지; 이것은 수정 방법에 대한 제안을 제공 할 때 사용됩니다. 무엇이 잘못되었는지에 대한 사실적인 세부 사항과는 반대로 문제. 그만큼 메시지 문자열은와 같은 방식으로 처리됩니다.errmsg.

  • errcontext (const char *msg, ...)일반적으로 직접 호출되지 않습니다Ereport메시지 사이트; 오히려 그것은에서 사용됩니다.ERRER_CONTEXT_STACK콜백 함수로 와이즈 토토가 발생한 컨텍스트에 대한 정보를 제공합니다. PL 기능의 현재 위치와 같은. 메시지 문자열 와 같은 방식으로 처리됩니다errmsg. 다른 보조 기능과 달리 이것은 당시 두 번 이상 호출 될 수 있습니다Ereport전화; 따라서 연속적인 문자열 제공된 신형 분리와 관련이 있습니다.

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

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

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

  • errtableconstraint (관계 rel, const char *conname)이름의 테이블 제약 조건을 지정합니다. 테이블 이름 및 스키마 이름은 보조 필드로 포함되어야합니다. 와이즈 토토 보고서에서. 인덱스는 제약으로 간주되어야합니다 이 목적을 위해 관련이 있는지 여부pg_constraint입장. 통과하도록주의하십시오 색인 자체가 아닌 기본 힙 관계,Rel.

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

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

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

  • errcode_for_socket_access ()is 적절한 sqlstate 와이즈 토토를 선택하는 편의 기능 소켓 관련 시스템 호출의 고장에 대한 식별자.

  • errhidestmt (bool hide_stmt)할 수 있습니다 억제를 지정하기 위해 호출진술 :우체국 장의 메시지의 일부 통나무. 일반적으로 이것은 메시지 텍스트에 이미 현재 진술.

참고 :최대 기능 중 하나errtable, errtablecol, errtableconstraint, errdatatype또는errdomainconstraint에서 사용해야합니다Ereport전화. 이러한 기능이 존재합니다 응용 프로그램이 데이터베이스 개체의 이름을 추출하도록 허용합니다. 검사하지 않고 와이즈 토토 조건과 관련이 있습니다. 잠재적으로 국소화 된 와이즈 토토 메시지 텍스트. 이러한 기능은해야합니다 응용 프로그램이 자동 와이즈 토토 처리를 원합니다. 기준PostgreSQL9.3, 완전한 커버리지 만 존재합니다 SQLSTATE 클래스 23 (무결성 제약 조건 위반)의 와이즈 토토, 그러나 이것은 미래에 확장 될 가능성이 높습니다.

오래된 기능이 있습니다elog여전히 많이 사용되고 있습니다.elog전화 :

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

와 정확히 동일합니다.

Ereport (level, (errmsg_internal ( "format string", ...)));

SQLSTATE 와이즈 토토 코드가 항상 기본적으로 표시되고 메시지 문자열에는 번역이 적용되지 않습니다. 그러므로,elog내부에만 사용해야합니다 와이즈 토토 및 저수준 디버그 로깅. 가능성이있는 모든 메시지 평범한 사용자에게 관심이 있어야합니다EREPORT. 그럼에도 불구하고 충분한 내부가 있습니다"발생할 수 없음"와이즈 토토 확인 시스템elog는 여전히 널리 사용됩니다 사용된; 그 메시지는 표기법에 대해 선호됩니다 간단.

좋은 와이즈 토토 메시지 작성에 대한 조언PostgreSQL : 문서 : 9.3 : 오류 토토 핫 스타일 안내서.

노트

[1]

EREPORT전화에 도달했습니다. 의 변화errno보조보고 루틴 내에서 영향을 미치지 않습니다. 글을 쓰면 사실이 아닐 것입니다Strerror (errno)명시 적으로errmsg의 매개 변수 목록; 따라서하지 마십시오 그래서.