포스트그레SQL의 구현테이블 샘플절은 외에도 사용자 정의 테이블 샘플링 방법을 지원합니다.BERNOULLI그리고시스템SQL 표준에서 요구하는 메소드입니다. 젠 토토 방법에 따라 테이블의 어떤 행이 선택될지 결정됩니다.테이블 샘플절이 사용되었습니다.
SQL 레벨에서 테이블 샘플링 방법은 일반적으로 C로 구현되며 서명이 있는 단일 SQL 함수로 표시됩니다.
method_name(내부) 반환 tsm_handler
함수 이름은 다음에 나타나는 메소드 이름과 동일합니다.테이블 샘플절.내부인수는 단순히 이 함수가 SQL 명령에서 직접 호출되는 것을 방지하는 역할을 하는 더미(항상 0 값을 가짐)입니다. 함수의 결과는 유형의 palloc'd 구조체여야 합니다.TsmRoutine10127_10336PostgreSQL : 문서 : 10 : 57.1. 젠 토토 방법 지원 기능.
함수 포인터 외에도TsmRoutine구조체는 다음 추가 필드를 제공해야 합니다.
목록 *parameterTypes이것은 다음에서 허용할 매개변수의 데이터 유형 OID를 포함하는 OID 목록입니다.테이블 샘플이 젠 토토 방법을 사용할 때의 절입니다. 예를 들어 내장 메소드의 경우 이 목록에는 값이 있는 단일 항목이 포함됩니다.FLOAT4OID, 젠 토토 비율을 나타냅니다. 맞춤 젠 토토 방법에는 더 많거나 다른 매개변수가 있을 수 있습니다.
bool Repeatable_across_queries만약참, 젠 토토 방법은 동일한 매개변수와반복 가능시드 값은 매번 제공되며 테이블 내용은 변경되지 않았습니다. 이럴 때거짓, 그반복 가능절은 젠 토토 방법과 함께 사용할 수 없습니다.
boolpeatable_across_scans만약참, 젠 토토 방법은 동일한 쿼리의 연속 스캔에서 동일한 샘플을 전달할 수 있습니다(변하지 않는 매개변수, 시드 값 및 스냅샷 가정). 이럴 때거짓, 플래너는 젠 토토된 테이블을 두 번 이상 스캔해야 하는 계획을 선택하지 않습니다. 그렇게 하면 일관되지 않은 쿼리 출력이 발생할 수 있기 때문입니다.
그TsmRoutine구조체 유형이 다음에서 선언되었습니다.src/include/access/tsmapi.h, 자세한 내용은 참조하세요.
표준 분포에 포함된 테이블 샘플링 방법은 직접 작성하려고 할 때 좋은 참고 자료가 됩니다. 다음을 살펴보세요.src/백엔드/액세스/테이블샘플내장 젠 토토 방법을 위한 소스 트리의 하위 디렉토리 및기여애드온 메소드의 하위 디렉토리.