Ðлава 57. ÐапиÑание меÑода извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки ÑаблиÑÑ
СодеÑжание
РеализаÑÐ¸Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ TABLESAMPLE в Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение ÑобÑÑвеннÑÑ
меÑодов извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки ÑаблиÑÑ Ð² дополнение к меÑодам BERNOULLI и SYSTEM, коÑоÑÑе ÑÑебÑÑÑÑÑ ÑÑандаÑÑом SQL. ÐеÑод вÑбоÑки опÑеделÑеÑ, какие ÑÑÑоки ÑаблиÑÑ Ð±ÑдÑÑ Ð²ÑбиÑаÑÑÑÑ, когда иÑполÑзÑеÑÑÑ Ð¿Ñедложение TABLESAMPLE.
Ðа ÑÑовне SQL меÑод извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки ÑаблиÑÑ Ð¿ÑедÑÑавлÑеÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑнкÑией SQL, обÑÑно ÑеализÑемой на C, имеÑÑей ÑигнаÑÑÑÑ
method_name(internal) RETURNS tsm_handler
ÐÐ¼Ñ ÑÑнкÑии бÑÐ´ÐµÑ ÑовпадаÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ меÑода, ÑказÑваемÑм в пÑедложении TABLESAMPLE. ÐÑгÑÐ¼ÐµÐ½Ñ internal ÑвлÑеÑÑÑ ÑикÑивнÑм (в нÑм вÑегда пеÑедаÑÑÑÑ Ð½Ð¾Ð»Ñ) и введÑн ÑолÑко Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð½ÐµÐ»ÑÐ·Ñ Ð±Ñло вÑзÑваÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· команд SQL. ÐозвÑаÑаÑÑ ÑÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑÑÑÑкÑÑÑÑ Ñипа TsmRoutine (вÑделеннÑÑ Ð²Ñзовом palloc), ÑодеÑжаÑÑÑ ÑказаÑели на опоÑнÑе ÑÑнкÑии Ð´Ð»Ñ Ð¼ÐµÑода извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки. ÐÑи опоÑнÑе ÑÑнкÑии пÑедÑÑавлÑÑÑ Ñобой пÑоÑÑÑе ÑÑнкÑии на C, коÑоÑÑе не Ð²Ð¸Ð´Ð½Ñ Ð¸ не могÑÑ Ð²ÑзÑваÑÑÑÑ Ð½Ð° ÑÑовне SQL. ÐÑи опоÑнÑе ÑÑнкÑии опиÑÐ°Ð½Ñ Ð² Разделе 57.1.
Рдополнение к ÑказаÑелÑм на ÑÑнкÑии в ÑÑÑÑкÑÑÑе TsmRoutine Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ ÑледÑÑÑие дополниÑелÑнÑе полÑ:
List *parameterTypesÐÑо ÑпиÑок OID, ÑодеÑжаÑий OID Ñипов даннÑÑ Ð¿Ð°ÑамеÑÑов, коÑоÑÑе бÑдÑÑ Ð¿ÑинимаÑÑÑÑ Ð¿Ñедложением
TABLESAMPLEпÑи иÑполÑзовании ÑÑого меÑода извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки. ÐапÑимеÑ, Ð´Ð»Ñ Ð²ÑÑÑоеннÑÑ Ð¼ÐµÑодов ÑÑÐ¾Ñ ÑпиÑок ÑодеÑÐ¶Ð¸Ñ Ð¾Ð´Ð¸Ð½ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñо знаÑениемFLOAT4OID, пÑедÑÑавлÑÑÑий пÑоÑÐµÐ½Ñ Ð²ÑбоÑки. ÐÑÑгие меÑÐ¾Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе или инÑе паÑамеÑÑÑ.bool repeatable_across_queriesÐÑли ÑÑо поле Ñавно
true, даннÑй меÑод извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаваÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе вÑбоÑки пÑи поÑледоваÑелÑнÑÑ Ð·Ð°Ð¿ÑоÑÐ°Ñ Ñ Ð¾Ð´Ð½Ð¸Ð¼Ð¸ и Ñеми же паÑамеÑÑами и знаÑением заÑÑавкиREPEATABLEпÑи ÑÑловии неизменноÑÑи ÑодеÑжимого ÑаблиÑÑ. ÐÑли Ñавноfalse, пÑедложениеREPEATABLEне бÑÐ´ÐµÑ Ð¿ÑинимаÑÑÑÑ Ñ ÑÑим меÑодом извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки.bool repeatable_across_scansÐÑли ÑÑо поле Ñавно
true, меÑод извлеÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаваÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе вÑбоÑки пÑи поÑледоваÑелÑном ÑканиÑовании в ÑÐ°Ð¼ÐºÐ°Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ запÑоÑа (пÑедполагаеÑÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑов, знаÑÐµÐ½Ð¸Ñ Ð·Ð°ÑÑавки и Ñнимка даннÑÑ ). ÐÑли Ñавноfalse, планиÑовÑик не бÑÐ´ÐµÑ Ð²ÑбиÑаÑÑ Ð¿Ð»Ð°Ð½Ñ, ÑÑебÑÑÑие неоднокÑаÑного ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑбоÑки, Ñак как ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к неÑоглаÑÐ¾Ð²Ð°Ð½Ð½Ð¾Ð¼Ñ ÑезÑлÑÑаÑÑ Ð·Ð°Ð¿ÑоÑа.
ÐеÑÐ¾Ð´Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð²ÑбоÑки, вклÑÑÑннÑе в ÑÑандаÑÑнÑй диÑÑÑибÑÑив, могÑÑ Ð¿Ð¾ÑлÑжиÑÑ Ñ
оÑоÑим пÑимеÑом, еÑли Ð²Ñ Ñ
оÑиÑе напиÑаÑÑ Ñвой меÑод. ÐополниÑелÑнÑе меÑÐ¾Ð´Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе найÑи в подкаÑалоге contrib.