토토 결과 생성

CREATE RULE — 새로운 재작성 토토 결과 정의

시놉시스

토토 결과 생성 [ 또는 교체 ]이름AS ON이벤트받는 사람테이블_이름[ 어디에서조건]
    하세요 [ 또한 | 대신 ]  아무것도 |명령 | ( 명령 ; 명령 ... ) }

어디에서이벤트다음 중 하나일 수 있습니다.선택 | 삽입 | 업데이트 | 삭제

설명

토토 결과 생성지정된 테이블 또는 뷰에 적용되는 새 토토 결과을 정의합니다.토토 결과 생성 또는 교체새 규칙을 생성하거나 동일한 테이블에 대해 동일한 이름의 기존 규칙을 대체합니다.

포스트그레SQL규칙 시스템을 사용하면 데이터베이스 테이블의 삽입, 업데이트 또는 삭제 시 수행할 대체 작업을 정의할 수 있습니다. 대략적으로 말하면 규칙은 특정 테이블에서 특정 명령이 실행될 때 추가 명령이 실행되도록 합니다. 또는,대신규칙은 주어진 명령을 다른 명령으로 바꾸거나 명령이 전혀 실행되지 않게 할 수 있습니다. 규칙은 SQL 보기를 구현하는 데에도 사용됩니다. 규칙은 실제로 명령 변환 메커니즘 또는 명령 매크로라는 점을 인식하는 것이 중요합니다. 변환은 명령 실행이 시작되기 전에 발생합니다. 실제로 각 물리적 행에 대해 독립적으로 실행되는 작업을 원하는 경우 규칙이 아닌 트리거를 사용하는 것이 좋습니다. 규칙 시스템에 대한 자세한 내용은 다음을 참조하세요.PostgreSQL : 문서 : 14 : 41 장. 범퍼카 토토 시스템.

현재,선택 중규칙은 뷰에만 첨부할 수 있습니다. (테이블에 하나를 추가하면 테이블이 뷰로 변환됩니다.) 이러한 규칙에는 이름을 지정해야 합니다."_RETURN", 무조건이어야 합니다대신토토 결과이며 단일로 구성된 작업이 있어야 합니다.선택명령. 이 명령은 뷰에 표시되는 내용을 정의합니다. (뷰 자체는 기본적으로 저장 공간이 없는 더미 테이블입니다.) 이러한 규칙을 구현 세부 사항으로 간주하는 것이 가장 좋습니다. 뷰는 다음을 통해 재정의될 수 있습니다.규칙 "_RETURN"을 생성 또는 교체..., 사용하는 것이 더 나은 스타일입니다보기 생성 또는 교체.

당신은 정의하여 업데이트 가능한 보기의 환상을 만들 수 있습니다.삽입 중, 업데이트 중삭제 중규칙(또는 목적에 맞는 규칙의 하위 집합)을 사용하여 뷰의 업데이트 작업을 다른 테이블의 적절한 업데이트로 대체합니다. 지원하고 싶다면반환 삽입등등, 적절한 값을 입력하세요.돌아오는 중이러한 각 토토 결과에 조항을 추가하세요.

복잡한 보기 업데이트에 조건부 규칙을 사용하려고 하면 문제가 발생합니다. 거기반드시무조건적이 되세요대신13698_13791대신, 시스템은 경우에 따라 뷰의 더미 테이블에서 작업을 수행하려고 시도하게 될 수 있다고 생각하기 때문에 업데이트 작업을 수행하려는 시도를 계속 거부합니다. 조건부 규칙에서 유용한 사례를 모두 처리하려면 unconditional을 추가하세요.대신 아무것도 하지 마세요규칙은 더미 테이블을 업데이트하기 위해 호출되지 않는다는 것을 시스템이 이해하도록 보장합니다. 그런 다음 조건부 규칙을 비로 만듭니다.대신; 적용되는 경우 기본값에 추가됩니다.아무것도 대신하지 않음액션. (이 방법은 현재 지원되지 않습니다.돌아오는 중그러나 쿼리합니다.)

참고

자동으로 업데이트할 수 있을 만큼 간단한 보기(참조보기 만들기)은 업데이트하기 위해 사용자가 만든 토토 결과이 필요하지 않습니다. 어쨌든 명시적인 토토 결과을 만들 수는 있지만 자동 업데이트 변환은 일반적으로 명시적인 토토 결과보다 성능이 뛰어납니다.

