이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 42.8. PL/범퍼카 토토에서의 오류 처리버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

42.8. PL/범퍼카 토토의 오류 처리

PL/범퍼카 토토 함수 내 또는 PL/범퍼카 토토 함수에서 호출된 범퍼카 토토 코드는 잘못된 작업을 실행하거나 범퍼카 토토을 사용하여 오류를 생성하여 오류를 일으킬 수 있습니다.오류명령 또는 PL/범퍼카 토토'selog명령. 이러한 오류는 Tcl을 사용하여 Tcl 내에서 포착될 수 있습니다.잡기명령. 포착되지는 않았지만 PL/Tcl 기능 실행의 최상위 수준으로 전파되도록 허용되면 데이터베이스 오류로 전환됩니다.

반대로, PL/Tcl 내에서 발생하는 데이터베이스 오류spi_exec, spi_preparespi_execp명령은 Tcl 오류로 보고되므로 Tcl에서 잡을 수 있습니다.잡기명령. 다시 말하지만, 잡히지 않고 최상위 수준으로 전파되면 다시 데이터베이스 오류로 전환됩니다.

Tcl은 다음을 제공합니다오류코드Tcl 프로그램이 해석하기 쉬운 형식으로 오류에 대한 추가 정보를 나타낼 수 있는 변수입니다. 내용은 Tcl 목록 형식이며 첫 번째 단어는 오류를 보고하는 하위 시스템 또는 라이브러리를 식별합니다. 그 이후의 내용은 개별 하위 시스템이나 라이브러리에 맡겨집니다. PL/Tcl 명령으로 보고된 데이터베이스 오류의 경우 첫 번째 단어는포스트그레스, 두 번째 단어는 Postgres 버전 번호이고 추가 단어는 오류에 대한 자세한 정보를 제공하는 필드 이름/값 쌍입니다. 필드SQLSTATE, 조건그리고메시지항상 제공됩니다(처음 두 개는 다음과 같이 오류 코드와 조건 이름을 나타냅니다.PostgreSQL : 문서 : 9.6 : PostgreSQL 롤 토토 코드). 존재할 수 있는 필드는 다음과 같습니다.세부정보, 힌트, 컨텍스트, 스키마, 테이블, , 데이터 유형, 제약, 성명, cursor_position, 파일 이름, lineno기능 이름.

PL/범퍼카 토토을 사용하는 편리한 방법오류코드정보는 필드 이름이 배열 첨자가 되도록 배열에 로드하는 것입니다. 이를 수행하기 위한 코드는 다음과 같습니다.

if [catch  spi_exec $sql_command ] 
    if [linindex $::errorCode 0] == "POSTGRES" 
        배열 세트 errorArray $::errorCode
        if $errorArray(조건) == "정의되지 않은_테이블" 
            # 누락된 테이블 처리
         그렇지 않으면 
            # 다른 유형의 SQL 오류를 처리합니다.

(이중 콜론은 명시적으로 다음을 지정합니다.오류 코드전역 변수입니다.)