2025 년 7 월 17 일 : | 롤 토토 18 베타 2 릴리스!
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : F.39. SPI - 서버 프로그래밍 인터페이스 젠 토토/예제버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

F.34. SPI

theSPI모듈은 여러 가지를 제공합니다 사용의 실행 가능한 예토토 사이트 : 문서 : 9(SPI) 그리고 트리거. 이러한 기능은 그 자체로 약간의 가치가 있습니다. 맞아, 그들은 당신 자신을 위해 수정하는 예로 더 유용합니다. 목적. 기능은 일반적으로 사용될만큼 일반적입니다. 표이지만 롤 토토 및 필드 이름을 지정해야합니다 (설명대로 아래) 트리거를 만드는 동안.

아래에 설명 된 각 기능 그룹은 별도로 설치 할 수없는 확장.

F.34.1. 리핀 - 참조 무결성 구현 기능

check_primary_key ()check_foreign_key ()확인에 사용됩니다 외국의 주요 제약. (이 기능은 그 이후로 오래되었습니다 물론 내장 된 외국 키 메커니즘으로 대체되었지만 모듈은 여전히 예로 유용합니다.)

check_primary_key ()참조 롤 토토. 사용하려면 A 생성전 삽입 또는 업데이트롤 토토 에서이 함수를 사용하여 트리거합니다 다른 롤 토토 참조. 트리거 인수로 지정하십시오 외국 키를 형성하는 롤 토토의 열 이름을 참조합니다. 참조 롤 토토 이름 및 참조 롤 토토의 열 이름 기본/고유 키를 형성합니다. 여러 외국 키를 처리하려면 각 참조에 대한 트리거 생성.

check_foreign_key ()참조 롤 토토. 사용하려면 A 생성전 삭제 또는 업데이트롤 토토 에서이 함수를 사용하여 트리거합니다 다른 표에 의해 참조됩니다. 트리거 인수로 지정하십시오 함수가 수행 해야하는 참조 롤 토토 수 확인, 참조 키가 발견되는 경우 조치 (캐스케이드- 참조 행을 삭제하려면제한- 참조 키를 참조하는 경우 거래를 중단합니다 존재하다,setNull- 참조 키를 설정하려면 필드에서 null), 트리거 된 테이블의 열 이름은 다음을 형성합니다. 기본/고유 키, 그런 다음 참조 테이블 이름과 열입니다 이름 (지정된 참조 테이블에 대해 반복 첫 번째 인수). 기본/고유 키 열은 있어야합니다 널 표시되지 않고 고유 한 색인이 있어야합니다.

에 예가 있습니다.Refint.example.

F.34.2. TimeTravel - 시간 여행 구현 기능

오래 전,롤 토토a 삽입 및 삭제 시간을 유지하는 내장 시간 여행 기능 각 튜플에 대해. 이것은 이러한 기능을 사용하여 모방 할 수 있습니다. 사용합니다 이 기능은의 두 열에 추가해야합니다.Abstime튜플이있는 날짜를 저장하려면 입력하십시오 삽입 (start_date) 및 변경/삭제 (stop_date) :

롤 토토 생성 mytab (
        ... ...
        start_date abstime,
        stop_date abstime
        ... ...
);

열은 원하는대로 명명 될 수 있지만 이것에서 토론 우리는 그들을 start_date 및 stop_date라고 부릅니다.

새 행이 삽입되면 start_date는 일반적으로 다음으로 설정해야합니다. 현재 시간, 그리고 stop_date toInfinity. 트리거는이 값을 자동으로 대체합니다 삽입 된 데이터에는이 열에 널이 포함되어 있습니다. 일반적으로 삽입 이 열의 명시적인 비 널 데이터는 덤프 데이터를 다시로드합니다.

stop_date와 같은 튜플Infinityare"유효한 지금"및 수정할 수 있습니다. 유한 한 stop_date가있는 튜플은 더 이상 수정할 수 없습니다. 트리거는 그것을 방해합니다. (그렇게해야한다면 꺼질 수 있습니다. 아래 그림과 같이 시간 여행.)

