이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : F.39. SPI - 서버 프로그래밍 인터페이스 젠 토토/예제버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.33. 스파이

spi모듈은 다음을 제공합니다 SPI 및 트리거 사용에 대한 몇 가지 실행 가능한 예입니다. 반면 이것들은 함수는 그 자체로 어느 정도 가치가 있습니다. 자신의 목적에 맞게 수정하는 예제로 더 유용합니다. 는 함수는 어떤 테이블에도 사용할 수 있을 정도로 일반적이지만 아래에 설명된 대로 테이블 및 필드 이름을 지정해야 합니다. 트리거를 생성합니다.

아래 설명된 각 기능 그룹은 다음과 같이 제공됩니다. 별도로 설치 가능한 확장 프로그램입니다.

F.33.1. refint — 참조 구현을 위한 함수 무결성

check_primary_key()그리고check_foreign_key()다음에 익숙합니다. 외래 키 제약 조건을 확인하세요. (이 기능은 길다. 내장된 외래 키 메커니즘으로 대체되었기 때문에 물론이지만 모듈은 여전히 예로서 유용합니다.)

check_primary_key()다음을 확인합니다 참조 테이블. 사용하려면 다음을 생성하세요.이전 삽입 또는 업데이트스포츠 토토 사이트에서 이 함수를 사용하여 트리거 다른 스포츠 토토 사이트을 참조합니다. 트리거 인수로 지정합니다. 외부 스포츠 토토 사이트을 구성하는 참조 스포츠 토토 사이트의 열 이름 키, 참조된 스포츠 토토 사이트 이름, 열 이름 기본/고유 키를 형성하는 참조 스포츠 토토 사이트입니다. 처리하다 여러 개의 외래 키가 있는 경우 각 참조에 대한 트리거를 만듭니다.

check_foreign_key()확인합니다 참조된 테이블. 사용하려면 다음을 생성하세요.이전 삭제 또는 업데이트스포츠 토토 사이트에서 이 함수를 사용하여 트리거 다른 스포츠 토토 사이트에서 참조됩니다. 트리거 인수로 지정합니다. 함수가 참조해야 하는 스포츠 토토 사이트의 수 검사 수행, 참조 키가 발견되면 작업 (계단식— 참조 삭제 행,제한— 거래 중단 참조 키가 존재하는 경우,setnull— 참조 키 필드를 null로 설정하려면), 트리거된 스포츠 토토 사이트의 기본/고유 키를 형성하는 열 이름, 스포츠 토토 사이트 이름과 열 이름 참조(최대한 반복) 첫 번째 인수로 지정된 스포츠 토토 사이트을 참조합니다). 참고 기본/고유 키 열은 NOT NULL로 표시되어야 합니다. 고유한 색인이 있어야 합니다.

다음에 예가 있습니다.refint.example.

F.33.2. timetravel — 시간 여행을 구현하기 위한 함수

오래 전,포스트그레SQL이 있었습니다 삽입과 삭제를 유지하는 시간여행 기능 내장 각 튜플의 횟수입니다. 이는 다음을 사용하여 에뮬레이션할 수 있습니다. 기능. 이 기능을 사용하려면 테이블에 두 가지를 추가해야 합니다. 열절대날짜를 저장하려면 입력하세요. 튜플이 삽입되고(start_date) 변경/삭제된 경우 (정지_날짜):

테이블 생성 mytab(
        ... ...
        start_date 절대 시간,
        stop_date 절대 시간
        ... ...
);

열의 이름은 원하는대로 지정할 수 있습니다. 토론에서는 start_date 및 stop_date라고 부르겠습니다.

새 행이 삽입되면 일반적으로 start_date는 다음과 같아야 합니다. 현재 시간으로 설정하고 stop_date를로 설정합니다.무한대. 트리거는 자동으로 삽입된 데이터에 Null이 포함된 경우 이 값을 대체합니다. 이 열. 일반적으로 null이 아닌 명시적인 데이터를 삽입하는 것은 이러한 열은 덤프된 항목을 다시 로드할 때만 수행되어야 합니다. 데이터.

stop_date가 다음과 같은 튜플무한대아르"유효함 지금"이며 수정될 수 있습니다. 유한한 튜플 stop_date는 더 이상 수정할 수 없습니다. 트리거가 방지합니다. 그것. (그렇게 해야 한다면 다음과 같이 시간 여행을 끌 수 있습니다. 아래에 표시됩니다.)

