이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 63.1. 일반 와이즈 토토 레코드버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

62장. 일반 롤 토토 레코드

내장된 모든 롤 토토 로그 모듈에는 고유한 유형의 롤 토토 레코드가 있지만 일반적인 방식으로 페이지 변경 사항을 설명하는 일반 롤 토토 레코드 유형도 있습니다. 이는 자체 롤 토토 다시 실행 루틴을 등록할 수 없기 때문에 사용자 정의 액세스 방법을 제공하는 확장에 유용합니다.

일반 WAL 레코드를 구성하기 위한 API는 다음에 정의되어 있습니다.access/generic_xlog.h및 구현액세스/transam/generic_xlog.c.

일반 WAL 레코드 기능을 사용하여 WAL 로그 데이터 업데이트를 수행하려면 다음 단계를 따르십시오.

  1. 상태 = GenericXLogStart(관계)— 주어진 관계에 대한 일반 롤 토토 레코드 구성을 시작합니다.

  2. page = GenericXLogRegisterBuffer(상태, 버퍼, 플래그)— 현재 일반 WAL 레코드 내에서 수정될 버퍼를 등록합니다. 이 함수는 수정이 이루어져야 하는 버퍼 페이지의 임시 복사본에 대한 포인터를 반환합니다. (버퍼의 내용을 직접 수정하지 마십시오.) 세 번째 인수는 작업에 적용할 수 있는 플래그의 비트 마스크입니다. 현재 유일한 플래그는 다음과 같습니다.GENERIC_XLOG_FULL_IMAGE는 델타 업데이트가 아닌 전체 페이지 이미지가 롤 토토 레코드에 포함되어야 함을 나타냅니다. 일반적으로 이 플래그는 페이지가 새 페이지이거나 완전히 다시 작성된 경우 설정됩니다.GenericXLogRegisterBuffer롤 토토에 기록된 작업이 여러 페이지를 수정해야 하는 경우 반복될 수 있습니다.

  3. 이전 단계에서 얻은 페이지 이미지에 수정사항을 적용합니다.

  4. GenericXLogFinish(상태)— 변경 사항을 버퍼에 적용하고 일반 롤 토토 레코드를 내보냅니다.

WAL 레코드 생성은 위 단계 사이에서 다음을 호출하여 취소할 수 있습니다.GenericXLogAbort(상태). 페이지 이미지 사본에 대한 모든 변경사항이 삭제됩니다.

일반 WAL 레코드 기능을 사용할 때 다음 사항에 유의하십시오.

  • 버퍼를 직접 수정하는 것은 허용되지 않습니다! 모든 수정은 다음에서 얻은 사본으로 수행되어야 합니다.GenericXLogRegisterBuffer(). 즉, 일반 롤 토토 레코드를 만드는 코드는 절대 호출하면 안 됩니다.BufferGetPage()그 자체로. 그러나 적절한 시간에 버퍼를 고정/고정 해제하고 잠그거나 잠금 해제하는 것은 호출자의 책임입니다. 이전부터 각 대상 버퍼에 배타적 잠금을 유지해야 합니다.GenericXLogRegisterBuffer()이후까지GenericXLogFinish().

  • 버퍼 등록(2단계)과 페이지 이미지 수정(3단계)을 자유롭게 혼합할 수 있습니다. 즉, 두 단계를 임의의 순서로 반복할 수 있습니다. 버퍼는 재생 중에 잠금을 얻는 순서와 동일한 순서로 등록되어야 한다는 점을 명심하세요.

  • 일반 롤 토토 레코드에 등록할 수 있는 최대 버퍼 수는MAX_GENERIC_XLOG_PAGES. 이 한도를 초과하면 오류가 발생합니다.

  • 일반 롤 토토은 수정될 페이지가 표준 레이아웃을 가지고 있으며 특히 사이에 유용한 데이터가 없다고 가정합니다.pd_lower그리고pd_upper.

  • 버퍼 페이지의 복사본을 수정하고 있으므로,GenericXLogStart()중요 섹션을 시작하지 않습니다. 따라서 사이에 메모리 할당, 오류 던지기 등을 안전하게 수행할 수 있습니다.GenericXLogStart()그리고GenericXLogFinish(). 내부에는 유일한 실제 중요 섹션이 있습니다.GenericXLogFinish(). 전화는 걱정하지 않으셔도 됩니다.GenericXLogAbort()오류 종료 중.

  • GenericXLogFinish()버퍼를 더티로 표시하고 해당 LSN을 설정합니다. 이 작업을 명시적으로 수행할 필요는 없습니다.

  • 기록되지 않은 관계의 경우 실제 롤 토토 레코드가 내보내지지 않는다는 점을 제외하면 모든 것이 동일하게 작동합니다. 따라서 일반적으로 기록되지 않은 관계에 대해 명시적인 검사를 수행할 필요가 없습니다.

  • 일반 롤 토토 다시 실행 기능은 등록된 순서와 동일한 순서로 버퍼에 대한 배타적 잠금을 획득합니다. 모든 변경 사항을 다시 실행한 후에는 동일한 순서로 잠금이 해제됩니다.

  • 만약GENERIC_XLOG_FULL_IMAGE이(가) 등록된 버퍼에 대해 지정되지 않았습니다. 일반 WAL 레코드에는 이전 페이지 이미지와 새 페이지 이미지 사이의 델타가 포함되어 있습니다. 이 델타는 바이트별 비교를 기반으로 합니다. 이는 페이지 내에서 데이터를 이동하는 경우 매우 간단하지 않으며 향후 개선될 수 있습니다.