Table des matières
  L'implémentation de la clause TABLESAMPLE de
  PostgreSQL supporte l'utilisation de
  méthodes personnalisées d'échantillonnage de table, en plus des
  méthodes BERNOULLI et SYSTEM
  qui sont requises par le standard SQL. La méthode d'échantillonnage
  détermine les lignes de la table sélectionnées lorsque
  la clause TABLESAMPLE est utilisée.
 
Au niveau SQL, une méthode d'échantillonnage de table est représentée par une simple fonction, classiquement implémentée en C, et qui a la signature suivante :
method_name(internal) RETURNS tsm_handler
  Le nom de la fonction est le même que le nom de la méthode
  apparaissant dans la clause TABLESAMPLE. L'argument
  internal est factice (il a toujours une valeur de
  zéro) qui sert uniquement à interdire que cette fonction soit
  appelée directement à partir d'une commande SQL. Le résultat
  de cette fonction doit être une structure allouée avec palloc
  de type TsmRoutine, qui contient des pointeurs de
  fonction supportant la méthode d'échantillonnage. Ces fonctions
  sont des fonctions C pleines et entières qui ne sont ni visibles ni
  appellables au niveau SQL. Les fonctions de support sont décrites
  dans le Section 60.1.
 
  En plus des pointeurs de fonction, la structure TsmRoutine
  doit fournir ces champs additionnels :
 
List *parameterTypes
     Il s'agit d'une liste d'OID contenant les OID des types de
     données du ou des paramètre(s) qui seront acceptés par la
     clause TABLESAMPLE lorsque cette méthode
     d'échantillonnage sera utilisée. Par exemple, pour les méthodes
     incluses, cette liste contient un simple élément avec la valeur
     FLOAT4OID, qui représente le pourcentage
     d'échantillonnage. Les méthodes d'échantillonnage personnalisées
     peuvent avoir des paramètres en plus ou différents.
    
bool repeatable_across_queries
     Si true, la méthode d'échantillonnage
     peut renvoyer des échantillons identiques pour des requêtes
     successives, si les mêmes paramètres et la valeur de graine de la
     clause REPEATABLE sont fournis à chaque fois et
     que le contenu de la table n'a pas changé. Lorsque positionné à
     false, la clause REPEATABLE
     n'est pas acceptée comme valable pour la méthode
     d'échantillonnage.
    
bool repeatable_across_scans
     Si true, la méthode d'échantillonnage peut
     renvoyer des échantillons identiques pour des parcours successifs
     dans la même requête (en supposant des paramètres, une graine
     et une image de la base inchangés). Lorsque positionné à
     false, le planificateur ne sélectionnera pas
     des plans qui requièrent de parcourir la table échantillonnée
     plus d'une fois, dans la mesure où ceci pourrait entraîner des
     résultats de sortie incohérents.
    
  La structure TsmRoutine est déclarée dans le
  fichier src/include/access/tsmapi.h, auquel il
  convient de se référer pour des détails supplémentaires.
 
  Les méthodes d'échantillonnage de table incluses dans
  la distribution standard sont de bonnes références
  pour écrire la vôtre. Jeter un œil dans le répertoire
  src/backend/access/tablesample de l'arbre
  des sources pour les méthodes incluses, et dans le répertoire
  contrib pour des méthodes additionnelles.