24.1. ÐÑгÑÑзка в SQL
ÐдеÑ, ÑÑоÑÑÐ°Ñ Ð·Ð° ÑÑим меÑодом, заклÑÑаеÑÑÑ Ð² генеÑаÑии ÑекÑÑового Ñайла Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸ SQL, коÑоÑÑе пÑи вÑполнении на ÑеÑвеÑе пеÑеÑоздадÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² Ñом же Ñамом ÑоÑÑоÑнии, в коÑоÑом она бÑла на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑгÑÑзки. Postgres Pro пÑедоÑÑавлÑÐµÑ Ð´Ð»Ñ ÑÑой Ñели вÑпомогаÑелÑнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ pg_dump. ÐÑоÑÑейÑее пÑименение ÑÑой пÑогÑÐ°Ð¼Ð¼Ñ Ð²ÑглÑÐ´Ð¸Ñ Ñак:
pg_dumpимÑ_базÑ>Ñайл_дампа
Ðак видиÑе, pg_dump запиÑÑÐ²Ð°ÐµÑ ÑезÑлÑÑаÑÑ Ñвоей ÑабоÑÑ Ð² ÑÑÑÑойÑÑво ÑÑандаÑÑного вÑвода. Ðалее бÑÐ´ÐµÑ ÑаÑÑмоÑÑено, Ñем ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾. Ð Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº вÑÑеÑпомÑнÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑоздаÑÑ ÑекÑÑовÑй Ñайл, pg_dump Ð¼Ð¾Ð¶ÐµÑ ÑоздаÑÑ ÑÐ°Ð¹Ð»Ñ Ð¸ в дÑÑÐ³Ð¸Ñ ÑоÑмаÑÐ°Ñ , коÑоÑÑе допÑÑкаÑÑ Ð¿Ð°ÑаллелÑнÑÑ Ð¾Ð±ÑабоÑÐºÑ Ð¸ более гибкое ÑпÑавление воÑÑÑановлением обÑекÑов.
ÐÑогÑамма pg_dump ÑвлÑеÑÑÑ Ð´Ð»Ñ Postgres Pro обÑÑнÑм клиенÑÑким пÑиложением (Ñ
оÑÑ Ð¸ веÑÑма ÑмнÑм). ÐÑо ознаÑаеÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑполнÑÑÑ Ð¿ÑоÑедÑÑÑ ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð»Ñбого ÑдалÑнного компÑÑÑеÑа, еÑли имееÑе доÑÑÑп к нÑжной базе даннÑÑ
. Ðо помниÑе, ÑÑо pg_dump не иÑполÑзÑÐµÑ Ð´Ð»Ñ Ñвоей ÑабоÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо ÑпеÑиалÑнÑе пÑивилегии. Ð ÑаÑÑноÑÑи, ей обÑÑно ÑÑебÑеÑÑÑ Ð´Ð¾ÑÑÑп на ÑÑение вÑеÑ
ÑаблиÑ, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе вÑгÑÑзиÑÑ, Ñак ÑÑо Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑакÑиÑеÑки вÑегда ÐµÑ Ð½Ñжно запÑÑкаÑÑ Ñ Ð¿Ñавами ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¡Ð£ÐÐ. (ÐÑли Ñ Ð²Ð°Ñ Ð½ÐµÑ Ð´Ð¾ÑÑаÑоÑнÑÑ
пÑав Ð´Ð»Ñ ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, Ð²Ñ Ñем не менее можеÑе ÑделаÑÑ ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ñой ÑаÑÑи базÑ, доÑÑÑп к коÑоÑой Ñ Ð²Ð°Ñ ÐµÑÑÑ, иÑполÑзÑÑ Ñакие паÑамеÑÑÑ, как -n или ÑÑ
ема-t .)ÑаблиÑа
УказаÑÑ, к ÐºÐ°ÐºÐ¾Ð¼Ñ ÑеÑвеÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° подклÑÑаÑÑÑÑ Ð¿ÑогÑамма pg_dump, можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð°ÑгÑменÑов командной ÑÑÑоки -h и ÑеÑвеÑ-p . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² каÑеÑÑве ÑеÑвеÑа вÑбиÑаеÑÑÑ localhost или знаÑение, Ñказанное в пеÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑPGHOST. ÐодобнÑм обÑазом, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð¿Ð¾ÑÑ, заданнÑй в пеÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ PGPORT, а еÑли она не задана, Ñо поÑÑ, ÑказаннÑй по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи компилÑÑии. (ÐÐ»Ñ ÑдобÑÑва пÑи компилÑÑии ÑеÑвеÑа обÑÑно ÑÑÑанавливаеÑÑÑ Ñо же знаÑение по ÑмолÑаниÑ.)
Ðак и лÑбое дÑÑгое клиенÑÑкое пÑиложение Postgres Pro, pg_dump по ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑÑÑ Ðº базе даннÑÑ
Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ полÑзоваÑелÑ, ÑовпадаÑÑим Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑекÑÑего полÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ. ЧÑÐ¾Ð±Ñ Ð¿ÐµÑеопÑеделиÑÑ Ð¸Ð¼Ñ, либо добавÑÑе паÑамеÑÑ -U, либо ÑÑÑановиÑе пеÑеменнÑÑ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ PGUSER. ÐомниÑе, ÑÑо pg_dump подклÑÑаеÑÑÑ Ðº ÑеÑвеÑÑ ÑеÑез обÑÑнÑе меÑ
Ð°Ð½Ð¸Ð·Ð¼Ñ Ð¿ÑовеÑки подлинноÑÑи клиенÑа (коÑоÑÑе опиÑÑваÑÑÑÑ Ð² Ðлаве 19).
Ðажное пÑеимÑÑеÑÑво pg_dump в ÑÑавнении Ñ Ð´ÑÑгими меÑодами ÑезеÑвного копиÑованиÑ, опиÑаннÑми далее, ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо вÑвод pg_dump обÑÑно можно загÑÑзиÑÑ Ð² более новÑе веÑÑии Postgres Pro, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº ÑезеÑÐ²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð° ÑÑовне Ñайловой ÑиÑÑÐµÐ¼Ñ Ð¸ непÑеÑÑвное аÑÑ Ð¸Ð²Ð¸Ñование жÑÑÑко завиÑÑÑ Ð¾Ñ Ð²ÐµÑÑии ÑеÑвеÑа. Также, ÑолÑко меÑод Ñ Ð¿Ñименением pg_dump бÑÐ´ÐµÑ ÑабоÑаÑÑ Ð¿Ñи пеÑеноÑе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° дÑÑгÑÑ Ð¼Ð°ÑиннÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ, напÑимеÑ, пÑи пеÑеноÑе Ñ 32-биÑной на 64-биÑнÑÑ Ð²ÐµÑÑÐ¸Ñ ÑеÑвеÑа.
ÐампÑ, ÑоздаваемÑе pg_dump, ÑвлÑÑÑÑÑ Ð²Ð½ÑÑÑенне ÑоглаÑованнÑми, Ñо еÑÑÑ, дамп пÑедÑÑавлÑÐµÑ Ñобой Ñнимок Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð°Ñала запÑÑка pg_dump. pg_dump не блокиÑÑÐµÑ Ð´ÑÑгие опеÑаÑии Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ
во вÑÐµÐ¼Ñ Ñвоей ÑабоÑÑ. (ÐÑклÑÑение ÑоÑÑавлÑÑÑ Ð¾Ð¿ÐµÑаÑии, коÑоÑÑм нÑжна иÑклÑÑиÑелÑÐ½Ð°Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовка, напÑимеÑ, болÑÑинÑÑво ÑоÑм ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER TABLE.)
24.1.1. ÐоÑÑÑановление дампа
ТекÑÑовÑе ÑайлÑ, ÑозданнÑе pg_dump, пÑедназнаÑаÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑего ÑÑÐµÐ½Ð¸Ñ Ð¿ÑогÑаммой psql Ñ Ð¸ÑполÑзованием паÑамеÑÑов по ÑмолÑаниÑ. ÐбÑий вид ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð¼Ð¿Ð° в ÑекÑÑовом ÑоÑмаÑе:
psql -XимÑ_базÑ<Ñайл_дампа
где Ñайл_дампа â ÑÑо Ñайл, ÑодеÑжаÑий вÑвод ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ pg_dump. Ðаза даннÑÑ
, Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð¿Ð°ÑамеÑÑом имÑ_базÑ, не бÑÐ´ÐµÑ Ñоздана данной командой, Ñак ÑÑо Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоздаÑÑ ÐµÑ Ñами из Ð±Ð°Ð·Ñ template0 пеÑед запÑÑком psql (напÑимеÑ, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ createdb -T template0 ). УбедиÑÑÑÑ, ÑÑо psql ÑабоÑÐ°ÐµÑ Ñ Ð¿Ð°ÑамеÑÑами по ÑмолÑаниÑ, можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑа имÑ_базÑ-X (--no-psqlrc). ÐÑогÑамма psql пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑÑ, ÑказÑваÑÑие ÑеÑвеÑ, к коÑоÑÐ¾Ð¼Ñ Ð¾ÑÑÑеÑÑвлÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение, и Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, подобно pg_dump. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÑпÑавке по psql.
ÐампÑ, вÑгÑÑженнÑе не в ÑекÑÑовом ÑоÑмаÑе, воÑÑÑанавливаÑÑÑÑ ÑÑилиÑой pg_restore.
ÐеÑед воÑÑÑановлением SQL-дампа вÑе полÑзоваÑели, коÑоÑÑе владели обÑекÑами или имели пÑава на обÑекÑÑ Ð² вÑгÑÑженной базе даннÑÑ , Ð´Ð¾Ð»Ð¶Ð½Ñ Ñже ÑÑÑеÑÑвоваÑÑ. ÐÑли Ð¸Ñ Ð½ÐµÑ, пÑи воÑÑÑановлении бÑдÑÑ Ð¾Ñибки пеÑеÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑов Ñ Ð¸Ð·Ð½Ð°ÑалÑнÑми владелÑÑами и/или пÑавами. (Ðногда ÑÑо желаемÑй ÑезÑлÑÑаÑ, но обÑÑно неÑ).
Ðо ÑмолÑаниÑ, еÑли пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ñибка SQL, пÑогÑамма psql пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð²Ñполнение. ÐÑли же запÑÑÑиÑÑ psql Ñ ÑÑÑановленной пеÑеменной ON_ERROR_STOP, ÑÑо поведение поменÑеÑÑÑ Ð¸ psql завеÑÑиÑÑÑ Ñ ÐºÐ¾Ð´Ð¾Ð¼ 3 в ÑлÑÑае Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¾Ñибки SQL:
psql -X --set ON_ERROR_STOP=onимÑ_базÑ<Ñайл_дампа
РлÑбом ÑлÑÑае Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе ÑолÑко ÑаÑÑиÑно воÑÑÑановленнÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. РкаÑеÑÑве алÑÑеÑнаÑÐ¸Ð²Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑказаÑÑ, ÑÑо веÑÑ Ð´Ð°Ð¼Ð¿ должен бÑÑÑ Ð²Ð¾ÑÑÑановлен в одной ÑÑанзакÑии, Ñак ÑÑо воÑÑÑановление либо полноÑÑÑÑ Ð²ÑполниÑÑÑ, либо полноÑÑÑÑ Ð¾ÑмениÑÑÑ. ÐклÑÑиÑÑ Ð´Ð°Ð½Ð½Ñй Ñежим можно, пеÑедав psql аÑгÑÐ¼ÐµÐ½Ñ -1 или --single-transaction. ÐÑбиÑÐ°Ñ ÑÑÐ¾Ñ Ñежим, ÑÑÑиÑе, ÑÑо даже незнаÑиÑелÑÐ½Ð°Ñ Ð¾Ñибка Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к оÑкаÑÑ Ð²Ð¾ÑÑÑановлениÑ, коÑоÑое могло пÑодолжаÑÑÑÑ Ð½ÐµÑколÑко ÑаÑов. Ðднако ÑÑо вÑÑ Ð¶Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑедпоÑÑиÑелÑней, Ñем вÑÑÑнÑÑ Ð²ÑÑиÑаÑÑ ÑложнÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
поÑле ÑаÑÑиÑно воÑÑÑановленного дампа.
ÐлагодаÑÑ ÑпоÑобноÑÑи pg_dump и psql пиÑаÑÑ Ð¸ ÑиÑаÑÑ ÐºÐ°Ð½Ð°Ð»Ñ Ð²Ð²Ð¾Ð´Ð°-вÑвода, можно ÑкопиÑоваÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа на дÑÑгой, напÑимеÑ:
pg_dump -hhost1имÑ_базÑ| psql -X -hhost2имÑ_базÑ
Ðажно
ÐампÑ, коÑоÑÑе вÑдаÑÑ pg_dump, ÑодеÑÐ¶Ð°Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾ÑноÑиÑелÑно template0. ÐÑо ознаÑаеÑ, ÑÑо лÑбÑе ÑзÑки, пÑоÑедÑÑÑ Ð¸ Ñ. п., добавленнÑе в Ð±Ð°Ð·Ñ ÑеÑез template1, pg_dump Ñакже вÑгÑÑÐ·Ð¸Ñ Ð² дамп. Ðак ÑледÑÑвие, еÑли пÑи воÑÑÑановлении Ð²Ñ Ð¸ÑполÑзÑеÑе модиÑиÑиÑованнÑй template1, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоздаÑÑ Ð¿ÑÑÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
из template0, как показано в пÑимеÑе вÑÑе.
ÐоÑле воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑезеÑвной копии Ð¸Ð¼ÐµÐµÑ ÑмÑÑл запÑÑÑиÑÑ ANALYZE Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов полÑÑил полезнÑÑ ÑÑаÑиÑÑикÑ; за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 23.1.3 и ÐодÑазделÑ 23.1.6. ÐÑÑгие ÑовеÑÑ Ð¿Ð¾ ÑÑÑекÑивной загÑÑзке болÑÑиÑ
обÑÑмов даннÑÑ
в Postgres Pro Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе найÑи в Разделе 14.4.
24.1.2. ÐÑполÑзование pg_dumpall
ÐÑогÑамма pg_dump вÑгÑÑÐ¶Ð°ÐµÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² один Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени и не вклÑÑÐ°ÐµÑ Ð² дамп инÑоÑмаÑÐ¸Ñ Ð¾ ÑолÑÑ Ð¸ ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑÐ²Ð°Ñ (Ñак как ÑÑо инÑоÑмаÑÐ¸Ñ ÑÑÐ¾Ð²Ð½Ñ ÐºÐ»Ð°ÑÑеÑа, а не Ñамой Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ ). ÐÐ»Ñ ÑдобÑÑва ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð°Ð¼Ð¿Ð° вÑего ÑодеÑжимого клаÑÑеÑа баз даннÑÑ Ð¿ÑедоÑÑавлÑеÑÑÑ Ð¿ÑогÑамма pg_dumpall, коÑоÑÐ°Ñ Ð´ÐµÐ»Ð°ÐµÑ ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð²ÑÐµÑ Ð±Ð°Ð· даннÑÑ ÐºÐ»Ð°ÑÑеÑа, а Ñакже ÑÐ¾Ñ ÑанÑÐµÑ Ð´Ð°Ð½Ð½Ñе ÑÑÐ¾Ð²Ð½Ñ ÐºÐ»Ð°ÑÑеÑа, Ñакие как Ñоли и опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑаблиÑнÑÑ Ð¿ÑоÑÑÑанÑÑв. ÐÑоÑÑое иÑполÑзование ÑÑой командÑ:
pg_dumpall > Ñайл_дампа
ÐолÑÑеннÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ воÑÑÑановиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ psql:
psql -X -f Ñайл_дампа postgres
(РпÑинÑипе, здеÑÑ Ð² каÑеÑÑве наÑалÑной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
можно ÑказаÑÑ Ð¸Ð¼Ñ Ð»Ñбой ÑÑÑеÑÑвÑÑÑей базÑ, но еÑли Ð²Ñ Ð·Ð°Ð³ÑÑжаеÑе дамп в пÑÑÑой клаÑÑеÑ, обÑÑно нÑжно иÑполÑзоваÑÑ postgres). ÐоÑÑÑанавливаÑÑ Ð´Ð°Ð¼Ð¿, коÑоÑÑй вÑдала pg_dumpall, вÑегда необÑ
одимо Ñ Ð¿Ñавами ÑÑпеÑполÑзоваÑелÑ, Ñак как они ÑÑебÑÑÑÑÑ Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о ÑолÑÑ
и ÑаблиÑнÑÑ
пÑоÑÑÑанÑÑваÑ
. ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑаблиÑнÑе пÑоÑÑÑанÑÑва, ÑбедиÑеÑÑ, ÑÑо пÑÑи к ÑаблиÑнÑм пÑоÑÑÑанÑÑвам в дампе ÑооÑвеÑÑÑвÑÑÑ Ð½Ð¾Ð²Ð¾Ð¹ ÑÑеде.
pg_dumpall вÑдаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, коÑоÑÑе заново ÑоздаÑÑ Ñоли, ÑаблиÑнÑе пÑоÑÑÑанÑÑва и пÑÑÑÑе Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , а заÑем вÑзÑÐ²Ð°ÐµÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð±Ð°Ð·Ñ pg_dump. Таким обÑазом, Ñ Ð¾ÑÑ ÐºÐ°Ð¶Ð´Ð°Ñ Ð±Ð°Ð·Ð° даннÑÑ Ð±ÑÐ´ÐµÑ Ð²Ð½ÑÑÑенне ÑоглаÑованной, ÑоÑÑоÑние ÑазнÑÑ Ð±Ð°Ð· не бÑÐ´ÐµÑ ÑÐ¸Ð½Ñ ÑоннÑм.
ТолÑко глобалÑнÑе даннÑе клаÑÑеÑа можно вÑгÑÑзиÑÑ, пеÑедав pg_dumpall клÑÑ --globals-only. ÐÑо необÑ
одимо, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑкопиÑоваÑÑ ÐºÐ»Ð°ÑÑеÑ, когда pg_dump вÑполнÑеÑÑÑ Ð´Ð»Ñ Ð¾ÑделÑнÑÑ
баз даннÑÑ
.
24.1.3. УпÑавление болÑÑими базами даннÑÑ
ÐекоÑоÑÑе опеÑаÑионнÑе ÑиÑÑÐµÐ¼Ñ Ð½Ð°ÐºÐ»Ð°Ð´ÑваÑÑ Ð¾Ð³ÑаниÑение на макÑималÑнÑй ÑÐ°Ð·Ð¼ÐµÑ Ñайла, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº пÑоблемам пÑи Ñоздании болÑÑÐ¸Ñ Ñайлов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ pg_dump. Ð ÑÑаÑÑÑÑ, pg_dump Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¸ÑаÑÑ Ð² ÑÑандаÑÑнÑй вÑвод, Ñак ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑандаÑÑнÑе инÑÑÑÑменÑÑ Unix Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¿Ð¾ÑенÑиалÑнÑÑ Ð¿Ñоблем. ÐÐ¾Ñ Ð½ÐµÑколÑко возможнÑÑ Ð¼ÐµÑодов:
ÐÑполÑзÑйÑе ÑжаÑÑе дампÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿ÑедпоÑиÑаемÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ ÑжаÑиÑ, напÑÐ¸Ð¼ÐµÑ gzip:
pg_dumpимÑ_базÑ| gzip >имÑ_Ñайла.gz
ÐаÑем загÑÑзиÑÑ ÑжаÑÑй дамп можно командой:
gunzip -cимÑ_Ñайла.gz | psqlимÑ_базÑ
или:
catимÑ_Ñайла.gz | gunzip | psqlимÑ_базÑ
ÐÑполÑзÑйÑе split. Ðоманда split Ð¼Ð¾Ð¶ÐµÑ ÑазбиваÑÑ Ð²ÑводимÑе даннÑе на неболÑÑие ÑайлÑ, ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ¾ÑоÑÑÑ
ÑдовлеÑвоÑÑÐµÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñей Ñайловой ÑиÑÑемÑ. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑаÑÑи по 2 гигабайÑа:
pg_dumpимÑ_базÑ| split -b 2G -имÑ_Ñайла
ÐоÑÑÑановиÑÑ Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñак:
catимÑ_Ñайла* | psqlимÑ_базÑ
ÐÑполÑзоваÑÑ GNU split можно вмеÑÑе Ñ gzip:
pg_dump имÑ_Ð±Ð°Ð·Ñ | split -b 2G --filter='gzip > $FILE.gz' ÐоÑÑÑановиÑÑ Ð´Ð°Ð½Ð½Ñе поÑле Ñакого ÑÐ°Ð·Ð±Ð¸ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ zcat.
ÐÑполÑзÑйÑе ÑпеÑиалÑнÑй ÑоÑÐ¼Ð°Ñ Ð´Ð°Ð¼Ð¿Ð° pg_dump. ÐÑли пÑи ÑбоÑке Postgres Pro бÑла подклÑÑена библиоÑека zlib, дамп в ÑпеÑиалÑном ÑоÑмаÑе бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ Ð² Ñайл в ÑжаÑом виде. Ð Ñаком ÑоÑмаÑе ÑÐ°Ð·Ð¼ÐµÑ Ñайла дампа бÑÐ´ÐµÑ Ð±Ð»Ð¸Ð·Ð¾Ðº к ÑазмеÑÑ, полÑÑÐµÐ½Ð½Ð¾Ð¼Ñ Ñ Ð¿Ñименением gzip, но он лÑÑÑе Ñем, ÑÑо позволÑÐµÑ Ð²Ð¾ÑÑÑанавливаÑÑ ÑаблиÑÑ Ð²ÑбоÑоÑно. СледÑÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вÑгÑÑÐ¶Ð°ÐµÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
в ÑпеÑиалÑном ÑоÑмаÑе:
pg_dump -FcимÑ_базÑ>имÑ_Ñайла
Ðамп в ÑпеÑиалÑном ÑоÑмаÑе не ÑвлÑеÑÑÑ ÑкÑипÑом Ð´Ð»Ñ psql и должен воÑÑÑанавливаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ pg_restore, напÑимеÑ:
pg_restore -dимÑ_базÑимÑ_Ñайла
Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÑпÑавке по командам pg_dump и pg_restore.
ÐÐ»Ñ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑиÑ
баз даннÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ ÑоÑеÑаÑÑ split Ñ Ð¾Ð´Ð½Ð¸Ð¼ из двÑÑ
дÑÑгиÑ
меÑодов.
ÐÑполÑзÑйÑе возможноÑÑÑ Ð¿Ð°ÑаллелÑной вÑгÑÑзки в pg_dump. ЧÑÐ¾Ð±Ñ ÑÑкоÑиÑÑ Ð²ÑгÑÑÐ·ÐºÑ Ð±Ð¾Ð»ÑÑой ÐÐ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ñежим паÑаллелÑной вÑгÑÑзки в pg_dump. ÐÑи ÑÑом одновÑеменно бÑдÑÑ Ð²ÑгÑÑжаÑÑÑÑ Ð½ÐµÑколÑко ÑаблиÑ. УпÑавлÑÑÑ ÑиÑлом паÑаллелÑнÑÑ
заданий позволÑÐµÑ Ð¿Ð°ÑамеÑÑ -j. ÐаÑаллелÑÐ½Ð°Ñ Ð²ÑгÑÑзка поддеÑживаеÑÑÑ ÑолÑко Ð´Ð»Ñ ÑоÑмаÑа аÑÑ
ива в каÑалоге.
pg_dump -jÑиÑло-F d -fвÑÑ Ð¾Ð´Ð½Ð¾Ð¹_каÑалогимÑ_базÑ
ÐÑ Ñакже можеÑе воÑÑÑановиÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð² паÑаллелÑном Ñежиме Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ pg_restore -j. ÐÑо поддеÑживаеÑÑÑ Ð´Ð»Ñ Ð»Ñбого аÑÑ
ива в ÑоÑмаÑе каÑалога или ÑпеÑиалÑном ÑоÑмаÑе, даже еÑли аÑÑ
ив ÑоздавалÑÑ Ð½Ðµ командой pg_dump -j.