17.2. Создание клаÑÑеÑа баз даннÑÑ #
ÐÑежде Ñем Ð²Ñ ÑможеÑе ÑабоÑаÑÑ Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑоиниÑиализиÑоваÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð±Ð°Ð· даннÑÑ
на диÑке. ÐÑ Ð½Ð°Ð·Ñваем ÑÑо Ñ
ÑанилиÑе клаÑÑеÑом баз даннÑÑ
. (Ð SQL пÑименÑеÑÑÑ ÑеÑмин «клаÑÑÐµÑ ÐºÐ°Ñалога».) ÐлаÑÑÐµÑ Ð±Ð°Ð· даннÑÑ
пÑедÑÑавлÑÐµÑ Ñобой Ð½Ð°Ð±Ð¾Ñ Ð±Ð°Ð·, ÑпÑавлÑемÑÑ
одним ÑкземплÑÑом ÑабоÑаÑÑего ÑеÑвеÑа. ÐоÑле иниÑиализаÑии клаÑÑÐµÑ Ð±ÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ postgres, пÑедназнаÑеннÑÑ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ ÑÑилиÑами, полÑзоваÑелÑми и ÑÑоÑонними пÑиложениÑми. Сам ÑеÑÐ²ÐµÑ Ð±Ð°Ð· даннÑÑ
не ÑÑебÑÐµÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð±Ð°Ð·Ñ postgres, но многие внеÑние вÑпомогаÑелÑнÑе пÑогÑÐ°Ð¼Ð¼Ñ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° ÐµÑ ÑÑÑеÑÑвование. ÐÑи иниÑиализаÑии в каждом клаÑÑеÑе ÑоздаÑÑÑÑ ÐµÑÑ Ð´Ð²Ðµ базÑ: template1 и template0. Ðак можно понÑÑÑ Ð¸Ð· иÑ
имÑн, они пÑименÑÑÑÑÑ Ð²Ð¿Ð¾ÑледÑÑвии в каÑеÑÑве Ñаблонов ÑоздаваемÑÑ
баз даннÑÑ
; иÑполÑзоваÑÑ Ð¸Ñ
в каÑеÑÑве ÑабоÑиÑ
не ÑледÑеÑ. (Ðа инÑоÑмаÑией о Ñоздании новÑÑ
баз даннÑÑ
в клаÑÑеÑе обÑаÑиÑеÑÑ Ðº Ðлаве 21.)
С ÑоÑки зÑÐµÐ½Ð¸Ñ Ñайловой ÑиÑÑÐµÐ¼Ñ ÐºÐ»Ð°ÑÑÐµÑ Ð±Ð°Ð· даннÑÑ
пÑедÑÑавлÑÐµÑ Ñобой один каÑалог, в коÑоÑом бÑдÑÑ Ñ
ÑаниÑÑÑÑ Ð²Ñе даннÑе. ÐÑ Ð½Ð°Ð·Ñваем его каÑалогом даннÑÑ
или облаÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
. Ðде именно Ñ
ÑаниÑÑ Ð´Ð°Ð½Ð½Ñе, Ð²Ñ Ð°Ð±ÑолÑÑно Ñвободно можеÑе вÑбиÑаÑÑ Ñами. Ðакого-либо ÑÑандаÑÑного пÑÑи не ÑÑÑеÑÑвÑеÑ, но ÑаÑÑо даннÑе ÑазмеÑаÑÑÑÑ Ð² /usr/local/pgsql/data или в /var/lib/pgsql/data. ÐÑежде Ñем Ñ ÐºÐ°Ñалогом даннÑÑ
можно бÑÐ´ÐµÑ ÑабоÑаÑÑ, его нÑжно иниÑиализиÑоваÑÑ, иÑполÑзÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ initdb, коÑоÑÐ°Ñ ÑÑÑанавливаеÑÑÑ Ð² ÑоÑÑаве Postgres Pro.
ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе PostgreSQL в виде гоÑового пÑодÑкÑа, в нÑм могÑÑ Ð±ÑÑÑ Ð¿ÑинÑÑÑ Ð¾Ð¿ÑеделÑннÑе ÑоглаÑÐµÐ½Ð¸Ñ Ð¾ ÑаÑположении каÑалога даннÑÑ
, и Ð¼Ð¾Ð¶ÐµÑ Ñакже пÑедоÑÑавлÑÑÑÑÑ ÑкÑÐ¸Ð¿Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑого каÑалога даннÑÑ
. Ð ÑÑом ÑлÑÑае ÑледÑÐµÑ Ð²Ð¾ÑполÑзоваÑÑÑÑ ÑÑим ÑкÑипÑом, а не запÑÑкаÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно initdb. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº докÑменÑаÑии иÑполÑзÑемого вами пÑодÑкÑа.
ЧÑÐ¾Ð±Ñ Ð¸Ð½Ð¸ÑиализиÑоваÑÑ ÐºÐ»Ð°ÑÑÐµÑ Ð±Ð°Ð· даннÑÑ
вÑÑÑнÑÑ, запÑÑÑиÑе initdb, пеÑедав в паÑамеÑÑе -D пÑÑÑ Ðº Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ð¼Ñ ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
клаÑÑеÑа в Ñайловой ÑиÑÑеме, напÑимеÑ:
$initdb -D /usr/local/pgsql/data
ÐамеÑÑÑе, ÑÑо ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ñжно вÑполнÑÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ полÑзоваÑÐµÐ»Ñ Postgres Pro, о коÑоÑом говоÑиÑÑÑ Ð² пÑедÑдÑÑем Ñазделе.
ÐодÑказка
РкаÑеÑÑве алÑÑеÑнаÑÐ¸Ð²Ñ Ð¿Ð°ÑамеÑÑа -D можно ÑÑÑановиÑÑ Ð¿ÐµÑеменнÑÑ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ PGDATA.
Также можно запÑÑÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ initdb, воÑполÑзовавÑиÑÑ Ð¿ÑогÑаммой pg_ctl , пÑимеÑно Ñак:
$pg_ctl -D /usr/local/pgsql/data initdb
ÐÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñдобнее, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе pg_ctl Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка и оÑÑановки ÑеÑвеÑа (Ñм. Раздел 17.3), Ñак как pg_ctl бÑÐ´ÐµÑ ÐµÐ´Ð¸Ð½ÑÑвенной командой, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑой Ð²Ñ Ð±ÑдеÑе ÑпÑавлÑÑÑ ÑкземплÑÑом ÑеÑвеÑа баз даннÑÑ
.
Ðоманда initdb попÑÑаеÑÑÑ ÑоздаÑÑ ÑказаннÑй вами каÑалог, еÑли он не ÑÑÑеÑÑвÑеÑ. ÐонеÑно, она не ÑÐ¼Ð¾Ð¶ÐµÑ ÑÑо ÑделаÑÑ, еÑли initdb не бÑÐ´ÐµÑ ÑазÑеÑено запиÑÑваÑÑ Ð² ÑодиÑелÑÑкий каÑалог. ÐообÑе ÑекомендÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Postgres Pro бÑл владелÑÑем не ÑолÑко каÑалога даннÑÑ
, но и ÑодиÑелÑÑкого каÑалога, Ñак ÑÑо Ñакой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð±ÑÑÑ Ð½Ðµ должно. ÐÑли же и нÑжнÑй ÑодиÑелÑÑкий каÑалог не ÑÑÑеÑÑвÑеÑ, вам нÑжно бÑÐ´ÐµÑ ÑнаÑала ÑоздаÑÑ ÐµÐ³Ð¾, иÑполÑзÑÑ Ð¿Ñава root, еÑли вÑÑеÑÑоÑÑий каÑалог заÑиÑÑн Ð¾Ñ Ð·Ð°Ð¿Ð¸Ñи. Таким обÑазом, пÑоÑедÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñакой:
root#mkdir /usr/local/pgsqlroot#chown postgres /usr/local/pgsqlroot#su postgrespostgres$initdb -D /usr/local/pgsql/data
Ðоманда initdb не бÑÐ´ÐµÑ ÑабоÑаÑÑ, еÑли ÑказаннÑй каÑалог даннÑÑ
Ñже ÑÑÑеÑÑвÑÐµÑ Ð¸ ÑодеÑÐ¶Ð¸Ñ ÑайлÑ; ÑÑо меÑа пÑедоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ ÑлÑÑайной пеÑезапиÑи ÑÑÑеÑÑвÑÑÑей инÑÑаллÑÑии.
Так как каÑалог даннÑÑ
ÑодеÑÐ¶Ð¸Ñ Ð²Ñе даннÑе базÑ, оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ заÑиÑиÑÑ ÐµÐ³Ð¾ Ð¾Ñ Ð½ÐµÐ°Ð²ÑоÑизованного доÑÑÑпа. ÐÐ»Ñ ÑÑого initdb лиÑÐ°ÐµÑ Ð¿Ñав доÑÑÑпа к Ð½ÐµÐ¼Ñ Ð²ÑеÑ
полÑзоваÑелей, кÑоме полÑзоваÑÐµÐ»Ñ Postgres Pro и, возможно, его гÑÑппÑ. ÐÑли гÑÑппе ÑазÑеÑаеÑÑÑ Ð´Ð¾ÑÑÑп, Ñо ÑолÑко Ð´Ð»Ñ ÑÑениÑ. ÐÑо позволÑÐµÑ Ð½ÐµÐ¿ÑивилегиÑÐ¾Ð²Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, вÑ
одÑÑÐµÐ¼Ñ Ð² Ð¾Ð´Ð½Ñ Ð³ÑÑÐ¿Ð¿Ñ Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем клаÑÑеÑа, делаÑÑ ÑезеÑвнÑе копии даннÑÑ
клаÑÑеÑа или вÑполнÑÑÑ Ð´ÑÑгие опеÑаÑии, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
доÑÑаÑоÑно доÑÑÑпа ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
ÐамеÑÑÑе, ÑÑÐ¾Ð±Ñ ÐºÐ¾ÑÑекÑно ÑазÑеÑиÑÑ Ð¸Ð»Ð¸ запÑеÑиÑÑ Ð´Ð¾ÑÑÑп гÑÑÐ¿Ð¿Ñ Ðº даннÑм ÑÑÑеÑÑвÑÑÑего клаÑÑеÑа, необÑ
одимо вÑклÑÑиÑÑ ÐºÐ»Ð°ÑÑÐµÑ Ð¸ ÑÑÑановиÑÑ ÑооÑвеÑÑÑвÑÑÑий Ñежим Ð´Ð»Ñ Ð²ÑеÑ
каÑалогов и Ñайлов до запÑÑка Postgres Pro. РпÑоÑивном ÑлÑÑае в каÑалоге даннÑÑ
возможно ÑмеÑение Ñежимов. ÐÐ»Ñ ÐºÐ»Ð°ÑÑеÑов, к коÑоÑÑм Ð¸Ð¼ÐµÐµÑ Ð´Ð¾ÑÑÑп ÑолÑко владелеÑ, ÑÑебÑеÑÑÑ ÑÑÑановиÑÑ Ñежим 0700 Ð´Ð»Ñ ÐºÐ°Ñалогов и 0600 Ð´Ð»Ñ Ñайлов, а Ð´Ð»Ñ ÐºÐ»Ð°ÑÑеÑов, в коÑоÑÑÑ
Ñакже ÑазÑеÑаеÑÑÑ ÑÑение гÑÑппой, Ñежим 0750 Ð´Ð»Ñ ÐºÐ°Ñалогов и 0640 Ð´Ð»Ñ Ñайлов.
Ðднако даже когда ÑодеÑжимое каÑалога заÑиÑено, еÑли пÑовеÑка подлинноÑÑи клиенÑов наÑÑÑоена по ÑмолÑаниÑ, лÑбой локалÑнÑй полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº базе даннÑÑ
и даже ÑÑаÑÑ ÑÑпеÑполÑзоваÑелем. ÐÑли Ð²Ñ Ð½Ðµ довеÑÑеÑе дÑÑгим локалÑнÑм полÑзоваÑелÑм, Ð¼Ñ ÑекомендÑем иÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ из паÑамеÑÑов ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ initdb: -W, --pwprompt или --pwfile, â и назнаÑиÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð±Ð°Ð· даннÑÑ
. ÐÑоме Ñого, воÑполÑзÑйÑеÑÑ Ð¿Ð°ÑамеÑÑом -A scram-sha-256, ÑÑÐ¾Ð±Ñ Ð¾ÑклÑÑиÑÑ ÑазÑеÑÑннÑй по ÑмолÑÐ°Ð½Ð¸Ñ Ñежим аÑÑенÑиÑикаÑии trust; либо измениÑе ÑгенеÑиÑованнÑй Ñайл pg_hba.conf поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ initdb, но пеÑед Ñем, как запÑÑÑиÑÑ ÑеÑÐ²ÐµÑ Ð² пеÑвÑй Ñаз. (ÐÐ¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð¸ дÑÑгие ÑазÑмнÑе подÑ
Ð¾Ð´Ñ â пÑимениÑÑ Ñежим пÑовеÑки подлинноÑÑи peer или огÑаниÑиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð½Ð° ÑÑовне Ñайловой ÑиÑÑемÑ. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 19.)
Ðоманда initdb Ñакже ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑеÑа баз даннÑÑ
Ð»Ð¾ÐºÐ°Ð»Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐбÑÑно она пÑоÑÑо беÑÑÑ Ð¿Ð°ÑамеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸ из ÑекÑÑего окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¸ пÑименÑÐµÑ Ð¸Ñ
к иниÑиализиÑÑемой базе даннÑÑ
. Ðднако можно вÑбÑаÑÑ Ð¸ дÑÑгÑÑ Ð»Ð¾ÐºÐ°Ð»Ñ Ð´Ð»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
; за дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº РазделÑ 22.1. Ðоманда initdb задаÑÑ Ð¿Ð¾ÑÑдок ÑоÑÑиÑовки по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² опÑеделÑнном клаÑÑеÑе баз даннÑÑ
, и Ñ
оÑÑ Ð½Ð¾Ð²Ñе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
могÑÑ ÑоздаваÑÑÑÑ Ñ Ð¸Ð½Ñм поÑÑдком ÑоÑÑиÑовки, поÑÑдок в базаÑ
-ÑаблонаÑ
, ÑоздаваемÑÑ
initdb, можно измениÑÑ, ÑолÑко еÑли ÑдалиÑÑ Ð¸ пеÑеÑоздаÑÑ Ð¸Ñ
. Также ÑÑÑиÑе, ÑÑо пÑи иÑполÑзовании локалей, оÑлиÑнÑÑ
Ð¾Ñ C и POSIX, возможно Ñнижение пÑоизводиÑелÑноÑÑи. ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¶Ð½Ð¾ пÑавилÑно вÑбÑаÑÑ Ð»Ð¾ÐºÐ°Ð»Ñ Ñ Ñамого наÑала.
Ðоманда initdb Ñакже задаÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ Ñимволов по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑеÑа баз даннÑÑ
. ÐбÑÑно она должна ÑооÑвеÑÑÑвоваÑÑ ÐºÐ¾Ð´Ð¸Ñовке локали. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº РазделÑ 22.3.
ÐÐ»Ñ Ð»Ð¾ÐºÐ°Ð»ÐµÐ¹, оÑлиÑнÑÑ
Ð¾Ñ C и POSIX, поÑÑдок ÑоÑÑиÑовки Ñимволов завиÑÐ¸Ñ Ð¾Ñ ÑиÑÑемной библиоÑеки локализаÑии, а он, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, влиÑÐµÑ Ð½Ð° поÑÑдок клÑÑей в индекÑаÑ
. ÐоÑÑÐ¾Ð¼Ñ ÐºÐ»Ð°ÑÑÐµÑ Ð½ÐµÐ»ÑÐ·Ñ Ð¿ÐµÑевеÑÑи на неÑовмеÑÑимÑÑ Ð²ÐµÑÑÐ¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки ни пÑÑÑм воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñнимка, ни ÑеÑез двоиÑнÑÑ ÑепликаÑиÑ, ни пеÑÐµÐ¹Ð´Ñ Ð½Ð° дÑÑгÑÑ Ð¾Ð¿ÐµÑаÑионнÑÑ ÑиÑÑÐµÐ¼Ñ Ð¸Ð»Ð¸ обновив ÐµÑ Ð²ÐµÑÑиÑ.
17.2.1. ÐÑполÑзование дополниÑелÑнÑÑ ÑайловÑÑ ÑиÑÑем #
Ðо Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð¸Ð½ÑÑаллÑÑиÑÑ ÐºÐ»Ð°ÑÑеÑÑ Ð±Ð°Ð· даннÑÑ ÑоздаÑÑÑÑ Ð½Ðµ в «коÑневом» Ñоме, а в оÑделÑнÑÑ ÑайловÑÑ ÑиÑÑÐµÐ¼Ð°Ñ (ÑÐ¾Ð¼Ð°Ñ ). ÐÑли Ð²Ñ ÑеÑиÑе ÑделаÑÑ Ñак же, Ñо не ÑледÑÐµÑ Ð²ÑбиÑаÑÑ Ð² каÑеÑÑве каÑалога даннÑÑ ÑамÑй веÑÑ Ð½Ð¸Ð¹ каÑалог дополниÑелÑного Ñома (ÑоÑÐºÑ Ð¼Ð¾Ð½ÑиÑованиÑ). ÐÑÑÑе вÑего ÑоздаÑÑ Ð²Ð½ÑÑÑи каÑалога ÑоÑки монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ñалог, пÑинадлежаÑий полÑзоваÑÐµÐ»Ñ Postgres Pro, а заÑем ÑоздаÑÑ Ð²Ð½ÑÑÑи него каÑалог даннÑÑ . ÐÑо иÑклÑÑÐ¸Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÑазÑеÑениÑми, оÑобенно Ð´Ð»Ñ ÑÐ°ÐºÐ¸Ñ Ð¾Ð¿ÐµÑаÑий, как pg_upgrade, и пÑи ÑÑом гаÑанÑиÑÑÐµÑ ÑиÑÑое поведение в ÑлÑÑае, еÑли дополниÑелÑнÑй Ñом окажеÑÑÑ Ð¾ÑклÑÑÑн.
17.2.2. ФайловÑе ÑиÑÑÐµÐ¼Ñ #
ÐообÑе говоÑÑ, Ð´Ð»Ñ Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð»ÑÐ±Ð°Ñ ÑÐ°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема Ñ ÑеманÑикой POSIX. ÐолÑзоваÑели пÑедпоÑиÑаÑÑ ÑазлиÑнÑе ÑайловÑе ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾ ÑамÑм ÑазнÑм пÑиÑинам, в ÑаÑÑноÑÑи, по ÑообÑажениÑм пÑоизводиÑелÑноÑÑи, изÑÑенноÑÑи или поддеÑжки поÑÑавÑиком. Ðак показÑÐ²Ð°ÐµÑ Ð¿ÑакÑика, в ÑезÑлÑÑаÑе лиÑÑ ÑÐ¼ÐµÐ½Ñ Ñайловой ÑиÑÑÐµÐ¼Ñ Ð¸Ð»Ð¸ коÑÑекÑиÑовки ÐµÑ Ð¿Ð°ÑамеÑÑов пÑи пÑоÑÐ¸Ñ ÑавнÑÑ Ð½Ðµ ÑледÑÐµÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð·Ð½Ð°ÑиÑелÑного Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи или поведениÑ.
17.2.2.1. NFS #
ÐаÑалог даннÑÑ Postgres Pro Ð¼Ð¾Ð¶ÐµÑ ÑазмеÑаÑÑÑÑ Ð¸ в Ñайловой ÑиÑÑеме NFS. Postgres Pro не подÑÑÑаиваеÑÑÑ ÑпеÑиалÑно под NFS, ÑÑо ознаÑаеÑ, ÑÑо Ñ NFS он ÑабоÑÐ°ÐµÑ ÑоÑно Ñак же, как и Ñ Ð»Ð¾ÐºÐ°Ð»Ñно подклÑÑÑннÑми ÑÑÑÑойÑÑвами. Postgres Pro не иÑполÑзÑÐµÑ ÑакÑÑ ÑÑнкÑионалÑноÑÑÑ ÑайловÑÑ ÑиÑÑем, коÑоÑÐ°Ñ Ð¸Ð¼ÐµÐµÑ Ñвои оÑобенноÑÑи в NFS, напÑÐ¸Ð¼ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки Ñайлов.
ÐдинÑÑвенное ÑбедиÑелÑное ÑÑебование â иÑполÑзÑÑ NFS c Postgres Pro, монÑиÑÑйÑе ÑÑÑ ÑайловÑÑ ÑиÑÑÐµÐ¼Ñ Ð² Ñежиме hard. ÐÑи иÑполÑзовании Ñежима hard пÑоÑеÑÑÑ Ð¼Ð¾Ð³ÑÑ Â«Ð·Ð°Ð²Ð¸ÑаÑÑ» на неопÑеделÑнное вÑÐµÐ¼Ñ Ð² ÑлÑÑае ÑеÑевÑÑ
пÑоблем, поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¾ÑобÑе меÑÑ ÐºÐ¾Ð½ÑÑолÑ. Ð Ñежиме soft ÑиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ Ð±ÑдÑÑ Ð¿ÑеÑÑваÑÑÑÑ Ð² ÑлÑÑаÑÑ
пеÑебоев в ÑеÑи, но Postgres Pro не повÑоÑÑÐµÑ Ð²ÑзовÑ, пÑеÑваннÑе Ñаким обÑазом, и ÑÑо бÑÐ´ÐµÑ Ð¿ÑоÑвлÑÑÑÑÑ Ð² оÑибкаÑ
ввода-вÑвода.
ÐÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð½ÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ sync не обÑзаÑелÑно. ÐÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñежима async доÑÑаÑоÑно, Ñак как Postgres Pro вÑзÑÐ²Ð°ÐµÑ fsync в нÑжнÑе моменÑÑ Ð´Ð»Ñ ÑбÑоÑа кеÑа запиÑи (Ñак же, как и Ñ Ð»Ð¾ÐºÐ°Ð»Ñной Ñайловой ÑиÑÑемой). Ðднако паÑамеÑÑ sync наÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¿Ñи ÑкÑпоÑÑиÑовании Ñайловой ÑиÑÑÐµÐ¼Ñ Ð½Ð° ÑеÑвеÑе NFS в ÑеÑ
ÐС, где он поддеÑживаеÑÑÑ (в оÑновном ÑÑо каÑаеÑÑÑ Linux). РпÑоÑивном ÑлÑÑае не гаÑанÑиÑÑеÑÑÑ, ÑÑо в ÑезÑлÑÑаÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ fsync или аналогиÑного вÑзова NFS-клиенÑом даннÑе дейÑÑвиÑелÑно окажÑÑÑÑ Ð² надÑжном Ñ
ÑанилиÑе на ÑеÑвеÑе, вÑледÑÑвие Ñего возможно повÑеждение даннÑÑ
, как и пÑи вÑклÑÑенном паÑамеÑÑе fsync. ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑов монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑкÑпоÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÑÑÑÑÑ Ð¾Ñ Ð¿ÑоизводиÑÐµÐ»Ñ Ðº пÑоизводиÑÐµÐ»Ñ Ð¸ Ð¾Ñ Ð²ÐµÑÑии к веÑÑии, поÑÑÐ¾Ð¼Ñ ÑекомендÑеÑÑÑ Ð¿ÐµÑепÑовеÑиÑÑ Ð¸Ñ
или, возможно, Ñвно задаÑÑ Ð½ÑжнÑе знаÑÐµÐ½Ð¸Ñ Ð²Ð¾ избежание неоднознаÑноÑÑи.
РнекоÑоÑÑÑ ÑлÑÑаÑÑ Ð²Ð½ÐµÑнее ÑÑÑÑойÑÑво Ñ Ñанение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑено по NFS или поÑÑедÑÑвом низкоÑÑовневого пÑоÑокола, напÑÐ¸Ð¼ÐµÑ iSCSI. РпоÑледнем ÑлÑÑае Ñакое Ñ ÑанилиÑе пÑедÑÑавлÑеÑÑÑ Ð² виде блоÑного ÑÑÑÑойÑÑва, и на нÑм можно ÑоздаÑÑ Ð»ÑбÑÑ ÑайловÑÑ ÑиÑÑемÑ. ÐÑи ÑÑом админиÑÑÑаÑоÑÑ Ð½Ðµ пÑидÑÑÑÑ Ð¸Ð¼ÐµÑÑ Ð´ÐµÐ»Ð¾ Ñо ÑÑÑанноÑÑÑми NFS, но надо понимаÑÑ, ÑÑо ÑложноÑÑи ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑдалÑннÑм Ñ ÑанилиÑем в Ñаком ÑлÑÑае пÑоÑÑо пеÑемеÑаÑÑÑÑ Ð½Ð° дÑÑгие ÑÑовни.