21.6. ТаблиÑнÑе пÑоÑÑÑанÑÑва #
ТаблиÑнÑе пÑоÑÑÑанÑÑва в Postgres Pro позволÑÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑам оÑганизоваÑÑ Ð»Ð¾Ð³Ð¸ÐºÑ ÑазмеÑÐµÐ½Ð¸Ñ Ñайлов обÑекÑов Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² Ñайловой ÑиÑÑеме. Ð Ð¾Ð´Ð½Ð°Ð¶Ð´Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ ÑаблиÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑÑÑанÑÑÐ²Ñ Ð¼Ð¾Ð¶Ð½Ð¾ обÑаÑаÑÑÑÑ Ð¿Ð¾ имени на ÑÑапе ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑов.
ТаблиÑнÑе пÑоÑÑÑанÑÑва позволÑÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑÑ ÑпÑавлÑÑÑ Ð´Ð¸ÑковÑм пÑоÑÑÑанÑÑвом Ð´Ð»Ñ Ð¸Ð½ÑÑаллÑÑии Postgres Pro. ÐÑо полезно минимÑм по двÑм пÑиÑинам. Ðо-пеÑвÑÑ , ÑÑо Ð½ÐµÑ Ð²Ð°Ñка меÑÑа в Ñазделе, на коÑоÑом бÑл иниÑиализиÑован клаÑÑÐµÑ Ð¸ невозможноÑÑÑ ÐµÐ³Ð¾ ÑаÑÑиÑениÑ. ТаблиÑное пÑоÑÑÑанÑÑво можно ÑоздаÑÑ Ð² дÑÑгом Ñазделе и иÑполÑзоваÑÑ ÐµÐ³Ð¾ до ÑÐµÑ Ð¿Ð¾Ñ, пока не поÑвиÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÐµÑеконÑигÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиÑÑемÑ.
Ðо-вÑоÑÑÑ , ÑаблиÑнÑе пÑоÑÑÑанÑÑва позволÑÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑам опÑимизиÑоваÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ ÑоглаÑно бизнеÑ-пÑоÑеÑÑам, ÑвÑзаннÑм Ñ Ð¾Ð±ÑекÑами Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐапÑимеÑ, ÑаÑÑо иÑполÑзÑемÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑазмеÑÑиÑÑ Ð½Ð° оÑÐµÐ½Ñ Ð±ÑÑÑÑом и надÑжном, но доÑогом SSD-диÑке. Ð Ñо же вÑÐµÐ¼Ñ ÑаблиÑа Ñ Ð°ÑÑ Ð¸Ð²Ð½Ñми даннÑми, коÑоÑÑе Ñедко иÑполÑзÑÑÑÑÑ Ð¸ ÑкоÑоÑÑÑ Ðº доÑÑÑпа к ним не важна, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑазмеÑена в более деÑÑвом и медленном Ñ ÑанилиÑе.
ÐÑедÑпÑеждение
ÐеÑмоÑÑÑ Ð½Ð° внеÑнее ÑазмеÑение оÑноÑиÑелÑно оÑновного каÑалога Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Postgres Pro, ÑаблиÑнÑе пÑоÑÑÑанÑÑва ÑвлÑÑÑÑÑ Ð½ÐµÐ¾ÑÑемлемой ÑаÑÑÑÑ ÐºÐ»Ð°ÑÑеÑа и не могÑÑ ÑÑакÑоваÑÑÑÑ, как ÑамоÑÑоÑÑелÑÐ½Ð°Ñ ÐºÐ¾Ð»Ð»ÐµÐºÑÐ¸Ñ Ñайлов даннÑÑ . Ðни завиÑÑÑ Ð¾Ñ Ð¼ÐµÑаданнÑÑ , ÑаÑположеннÑÑ Ð² главном каÑалоге, и поÑÐ¾Ð¼Ñ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ñ Ðº дÑÑÐ³Ð¾Ð¼Ñ ÐºÐ»Ð°ÑÑеÑÑ, или копиÑоваÑÑÑÑ Ð¿Ð¾ оÑделÑноÑÑи. Также, в ÑлÑÑае поÑеÑи ÑаблиÑного пÑоÑÑÑанÑÑва (пÑи Ñдалении Ñайлов, Ñбое диÑка и Ñ. п.), клаÑÑÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпнÑм или не ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑÑÑ. Таким обÑазом, пÑи ÑазмеÑении ÑаблиÑного пÑоÑÑÑанÑÑва во вÑеменной Ñайловой ÑиÑÑеме, напÑимеÑ, в RAM-диÑке, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ ÑгÑоза надÑжноÑÑи вÑего клаÑÑеÑа.
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑаблиÑного пÑоÑÑÑанÑÑва иÑполÑзÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° CREATE TABLESPACE, напÑимеÑ::
CREATE TABLESPACE fastspace LOCATION '/ssd1/postgresql/data';
ÐаÑалог должен ÑÑÑеÑÑвоваÑÑ, бÑÑÑ Ð¿ÑÑÑÑм и пÑинадлежаÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÐС, под коÑоÑÑм запÑÑен Postgres Pro. ÐÑе ÑозданнÑе впоÑледÑÑвии обÑекÑÑ, пÑинадлежаÑие ÑÐµÐ»ÐµÐ²Ð¾Ð¼Ñ ÑаблиÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑÑÑанÑÑвÑ, бÑдÑÑ Ñ ÑаниÑÑÑÑ Ð² ÑÐ°Ð¹Ð»Ð°Ñ ÑаÑположеннÑÑ Ð² ÑÑом каÑалоге. ÐаÑалог не должен ÑазмеÑаÑÑÑÑ Ð½Ð° ÑÑÑмнÑÑ Ð¸Ð»Ð¸ ÑÑÑÑойÑÑÐ²Ð°Ñ Ð²Ñеменного Ñ ÑанениÑ, Ñак как клаÑÑÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеÑÑаÑÑ ÑÑнкÑиониÑоваÑÑ Ð¸Ð·-за поÑеÑи ÑÑого пÑоÑÑÑанÑÑва.
ÐÑимеÑание
ÐбÑÑно Ð½ÐµÑ ÑмÑÑла ÑоздаваÑÑ Ð±Ð¾Ð»ÐµÐµ одного пÑоÑÑÑанÑÑва на Ð¾Ð´Ð½Ñ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑайловÑÑ ÑиÑÑемÑ, Ñак как Ð½ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи конÑÑолиÑоваÑÑ ÑаÑположение оÑделÑнÑÑ Ñайлов в Ñайловой ÑиÑÑеме. Ðднако Postgres Pro не накладÑÐ²Ð°ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¾Ð³ÑаниÑений в ÑÑом оÑноÑении, и более Ñого, напÑÑмÑÑ Ð½Ðµ забоÑиÑÑÑ Ð¾ ÑоÑÐºÐ°Ñ Ð¼Ð¾Ð½ÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайловой ÑиÑÑемÑ. ÐÑоÑÑо оÑÑÑеÑÑвлÑеÑÑÑ Ñ Ñанение Ñайлов в ÑказаннÑÑ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ð°Ñ .
СоздаваÑÑ ÑаблиÑное пÑоÑÑÑанÑÑво должен ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
или полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавами Ñоли pg_create_tablespace, но поÑле ÑÑого можно ÑазÑеÑиÑÑ Ð¾Ð±ÑÑнÑм полÑзоваÑелÑм ÑабоÑаÑÑ Ñ Ð½Ð¸Ð¼. ÐÐ»Ñ ÑÑого необÑ
одимо пÑедоÑÑавиÑÑ Ð¸Ð¼ пÑаво CREATE.
ТаблиÑÑ, индекÑÑ Ð¸ ÑелÑе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
могÑÑ Ñ
ÑаниÑÑÑÑ Ð² оÑделÑнÑÑ
ÑаблиÑнÑÑ
пÑоÑÑÑанÑÑваÑ
. ÐÐ»Ñ ÑÑого полÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавом CREATE на ÑаблиÑное пÑоÑÑÑанÑÑво должен ÑказаÑÑ ÐµÐ³Ð¾ Ð¸Ð¼Ñ Ð² каÑеÑÑве паÑамеÑÑа ÑооÑвеÑÑÑвÑÑÑей командÑ. ÐапÑимеÑ, далее ÑоздаÑÑÑÑ ÑаблиÑа в ÑаблиÑном пÑоÑÑÑанÑÑве space1:
CREATE TABLE foo(i int) TABLESPACE space1;
Ðак ваÑианÑ, иÑполÑзÑйÑе паÑамеÑÑ default_tablespace:
SET default_tablespace = space1; CREATE TABLE foo(i int);
Ðогда default_tablespace Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение оÑлиÑное Ð¾Ñ Ð¿ÑÑÑой ÑÑÑоки, он бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÑвно в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа TABLESPACE в командаÑ
CREATE TABLE и CREATE INDEX, еÑли в Ñамой команде не задано иное.
СÑÑеÑÑвÑÐµÑ Ð¿Ð°ÑамеÑÑ temp_tablespaces, коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÑазмеÑение вÑеменнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ индекÑов, а Ñакже Ñайлов, ÑоздаваемÑÑ , напÑимеÑ, пÑи опеÑаÑиÑÑ ÑоÑÑиÑовки болÑÑÐ¸Ñ Ð½Ð°Ð±Ð¾Ñов даннÑÑ . ÐÑедпоÑÑиÑелÑнее, в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа, ÑказÑваÑÑ Ð½Ðµ одно имÑ, а ÑпиÑок из неÑколÑÐºÐ¸Ñ ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв. ÐÑо Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ ÑаÑпÑеделиÑÑ Ð½Ð°Ð³ÑÑзкÑ, ÑвÑзаннÑÑ Ñ Ð²ÑеменнÑми обÑекÑами, по ÑазлиÑнÑм ÑаблиÑнÑм пÑоÑÑÑанÑÑвам. ÐÑи каждом Ñоздании вÑеменного обÑекÑа бÑÐ´ÐµÑ ÑлÑÑайнÑм обÑазом вÑбиÑаÑÑÑÑ Ð¸Ð¼Ñ Ð¸Ð· Ñказанного ÑпиÑка ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв.
ТаблиÑное пÑоÑÑÑанÑÑво, ÑвÑзанное Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ
, Ñакже иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐµÑ ÑиÑÑемнÑÑ
каÑалогов. Ðолее Ñого, ÑÑо ÑаблиÑное пÑоÑÑÑанÑÑво иÑполÑзÑеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÑаблиÑ, индекÑов и вÑеменнÑÑ
Ñайлов, ÑоздаваемÑÑ
в базе даннÑÑ
, еÑли не Ñказано иное в вÑÑажении TABLESPACE, или пеÑеменной default_tablespace, или temp_tablespaces (ÑооÑвеÑÑÑвенно). ÐÑли база даннÑÑ
Ñоздана без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½ÐºÑеÑного ÑаблиÑного пÑоÑÑÑанÑÑва, Ñо иÑполÑзÑеÑÑÑ Ð¿ÑоÑÑÑанÑÑво, к коÑоÑÐ¾Ð¼Ñ Ð¿ÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ ÐºÐ¾Ð¿Ð¸ÑÑемÑй Ñаблон.
ÐÑи иниÑиализаÑии клаÑÑеÑа авÑомаÑиÑеÑки ÑоздаÑÑÑÑ Ð´Ð²Ð° ÑаблиÑнÑÑ
пÑоÑÑÑанÑÑва. ТаблиÑное пÑоÑÑÑанÑÑво pg_global иÑполÑзÑеÑÑÑ ÑолÑко Ð´Ð»Ñ Ð¾Ð±ÑиÑ
ÑиÑÑемнÑÑ
каÑалогов. ТаблиÑное пÑоÑÑÑанÑÑво pg_default иÑполÑзÑеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ
template1 и template0 (в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, Ñакже ÑвлÑеÑÑÑ Ð¿ÑоÑÑÑанÑÑвом по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð´ÑÑгиÑ
баз даннÑÑ
, пока не бÑÐ´ÐµÑ Ñвно Ñказано иное в вÑÑажении TABLESPACE ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE DATABASE).
ÐоÑле ÑозданиÑ, ÑаблиÑное пÑоÑÑÑанÑÑво можно иÑполÑзоваÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð»Ñбой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , пÑи ÑÑловии, ÑÑо Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸Ð¼ÐµÑÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñе пÑава. ÐÑо ознаÑаеÑ, ÑÑо ÑаблиÑное пÑоÑÑÑанÑÑво невозможно ÑдалиÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока не бÑдÑÑ ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð²Ñе обÑекÑÑ Ð±Ð°Ð· даннÑÑ , иÑполÑзÑÑÑÐ¸Ñ ÑÑо пÑоÑÑÑанÑÑво.
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑÑÑого ÑаблиÑного пÑоÑÑÑанÑÑва иÑполÑзÑйÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ DROP TABLESPACE.
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑпиÑок ÑаблиÑнÑÑ
пÑоÑÑÑанÑÑв можно ÑделаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ðº ÑиÑÑÐµÐ¼Ð½Ð¾Ð¼Ñ ÐºÐ°ÑÐ°Ð»Ð¾Ð³Ñ pg_tablespace, напÑимеÑ,
SELECT spcname, spcowner::regrole, pg_tablespace_location(oid) FROM pg_tablespace;
Также можно найÑи, какие ÑаблиÑнÑе пÑоÑÑÑанÑÑва иÑполÑзÑÑÑÑÑ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
. Ðа подÑобной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº ТаблиÑа 9.76. ÐеÑакоманда \db ÑÑилиÑÑ psql Ñакже позволÑÐµÑ Ð¾ÑобÑазиÑÑ ÑпиÑок ÑÑÑеÑÑвÑÑÑиÑ
ÑаблиÑнÑÑ
пÑоÑÑÑанÑÑв.
ÐаÑалог $PGDATA/pg_tblspc ÑодеÑÐ¶Ð¸Ñ ÑимволиÑеÑкие ÑÑÑлки, коÑоÑÑе ÑказÑваÑÑ Ð½Ð° внеÑние ÑаблиÑнÑе пÑоÑÑÑанÑÑва клаÑÑеÑа. ХоÑÑ Ð¸ не ÑекомендÑеÑÑÑ, но возможно ÑегÑлиÑоваÑÑ ÑаблиÑнÑе пÑоÑÑÑанÑÑва вÑÑÑнÑÑ, пеÑеопÑеделÑÑ ÑÑи ÑÑÑлки. Ðи пÑи какиÑ
обÑÑоÑÑелÑÑÑваÑ
ÑÑи опеÑаÑии нелÑÐ·Ñ Ð¿ÑоводиÑÑ, пока запÑÑен ÑеÑÐ²ÐµÑ Ð±Ð°Ð· даннÑÑ
.