SPI_EXECUTE
또는 유사한 함수 postgresql내에서 토토 커뮤니티를 할당토토 커뮤니티 컨텍스트는 다양한 시간 동안 살아야하는 여러 장소에서 만들어진 할당을 관리하는 편리한 방법을 제공합니다. 컨텍스트를 파괴하면 할당 된 모든 토토 커뮤니티가 방출됩니다. 따라서 토토 커뮤니티 누출을 피하기 위해 개별 물체를 추적 할 필요는 없습니다. 대신 상대적으로 적은 수의 맥락 만 관리해야합니다.Palloc
및 관련 함수는에서 토토 커뮤니티를 할당합니다.“현재”컨텍스트.
SPI_CONNECT
새로운 토토 커뮤니티 컨텍스트를 생성하여 현재로 만듭니다.SPI_FINISH
이전의 현재 토토 커뮤니티 컨텍스트를 복원하고에 의해 생성 된 컨텍스트를 파괴합니다SPI_CONNECT
. 이러한 동작은 C 함수 내부에서 이루어진 일시적 토토 커뮤니티 할당이 C 함수 종료시 토토 커뮤니티 누출을 피하도록 보장합니다.
그러나 C 함수가 할당 된 토토 커뮤니티 (예 : Pass-By-Reference 데이터 유형의 값과 같은)에서 개체를 반환 해야하는 경우를 사용하여 해당 토토 커뮤니티를 할당 할 수 없습니다.Palloc
, 적어도 SPI에 연결되어 있지 않습니다. 시도하면 객체는에 의해 거래됩니다.SPI_FINISH
및 C 함수는 안정적으로 작동하지 않습니다. 이 문제를 해결하려면 사용SPI_PALLOC
리턴 객체에 대한 토토 커뮤니티를 할당하려면SPI_PALLOC
에 토토 커뮤니티를 할당“상위 집행자 컨텍스트”, 즉, 현재의 토토 커뮤니티 컨텍스트는SPI_CONNECT
호출되었으며, 이는 C 함수에서 반환 된 값에 대한 올바른 컨텍스트입니다. 이 섹션에 설명 된 다른 유틸리티 기능 중 일부는 상위 집행자 컨텍스트에서 생성 된 개체를 반환합니다.
언제SPI_CONNECT
호출 된 C 함수의 개인 컨텍스트라고합니다.SPI_CONNECT
는 현재 상황으로 만들어졌습니다. 에 의해 만들어진 모든 할당Palloc
, Repalloc
또는 SPI 유틸리티 함수 (이 섹션에 설명 된대로)는이 맥락에서 이루어집니다. C 함수가 SPI 관리자와 연결이 끊어지면 (viaSPI_FINISH
) 현재 컨텍스트는 상부 집행자 컨텍스트로 복원되며 C 함수 토토 커뮤니티 컨텍스트에서 작성된 모든 할당은 해제되며 더 이상 사용할 수 없습니다.