수정 가능한 행의 경우, stop_date만 업데이트하면 업데이트되는 튜플은 (현재 시간으로) 변경되고 새로운 수정된 데이터가 포함된 튜플이 삽입됩니다. 시작_날짜 이 새로운 튜플은 현재 시간으로 설정되고 stop_date는 다음으로 설정됩니다.무한대.

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

튜플을 쿼리하려면"지금 유효합니다", 포함stop_date = '무한대'안에 쿼리의 WHERE 조건입니다. (이를 뷰.) 마찬가지로 과거에 유효한 튜플을 쿼리할 수 있습니다. start_date 및 stop_date에 적합한 조건이 있는 시간입니다.

시간여행()장군입니다 이 동작을 지원하는 트리거 함수입니다. 생성하기삽입, 업데이트 또는 삭제 전각 시간 이동 테이블에서 이 함수를 사용하여 트리거합니다. 두 개의 트리거 인수를 지정합니다. 즉, 실제 이름 start_date 및 stop_date 열. 선택적으로 지정할 수 있습니다. 1~3개의 추가 인수(다음의 열을 참조해야 함) 유형텍스트. 트리거는 현재 사용자의 이름을 이 열 중 첫 번째 항목에 입력합니다. INSERT, UPDATE 중 두 번째 열, UPDATE 중 세 번째 열 삭제합니다.

set_timetravel()당신은 다음을 할 수 있습니다 테이블에 대한 시간 여행을 켜거나 끕니다.set_timetravel('mytab', 1)다음에 대해 TT를 켜겠습니다. 테이블마이탭. set_timetravel('mytab', 0)다음 기간 동안 TT를 끄겠습니다. 테이블마이탭. 두 경우 모두 오래된 상태가 보고됩니다. TT가 꺼져 있는 동안에는 start_date 및 stop_date 열은 자유롭게 사용할 수 있습니다. 온/오프가 가능하니 참고하세요 상태는 현재 데이터베이스 세션에 대해 로컬입니다 — 신선함 세션은 항상 모든 테이블에 대해 TT ON으로 시작됩니다.

get_timetravel()반환 변경하지 않고 스포츠 토토 사이트의 TT 상태입니다.

다음에 예가 있습니다.timetravel.example.

F.33.3. autoinc — 필드 자동 증가를 위한 함수

자동 증가()트리거는 다음과 같습니다. 시퀀스의 다음 값을 정수 필드에 저장합니다. 이 내장된 것과 일부 겹치는 부분이 있습니다."연재물 열"기능이지만 동일하지 않습니다.자동 증가()다음 시도를 무시합니다. 삽입하는 동안 다른 필드 값을 대체하고 선택적으로 필드를 증가시키는 데 사용할 수 있습니다. 업데이트도 마찬가지입니다.

사용하려면 다음을 만드세요.삽입 전(또는 선택적으로삽입 또는 업데이트 전) 이 기능을 사용하여 트리거합니다. 두 개의 트리거 인수를 지정합니다. 수정할 정수 열의 이름, 값을 제공할 시퀀스 객체입니다. (실제로는 할 수 있습니다. 원하는 경우 해당 이름의 쌍을 원하는 만큼 지정하세요. 둘 이상의 자동 증가 열을 업데이트합니다.)

다음에 예가 있습니다.autoinc.example.

F.33.4. insert_username — 누가 변경했는지 추적하는 함수 표

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

사용하려면 다음을 만드세요.삽입 전및/또는업데이트이것을 사용하여 트리거 기능. 단일 트리거 인수 지정: 수정될 텍스트 열입니다.

다음에 예가 있습니다.insert_username.example.

F.33.5. moddatetime — 마지막 수정 사항을 추적하는 함수 시간

moddatetime()트리거입니다 현재 시간을 a에 저장합니다.타임스탬프필드. 이는 추적에 유용할 수 있습니다. 특정 행의 마지막 수정 시간 스포츠 토토 사이트.

사용하려면 다음을 만드세요.업데이트 전이 함수를 사용하여 트리거합니다. 단일 트리거 인수를 지정합니다. 수정할 열의 이름입니다. 열은 다음 중 하나여야 합니다. 유형타임스탬프또는시간대가 포함된 타임스탬프.

다음에 예가 있습니다.moddatetime.example.