고려해볼 만한 또 다른 대안은 다음을 사용하는 것입니다.대신트리거(참조트리거 생성) 규칙 대신

매개변수

이름

생성할 규칙의 이름. 이는 동일한 테이블에 대한 다른 규칙의 이름과 구별되어야 합니다. 동일한 테이블, 동일한 이벤트 유형에 대한 여러 규칙이 알파벳 이름 순서로 적용됩니다.

이벤트

이벤트는 다음 중 하나입니다.선택, 삽입, 업데이트또는삭제. 참고하세요.삽입포함충돌 중절은 다음 중 하나를 갖는 테이블에서 사용할 수 없습니다.삽입또는업데이트규칙. 대신 업데이트 가능한 뷰를 사용해 보세요.

테이블_이름

규칙이 적용되는 테이블 또는 보기의 이름(선택적으로 스키마 한정).

조건

모두SQL조건식(반환부울). 조건 표현식은 다음을 제외한 어떤 테이블도 참조할 수 없습니다.신규그리고오래된, 집계 함수를 포함할 수 없습니다.

대신

대신명령이 실행되어야 함을 나타냅니다.대신에원래 명령입니다.

또한

또한명령이 실행되어야 함을 나타냅니다.추가로원래 명령입니다.

둘 다 아니라면또한아니요대신지정되었습니다.또한기본값입니다.

명령

규칙 작업을 구성하는 명령 또는 명령들. 유효한 명령은 다음과 같습니다.선택, 삽입, 업데이트, 삭제, 또는알림.

내부조건그리고명령, 특수 테이블 이름신규그리고오래된참조된 테이블의 값을 참조하는 데 사용할 수 있습니다.신규다음에서 유효합니다.삽입 중그리고업데이트 중삽입되거나 업데이트되는 새 행을 참조하는 규칙.오래된다음에서 유효합니다.업데이트 중그리고삭제 중업데이트되거나 삭제되는 기존 행을 참조하는 규칙.

참고

테이블에 대한 토토 결과을 생성하거나 변경하려면 테이블의 소유자여야 합니다.

다음에 대한 규칙에서삽입, 업데이트또는삭제보기에 다음을 추가할 수 있습니다.돌아오는 중뷰의 열을 내보내는 절입니다. 이 절은 규칙이 다음에 의해 트리거되는 경우 출력을 계산하는 데 사용됩니다.반환 삽입, 업데이트 반환 중, 또는복귀 삭제각각 명령을 실행합니다. 규칙이 없는 명령에 의해 트리거되는 경우돌아오는 중, 토토 결과의돌아오는 중절은 무시됩니다. 현재 구현에서는 무조건만 허용합니다.대신포함할 규칙돌아오는 중; 또한 최대 하나가 있을 수 있습니다.돌아오는 중19747_19844돌아오는 중결과를 계산하는 데 사용되는 절입니다.)돌아오는 중뷰에 대한 쿼리가 없으면 거부됩니다.돌아오는 중사용 가능한 모든 토토 결과의 조항.

순환 규칙을 피하도록 주의하는 것이 매우 중요합니다. 예를 들어, 다음 두 규칙 정의는 각각 다음에서 허용됩니다.포스트그레SQL, 그선택명령으로 인해 발생함PostgreSQL토토 결과의 반복적 확장으로 인해 오류를 보고하려면:

규칙 "_RETURN" AS 생성
    t1을 선택하면
    대신에
        SELECT * FROM t2;

다음과 같이 "_RETURN" 토토 결과 생성
    t2로 선택
    대신에
        SELECT * FROM t1;

t1에서 * 선택;

현재 규칙 작업에 다음이 포함되어 있는 경우알림명령, 그알림명령은 무조건 실행됩니다. 즉,알림토토 결과을 적용해야 하는 행이 없더라도 발행됩니다. 예를 들어:

mytable 업데이트 시에 inform_me 규칙을 생성하세요. mytable에도 알림을 보내세요.

UPDATE mytable SET 이름 = 'foo' WHERE id = 42;

하나알림이벤트는 다음 기간 동안 전송됩니다.업데이트, 조건과 일치하는 행이 있는지 여부id = 42. 이는 향후 릴리스에서 수정될 수 있는 구현 제한 사항입니다.

호환성

토토 결과 생성포스트그레SQL언어 확장, 전체 쿼리 재작성 시스템도 마찬가지입니다.

수정사항 제출

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