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

42.8. 사설 토토 및 메시지

42.8.1. 오류 및 메시지 보고

사용상승메시지를 보고하고 사설 토토를 발생시키는 명령문입니다.

상승 [ 레벨 ] '형식' [, 표현 [, ... ]] [사용 중옵션 = 표현 [, ... ] ];
인상 [ 레벨 ] 조건_이름 [사용 중옵션 = 표현 [, ... ] ];
인상 [ 레벨 ] SQLSTATE 'sqlstate' [사용 중옵션 = 표현 [, ... ] ];
인상 [ 레벨 ] 사용 중옵션 = 표현 [, ... ];
인상 ;

레벨옵션은 오류 심각도를 지정합니다. 허용되는 수준은 다음과 같습니다.디버그, 로그, 정보, 공지, 경고예외, 와예외기본값입니다.예외오류가 발생합니다(일반적으로 현재 트랜잭션이 중단됨). 다른 수준은 서로 다른 우선순위 수준의 메시지만 생성합니다. 특정 우선순위의 메시지가 클라이언트에 보고되는지, 서버 로그에 기록되는지 또는 둘 다에 의해 제어되는지 여부는log_min_messages그리고client_min_messages구성 변수. 참조PostgreSQL : 문서 : 10 : 19 장 서버 와이즈 토토더 많은 정보를 원하시면.

이후레벨있는 경우 다음을 지정할 수 있습니다.형식문자열(표현식이 아닌 단순 문자열 리터럴이어야 함) 형식 문자열은 보고할 오류 메시지 텍스트를 지정합니다. 형식 문자열 뒤에는 메시지에 삽입할 선택적 인수 표현식이 올 수 있습니다. 형식 문자열 내부에서,%은 다음 선택적 인수 값의 문자열 표현으로 대체됩니다. 쓰기%%리터럴을 내보내다%. 인수 개수는 다음 개수와 일치해야 합니다.%형식 문자열에 자리 표시자가 있거나 함수를 컴파일하는 동안 오류가 발생합니다.

이 예에서 값은v_job_id다음을 대체합니다%문자열에서:

알림 'cs_create_job(%) 호출 중', v_job_id;

다음을 작성하여 오류 보고서에 추가 정보를 첨부할 수 있습니다.사용 중다음이 따름옵션 = 표현항목. 각각표현문자열 값 표현식이 될 수 있습니다. 허용되는옵션핵심 단어는 다음과 같습니다:

메시지

오류 메시지 텍스트를 설정합니다. 이 옵션은 형식으로 사용할 수 없습니다.상승이전에 형식 문자열을 포함함사용 중.

세부정보

오류 상세 메시지를 제공합니다.

힌트

힌트 메시지를 제공합니다.

ERRCODE

다음과 같이 조건 이름별로 보고할 오류 코드(SQLSTATE)를 지정합니다.PostgreSQL : 문서 : 10 : 부록 A. PostgreSQL 윈 토토 코드또는 5자리 SQLSTATE 코드로 직접.


제약
데이터 유형

스키마

관련 개체의 이름을 제공합니다.

이 예는 주어진 오류 메시지와 힌트로 트랜잭션을 중단합니다:

예외 발생 '존재하지 않는 ID -- %', user_id
      힌트 사용 = '사용자 ID를 확인하세요';

이 두 가지 예는 SQLSTATE를 설정하는 동일한 방법을 보여줍니다:

RAISE '중복된 사용자 ID: %', user_id USING ERRCODE = 'unique_violation';
RAISE '중복된 사용자 ID: %', user_id USING ERRCODE = '23505';

두 번째가 있습니다상승주 인수가 보고할 조건 이름 또는 SQLSTATE인 구문입니다. 예:

나눗셈으로_영을 올리세요;
RAISE SQLSTATE '22012';

이 구문에서는,사용 중사용자 정의 오류 메시지, 세부정보 또는 힌트를 제공하는 데 사용할 수 있습니다. 이전 예를 수행하는 또 다른 방법은 다음과 같습니다.

RAISE Unique_violation USING MESSAGE = '중복된 사용자 ID: ' || user_id;

또 다른 변형은 다음과 같습니다.사용하여 인상또는상승레벨사용 중그 밖의 모든 것을 여기에 넣습니다사용 중목록.

의 마지막 변종상승매개변수가 전혀 없습니다. 이 양식은 내부에서만 사용할 수 있습니다.시작블록의예외절; 현재 처리 중인 오류가 다시 발생하게 됩니다.

참고

이전PostgreSQL 9.1, 상승18842_18969예외해당 핸들러 내에 중첩된 절은 이를 포착할 수 없습니다.상승중첩된 내부에 있음예외절의 블록입니다. 이는 놀라운 일이었으며 Oracle의 PL/SQL과 호환되지 않는 것으로 간주되었습니다.

조건 이름이나 SQLSTATE가 a에 지정되지 않은 경우예외 발생명령, 기본값은 다음을 사용하는 것입니다.ERRCODE_RAISE_EXCEPTION (P0001). 메시지 텍스트가 지정되지 않은 경우 기본값은 조건 이름 또는 SQLSTATE를 메시지 텍스트로 사용하는 것입니다.

참고

SQLSTATE 코드로 오류 코드를 지정할 때 미리 정의된 오류 코드에 국한되지 않고 5자리 및/또는 대문자 ASCII 문자로 구성된 오류 코드를 선택할 수 있습니다.00000. 0 세 개로 끝나는 사설 토토 코드는 발생하지 않는 것이 좋습니다. 이는 카테고리 코드이고 전체 카테고리를 트랩해야만 트랩할 수 있기 때문입니다.

42.8.2. 주장 확인 중

어설션문은 디버깅 검사를 삽입하기 위한 편리한 약칭입니다.PL/pgSQL함수.

어설션조건 [ , 메시지 ];

조건는 항상 true로 평가될 것으로 예상되는 부울 표현식입니다. 만약 그렇다면,어설션문은 더 이상 아무것도 하지 않습니다. 결과가 false이거나 null인 경우에는ASSERT_FAILURE예외가 발생했습니다. (평가 중 오류가 발생한 경우조건, 정상적인 사설 토토로 보고됩니다.)

선택사항인 경우메시지제공되며 결과(null이 아닌 경우)가 기본 오류 메시지 텍스트를 대체하는 표현식입니다.어설션 실패, 그래야만조건실패.메시지어설션이 성공하는 일반적인 경우에는 표현식이 평가되지 않습니다.

어설션 테스트는 구성 매개변수를 통해 활성화 또는 비활성화될 수 있습니다.plpgsql.check_asserts, 부울 값을 취합니다. 기본값은켜짐. 이 매개변수가 다음과 같은 경우꺼짐그런 다음어설션문은 아무것도 하지 않습니다.

참고어설션은 일반적인 오류 조건을 보고하는 것이 아니라 프로그램 버그를 감지하기 위한 것입니다. 다음을 사용하세요.상승위에 설명된 진술입니다.