수정 가능한 행의 경우 튜플의 stop_date 만 업데이트 업데이트되는 것은 (현재 시간으로) 변경되고 새로운 튜플이 변경됩니다. 수정 된 데이터가 삽입됩니다. 이 새로운 것에서 start_date 튜플은 현재 시간으로 설정되고 stop_date toInfinity.

삭제는 실제로 튜플을 제거하지 않고 그 자체 만 설정합니다. stop_date to 현재 시간.

튜플 쿼리"유효한 지금", 포함하다stop_date = 'Infinity'in 쿼리는 어디에조 상태입니다. (당신은 그것을 a에 통합하고 싶을 수도 있습니다 마찬가지로, 과거에 유효한 튜플에 대한 쿼리를 할 수 있습니다. start_date 및 stop_date에 적합한 조건이 있습니다.

TimeTravel ()장군입니다 이 동작을 지원하는 트리거 기능. a 만들기삽입 또는 업데이트 또는 삭제 전이것을 사용하는 트리거 각 시간 여행 롤 토토에서 기능. 두 개의 트리거를 지정합니다 인수 : start_date 및 stop_date의 실제 이름 열. 선택적으로 1 ~ 3 개의 인수를 지정할 수 있습니다. 유형의 열을 참조해야합니다텍스트. 그만큼 트리거는 현재 사용자의 이름을 첫 번째로 저장합니다. 삽입 중에이 열, 업데이트 중 두 번째 열은 삭제 중 세 번째.

set_timeTravel ()롤 토토의 시간 여행을 켜거나 끄십시오.set_timeTravel ( 'mytab', 1)표에 tt를 켜겠습니다Mytab. set_timeTravel ( 'mytab', 0)tt를 끄겠습니다 롤 토토Mytab. 두 경우 모두 이전 상태입니다 보고된다. TT가 꺼져있는 동안 start_date를 수정하고 stop_date 열을 자유롭게. ON/OFF 상태는 로컬입니다 현재 데이터베이스 세션 - 새로운 세션은 항상 시작됩니다. 모든 테이블에 대한 TT 켜짐.

get_timeTravel ()TT를 반환합니다 변경하지 않고 롤 토토에 대한 상태.

예제가 있습니다timeTravel.example.

F.34.3. Autoinc - 자동화 분야의 기능

autoinc ()는 저장하는 방아쇠입니다 정수 필드로의 시퀀스의 다음 값. 이것은 약간 있습니다 내장 된 겹치기"직렬 열"기능이지만 동일하지는 않습니다.autoinc ()대체 시도를 무시합니다 인서트 중 다른 필드 값 및 선택적으로 사용할 수 있습니다. 업데이트 중에도 필드를 늘리려면

사용하려면 A를 작성하십시오.삽입 전(또는 선택적으로삽입 또는 업데이트 전) 이 기능을 사용하여 트리거. 두 가지 트리거 인수를 지정합니다 수정 될 정수 열의 이름과 값을 공급하는 시퀀스 객체. (실제로, 당신은 지정할 수 있습니다 그 이름의 여러 쌍, 더 이상 업데이트하려면 하나의 자동화 열보다.)

예제가 있습니다autoinc.example.

F.34.4. insert_username - 누가 변경했는지 추적하기위한 함수 롤 토토

insert_username ()트리거입니다 현재 사용자 이름을 텍스트 필드에 저장합니다. 이것은 될 수 있습니다 내에서 특정 행을 마지막으로 수정 한 추적에 유용합니다. 테이블.

사용하려면 A 생성삽입 전및/또는업데이트이 함수를 사용한 트리거. 단일 트리거 인수 지정 : 텍스트 열의 이름 수정됩니다.

예제가 있습니다insert_username.example.

F.34.5. ModdateTime - 마지막 수정 추적을위한 기능 시간

moddateTime ()트리거입니다 현재 시간을 A에 저장합니다.타임 스탬프필드. 마지막 수정 시간을 추적하는 데 유용 할 수 있습니다. 롤 토토 내의 특정 행의.

사용하려면 A 생성업데이트 전트리거 이 기능을 사용합니다. 단일 트리거 인수 : 이름을 지정하십시오 수정 될 열. 열은 유형이어야합니다타임 스탬프또는시간이 지남에 따라 타임 스탬프 존.

예제가 있습니다moddateMe.example.