67.3. СÑаÑиÑÑика планиÑовÑика и безопаÑноÑÑÑ
ÐоÑÑÑп к ÑаблиÑе pg_statistic ÑазÑеÑÑн ÑолÑко ÑÑпеÑполÑзоваÑелÑм, Ñак ÑÑо обÑÑнÑе полÑзоваÑели не могÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð· Ð½ÐµÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ ÑодеÑжимом ÑÐ°Ð±Ð»Ð¸Ñ Ð´ÑÑгиÑ
полÑзоваÑелей. Ðо некоÑоÑÑе ÑÑнкÑии оÑенки избиÑаÑелÑноÑÑи бÑдÑÑ Ð¸ÑполÑзоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий опеÑаÑÐ¾Ñ (опеÑаÑоÑ, ÑигÑÑиÑÑÑÑий в запÑоÑе, или ÑвÑзаннÑй) Ð´Ð»Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð° ÑоÑ
ÑанÑнной ÑÑаÑиÑÑики. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð¿ÑименимоÑÑÑ ÑоÑ
ÑанÑнного Ñамого ÑаÑÑого знаÑениÑ, ÑÑнкÑÐ¸Ñ Ð¾Ñенки избиÑаÑелÑноÑÑи должна задейÑÑвоваÑÑ ÑооÑвеÑÑÑвÑÑÑий опеÑаÑÐ¾Ñ = Ð´Ð»Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑанÑÑ Ð² запÑоÑе Ñ ÑÑим ÑоÑ
ÑанÑннÑм знаÑением. Таким обÑазом, даннÑе pg_statistic в пÑинÑипе могÑÑ Ð¿ÐµÑедаваÑÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑким опеÑаÑоÑам. РоÑобÑм обÑазом ÑконÑÑÑÑиÑованнÑй опеÑаÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑводиÑÑ Ð½Ð°ÑÑÐ¶Ñ Ð¿ÐµÑедаваемÑе ÐµÐ¼Ñ Ð¾Ð¿ÐµÑÐ°Ð½Ð´Ñ Ð¿ÑеднамеÑенно (напÑимеÑ, запиÑÑÐ²Ð°Ñ Ð¸Ñ
в жÑÑнал или помеÑÐ°Ñ Ð² дÑÑгÑÑ ÑаблиÑÑ) либо непÑеднамеÑенно (показÑÐ²Ð°Ñ Ð¸Ñ
знаÑÐµÐ½Ð¸Ñ Ð² ÑообÑениÑÑ
об оÑибкаÑ
). РлÑбом ÑлÑÑае ÑÑо даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ, не имеÑÑÐµÐ¼Ñ Ð´Ð¾ÑÑÑпа к ÑаблиÑе pg_statistic, ÑвидеÑÑ ÑодеÑжаÑиеÑÑ Ð² ней даннÑе.
ÐÐ»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ ÑÑого вÑе вÑÑÑоеннÑе ÑÑнкÑии оÑенки избиÑаÑелÑноÑÑи дейÑÑвÑÑÑ Ð¿Ð¾ ÑледÑÑÑим пÑавилам. ЧÑÐ¾Ð±Ñ ÑоÑ
ÑанÑÐ½Ð½Ð°Ñ ÑÑаÑиÑÑика могла иÑполÑзоваÑÑÑÑ Ð¿Ñи планиÑовании запÑоÑа, ÑекÑÑий полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ имеÑÑ Ð»Ð¸Ð±Ð¾ пÑаво SELECT Ð´Ð»Ñ ÑаблиÑÑ Ð¸Ð»Ð¸ задейÑÑвованнÑÑ
ÑÑолбÑов, либо Ñ Ð¾Ð¿ÐµÑаÑоÑа должна бÑÑÑ Ñ
аÑакÑеÑиÑÑика LEAKPROOF (ÑоÑнее, она должна бÑÑÑ Ñ ÑÑнкÑии, ÑеализÑÑÑей ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑоÑ). РпÑоÑивном ÑлÑÑае оÑенка избиÑаÑелÑноÑÑи бÑÐ´ÐµÑ Ð¾ÑÑÑеÑÑвлÑÑÑÑÑ Ñак, как еÑли Ð±Ñ ÑÑаÑиÑÑики не бÑло вовÑе, и планиÑовÑик пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ ÑабоÑÑ Ñ Ð¾Ð±Ñими или вÑоÑиÑнÑми пÑедположениÑми.
ÐÑли полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ ÑÑебÑемого пÑава доÑÑÑпа к ÑаблиÑе или ÑÑолбÑам, Ñо во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ Ð¿Ñи вÑполнении запÑоÑа в конÑе конÑов Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка Â«Ð½ÐµÑ Ð´Ð¾ÑÑÑпа», Ñак ÑÑо ÑÑÐ¾Ñ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ бÑÐ´ÐµÑ Ð½ÐµÐ·Ð°Ð¼ÐµÑен на пÑакÑике. Ðо еÑли полÑзоваÑÐµÐ»Ñ ÑиÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе из пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð±Ð°ÑÑеÑом безопаÑноÑÑи, планиÑовÑик Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ñ Ð¾ÑеÑÑ Ð¿ÑовеÑиÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñей ÑаблиÑÑ, коÑоÑÐ°Ñ Ð½ÐµÐ´Ð¾ÑÑÑпна полÑзоваÑÐµÐ»Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно. Ð ÑÑом ÑлÑÑае опеÑаÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð³ÐµÑмеÑиÑнÑм; инаÑе ÑÑаÑиÑÑика не бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ. ÐÑо не бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð²Ð½ÐµÑÐ½Ð¸Ñ Ð¿ÑоÑвлений кÑоме Ñого, ÑÑо план запÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ð¿ÑималÑнÑм. Ð ÑлÑÑае подозÑений, ÑÑо Ð²Ñ ÑÑолкнÑлиÑÑ Ñ ÑÑим, попÑобÑйÑе запÑÑÑиÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ полÑзоваÑÐµÐ»Ñ Ñ ÑаÑÑиÑеннÑми пÑавами и пÑовеÑÑÑе, не вÑбиÑаеÑÑÑ Ð»Ð¸ дÑÑгой план запÑоÑа.
ÐÑо огÑаниÑение пÑименÑеÑÑÑ ÑолÑко Ñогда, когда планиÑовÑÐ¸ÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð²ÑполниÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий опеÑаÑÐ¾Ñ Ñ Ð¾Ð´Ð½Ð¸Ð¼ или неÑколÑкими знаÑениÑми из pg_statistic. ÐÑи ÑÑом планиÑовÑÐ¸ÐºÑ ÑазÑеÑено иÑполÑзоваÑÑ Ð¾Ð±ÑÑÑ ÑÑаÑиÑÑиÑеÑкÑÑ Ð¸Ð½ÑоÑмаÑиÑ, напÑимеÑ, пÑоÑÐµÐ½Ñ Ð·Ð½Ð°Ñений NULL или колиÑеÑÑво ÑазлиÑнÑÑ
знаÑений в ÑÑолбÑе, вне завиÑимоÑÑи Ð¾Ñ Ð¿Ñав доÑÑÑпа.
РеализÑемÑе в дополниÑелÑнÑÑ ÑаÑÑиÑениÑÑ ÑÑнкÑии оÑенки избиÑаÑелÑноÑÑи, коÑоÑÑе могÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑÑаÑиÑÑике, вÑзÑÐ²Ð°Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие опеÑаÑоÑÑ, Ð´Ð¾Ð»Ð¶Ð½Ñ ÑледоваÑÑ Ñем же пÑавилам безопаÑноÑÑи.