5.15. 종속성 추적#

외래 키 제약 조건, 뷰, 트리거, 함수 등이 포함된 많은 테이블을 포함하는 복잡한 데이터베이스 구조를 생성할 때 암시적으로 개체 간의 종속성 그물을 생성합니다. 예를 들어 외래 키 제약 조건이 있는 테이블은 참조하는 테이블에 따라 달라집니다.

전체 데이터베이스 구조의 무결성을 보장하려면,범퍼카 토토다른 객체가 여전히 의존하고 있는 객체를 삭제할 수 없도록 합니다. 예를 들어, 우리가 고려한 제품 테이블을 삭제하려고 시도합니다.섹션 5.5.5, 이에 따른 주문 테이블이 있으면 다음과 같은 오류 메시지가 표시됩니다.

드롭 테이블 제품;

오류: 다른 객체가 테이블 제품에 의존하기 때문에 테이블 제품을 삭제할 수 없습니다.
DETAIL: 테이블 주문에 대한 Orders_product_no_fkey 제한은 테이블 제품에 따라 다릅니다.
힌트: 종속 개체도 삭제하려면 DROP ... CASCADE를 사용하세요.

오류 메시지에는 유용한 힌트가 포함되어 있습니다: 모든 종속 객체를 개별적으로 삭제하고 싶지 않다면 다음을 실행할 수 있습니다:

DROP TABLE 제품 캐스케이드;

그리고 모든 종속 객체는 제거되며 이에 의존하는 모든 객체도 재귀적으로 제거됩니다. 이 경우 주문 테이블은 제거되지 않고 외래 키 제약 조건만 제거됩니다. 외래 키 제약 조건에는 아무것도 의존하지 않기 때문에 여기서 중지됩니다. (무엇인지 확인하고 싶다면드롭 ... 캐스케이드할 것이다, 달리다드롭없이캐스케이드그리고 읽어보세요세부정보출력.)

거의 모든드롭명령포스트그레SQL지원 지정캐스케이드. 물론 가능한 종속성의 특성은 개체 유형에 따라 다릅니다. 쓸 수도 있습니다제한대신에캐스케이드다른 객체가 의존하는 객체 삭제를 방지하는 기본 동작을 가져옵니다.

참고

SQL 표준에 따라 다음 중 하나를 지정제한또는캐스케이드a에서 필요합니다.드롭명령. 실제로 해당 규칙을 시행하는 데이터베이스 시스템은 없지만 기본 동작은 다음과 같습니다.제한또는캐스케이드시스템에 따라 다릅니다.

만약에드롭명령은 여러 개체를 나열합니다.캐스케이드지정된 그룹 외부에 종속성이 있는 경우에만 필요합니다. 예를 들어 다음과 같이 말할 때드롭 테이블 탭1, 탭2참조하는 외래 키의 존재탭1from탭2그런 의미는 아닙니다캐스케이드성공하려면 필요합니다.

본문이 문자열 리터럴로 정의된 사용자 정의 함수 또는 프로시저의 경우,범퍼카 토토인수 및 결과 유형과 같이 함수의 외부에 표시되는 속성과 관련된 종속성을 추적하지만아님함수 본문을 검사해야만 알 수 있는 종속성. 예를 들어 다음 상황을 고려해보세요.

CREATE TYPE 레인보우 AS ENUM('빨간색', '주황색', '노란색',
                             '녹색', '파란색', '보라색');

CREATE TABLE my_colors(무지개 색상, 메모 텍스트);

CREATE FUNCTION get_color_note(무지개) 텍스트를 AS로 반환합니다.
  '색상 = $1인 my_colors에서 메모 선택'
  언어 SQL;

(참조PostgreSQL : 문서 : 18 : 36.5. 쿼리 언어 (SQL) 토토 사이트SQL 언어 함수에 대한 설명입니다.)범퍼카 토토다음을 알게 될 것입니다get_color_note함수는 다음에 따라 다릅니다.무지개유형: 유형을 삭제하면 해당 인수 유형이 더 이상 정의되지 않으므로 함수가 강제로 삭제됩니다. 하지만범퍼카 토토고려하지 않을 것입니다get_color_note의존하다my_colors테이블이므로 테이블이 삭제되더라도 함수는 삭제되지 않습니다. 이 접근 방식에는 단점도 있지만 장점도 있습니다. 테이블이 누락된 경우에도 함수는 어떤 의미에서는 여전히 유효하지만 이를 실행하면 오류가 발생합니다. 동일한 이름의 새 테이블을 생성하면 함수가 다시 작동할 수 있습니다.

반면, 본문이 SQL 표준 스타일로 작성된 SQL 언어 함수 또는 프로시저의 경우 본문은 함수 정의 시 구문 분석되고 구문 분석기가 인식한 모든 종속성이 저장됩니다. 따라서 위의 함수를 다음과 같이 작성하면

CREATE FUNCTION get_color_note (무지개) 텍스트 반환
원자 시작
  my_colors에서 메모 선택 WHERE color = $1;
끝;

다음에 대한 함수의 종속성my_colors테이블은 다음에 의해 알려지고 시행됩니다.드롭.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.