SPI_exec또는 유사한 기능PostgreSQL윈 토토 할당
기억 속컨텍스트, 이는
다양한 할당을 관리하는 편리한 방법
서로 다른 시간 동안 살아야 하는 장소.
컨텍스트를 삭제하면 할당된 모든 메모리가 해제됩니다.
그 안에. 따라서 개인의 기록을 추적할 필요는 없습니다.
메모리 누수를 방지하기 위한 객체 --- 상대적으로 적은 수
의 컨텍스트를 관리해야 합니다.팔록및 관련 함수가 윈 토토를 할당합니다.
에서"현재"컨텍스트.
SPI_connect새 기억을 생성합니다
컨텍스트를 파악하여 최신 상태로 만듭니다.SPI_finish이전 현재 메모리를 복원합니다.
컨텍스트를 삭제하고 다음에 의해 생성된 컨텍스트를 파괴합니다.SPI_connect. 이러한 조치는 다음을 보장합니다.
프로시저 내부에서 수행된 임시 메모리 할당은 다음과 같습니다.
프로시저 종료 시 회수되어 메모리 누수를 방지합니다.
그러나 프로시저가 할당된 메모리를 반환해야 하는 경우
객체(예: 참조에 의한 전달 데이터 유형의 값)
다음을 사용하여 반환 개체를 할당할 수 없습니다.팔록, 적어도 연결되어 있는 동안은 아닙니다.
SPI. 시도하면 개체 할당이 해제됩니다.SPI_finish, 귀하의 절차는
안정적으로 작동하지 않습니다!
이 문제를 해결하려면 다음을 사용하십시오.SPI_palloc귀하의 반환 개체를 할당합니다.SPI_palloc다음에서 공간을 할당합니다."상위 집행자"메모리 --- 즉,
현재 있었던 메모리 컨텍스트SPI_connect이 호출되었습니다. 이는 바로
프로시저의 반환 값에 대한 올바른 컨텍스트입니다.
SPI에 연결되지 않은 상태에서 호출되는 경우,SPI_palloc일반과 동일하게 작동합니다팔록.
프로시저가 SPI 관리자에 연결되기 전에 현재
메모리 컨텍스트는 상위 실행자 컨텍스트이므로 모든 할당은
다음을 통해 절차에 따라 생성됨팔록또는
SPI 유틸리티 함수는 이러한 맥락에서 만들어집니다.
이후SPI_connect이라고 하며,
현재 컨텍스트는 다음에 의해 만들어진 프로시저의 비공개 컨텍스트입니다.SPI_connect. 모든 할당 완료
를 통해팔록/repalloc또는 SPI 유틸리티 기능으로(예외
에 대한SPI_copytuple, SPI_copytupledesc, SPI_copytupleintoslot, SPI_modifytuple및SPI_palloc)은 이러한 맥락에서 만들어졌습니다.
프로시저가 SPI 관리자로부터 연결이 끊어질 때(를 통해)SPI_finish) 현재 컨텍스트는 다음과 같습니다.
상위 Executor 컨텍스트로 복원되고 모든 할당이 이루어졌습니다.
프로시저 메모리 컨텍스트에서는 해제되어 사용할 수 없습니다.
더!
이 섹션에 설명된 모든 기능은 두 가지 모두에서 사용할 수 있습니다.
연결된 프로시저와 연결되지 않은 프로시저. 연결되지 않은 상태에서
절차에 따라 기본 일반 백엔드와 동일하게 작동합니다.
함수(팔록등).