이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 사설 토토 작성버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

토토 꽁 머니 생성

이름

CREATE RULE — 새 토토 꽁 머니을 정의합니다.
토토 꽁 머니 생성이름AS ON이벤트받는 사람객체[ 어디에서조건]
    [ 대신 ] [을 하세요행동| 아무것도 ]

입력

이름

생성할 규칙의 이름입니다.

이벤트

이벤트는 다음 중 하나입니다.선택, 업데이트, 삭제또는삽입.

객체

개체는 다음 중 하나입니다.테이블또는테이블..

조건

모든 SQL WHERE 절,신규또는오래된대신 나타날 수 있습니다. 인스턴스 변수가 있을 때마다 인스턴스 변수 SQL에서는 허용됩니다.

행동

모든 SQL 문,신규또는오래된대신 나타날 수 있습니다. 인스턴스 변수가 있을 때마다 인스턴스 변수 SQL에서는 허용됩니다.

출력

만들기

토토 꽁 머니이 성공적으로 완료되면 메시지가 반환됩니다. 생성되었습니다.

설명

포스트그레스 토토 꽁 머니 시스템대체를 정의할 수 있습니다. 삽입, 업데이트, 삭제 시 수행할 작업 데이터베이스 테이블 또는 클래스. 현재 규칙은 다음과 같이 사용됩니다. 테이블 뷰를 구현합니다.

규칙의 의미는 당시 개인이 인스턴스에 액세스, 삽입, 업데이트 또는 삭제된 경우 이전 인스턴스(선택, 업데이트 및 삭제용) 및 새 인스턴스 인스턴스(삽입 및 업데이트용). 만약이벤트ON 절과에 지정됨조건WHERE에 지정됨 절은 이전 인스턴스에 대해 true입니다.행동규칙의 일부가 실행됩니다. 첫째, 그러나 이전 인스턴스 및/또는 새 인스턴스의 필드 값 인스턴스는 다음으로 대체됩니다.오래된.속성-이름그리고새로운.속성-이름.

행동토토 꽁 머니의 일부 동일한 명령 및 트랜잭션 식별자를 사용하여 실행됩니다. 활성화를 유발한 사용자 명령입니다.

참고

SQL 규칙에 대한 주의가 필요합니다. 같은 학번이면 이름 또는 인스턴스 변수가에 나타납니다.이벤트, 조건그리고행동토토 꽁 머니의 일부, 그것들은 모두 다른 튜플 변수로 간주됩니다. 좀 더 정확하게는,신규그리고오래된이들 사이에 공유되는 유일한 튜플 변수입니다 조항. 예를 들어, 다음 두 규칙은 동일합니다. 의미론:

emp.salary 업데이트 중 emp.name = "Joe"
    할 
        업데이트 emp 설정 ... 어디서 ...
emp-1.salary 업데이트 중 emp-2.name = "Joe"
    할 
        업데이트 emp-3 세트 ... 어디서 ...
각 규칙에는 선택적 태그 INSTEAD가 있을 수 있습니다. 이것이 없으면 태그,액션다음에 수행됩니다 다음과 같은 경우 사용자 명령에 추가됩니다.이벤트에서조건규칙의 일부가 발생합니다. 또는,액션부분이 대신 완료됩니다. 사용자 명령. 이 나중의 경우에는액션키워드일 수 있음아무것도 없음.

순환 규칙을 피하는 것이 매우 중요합니다. 에 대한 예를 들어, 다음 두 규칙 정의는 각각 에서 수락함포스트그레스, 선택 명령으로 인해 발생합니다.포스트그레스오류를 보고합니다. 왜냐하면 쿼리가 너무 많이 순환되었습니다.

예 19-1. 순환 재작성의 예 토토 꽁 머니 조합.

bad_rule_combination_1 AS 토토 꽁 머니 생성
    Emp로 선택
    대신에 
        toyemp를 선택하세요;
bad_rule_combination_2 AS 토토 꽁 머니 생성
    ON 선택 TOyemp
    대신에 
        비우려면 선택하세요.

EMP에서 선택하려는 시도는 다음과 같습니다.포스트그레오류를 발행하기 위해 쿼리가 너무 많이 순환되었습니다.

SELECT * FROM emp;

다음을 수행하려면 클래스에 대한 규칙 정의 액세스 권한이 있어야 합니다. 그것에 대한 규칙을 정의하십시오. 사용부여그리고취소권한을 변경합니다.

a의 개체SQL토토 꽁 머니은 할 수 없습니다 배열 참조여야 하며 매개변수를 가질 수 없습니다.

"oid" 필드 외에 시스템 속성은 다음과 같을 수 없습니다. 규칙의 어느 곳에서나 참조됩니다. 무엇보다도 이는 다음을 의미합니다. 인스턴스의 기능(예:foo(emp)어디에서emp은 클래스)는 규칙의 어느 곳에서도 호출할 수 없습니다.

토토 꽁 머니 시스템은 규칙 텍스트와 쿼리 계획을 텍스트로 저장합니다. 속성. 이는 다음과 같은 경우 토토 꽁 머니 생성이 실패할 수 있음을 의미합니다. 규칙과 그 다양한 내부 표현이 일부를 초과합니다. 한 페이지(8KB) 정도의 값입니다.

사용법

Sam이 Joe와 동일한 급여 조정을 받도록 만드세요:

규칙 example_1 AS 만들기
    업데이트 emp.salary WHERE old.name = "Joe"
    할 
        업데이트 
        SET 급여 = new.salary
        WHERE emp.name = "샘";
Joe가 급여 조정을 받을 때 이벤트는 다음과 같습니다. true가 되고 Joe의 이전 인스턴스와 제안된 새 인스턴스는 실행 루틴에 사용할 수 있습니다. 따라서 그의 새 연봉은 이후에 규칙의 작업 부분으로 대체됩니다. 실행. 이는 Joe의 급여를 Sam에게 전파합니다.

Bill이 액세스되면 Joe의 급여를 받도록 만드세요:

규칙 example_2 AS 생성
    EMP.salary로 선택
    WHERE old.name = "빌"
    대신에
        직원 급여 선택
        엠프에서
        WHERE emp.name = "Joe";

조가 신발을 신은 직원의 급여에 접근하는 것을 거부합니다. 부서 (현재_사용자반환 현재 사용자의 이름):

규칙 example_3 AS 만들기
    켜짐 
        직원 급여로 선택
        여기서 old.dept = "신발" AND current_user = "Joe"
    대신 아무것도 하지 마십시오.

장난감에서 일하는 직원의 보기를 만듭니다. 부서.

CREATE toyemp(이름 = char16, 급여 = int4);

example_4 AS 토토 꽁 머니 생성
    ON 선택 TOyemp
    대신에
        SELECT emp.이름, emp.급여
        엠프에서
        emp.dept = "장난감";

모든 신입 직원은 연봉이 5,000 이하여야 합니다.

규칙 example_5 AS 생성
    신규 급여  5000인 곳에서 비활성 상태로 전환
    할 
        업데이트 뉴스세트 급여 = 5000;

호환성

SQL92

토토 꽁 머니 생성문은 다음과 같습니다포스트그레스언어 확장. 없습니다토토 꽁 머니 생성문의 내용SQL92.