| PG_RESTORE(1) | PostgreSQL 18.6 Documentation | PG_RESTORE(1) |
نام (NAME)
pg_restore - بازیابی یک پایگاه داده PostgreSQL از یک فایل بایگانی ایجاد شده توسط pg_dump
خلاصه دستور (SYNOPSIS)
pg_restore [connection-option...] [option...] [filename]
توضیحات (DESCRIPTION)
pg_restore ابزاری برای بازیابی یک پایگاه داده PostgreSQL از یک بایگانی ایجادشده توسط pg_dump(1) در یکی از قالبهای غیر متنی ساده است. این ابزار دستورهای لازم را برای بازسازی پایگاه داده به وضعیتی که در زمان ذخیرهسازی داشته است صادر میکند. همچنین فایلهای بایگانی به pg_restore این امکان را میدهند که در موارد بازیابی انتخابی عمل کند، یا حتی پیش از بازیابی، ترتیب موارد را تغییر دهد. فایلهای بایگانی بهگونهای طراحی شدهاند که بین معماریهای مختلف سازگار و قابلحمل باشند.
pg_restore میتواند در دو حالت عمل کند. اگر نام یک پایگاه داده مشخص شده باشد، pg_restore به آن پایگاه داده متصل میشود و محتویات بایگانی را مستقیماً درون پایگاه داده بازیابی میکند. در غیر این صورت، اسکریپتی شامل دستورهای SQL لازم برای بازسازی پایگاه داده ایجاد شده و در یک فایل یا خروجی استاندارد نوشته میشود. این اسکریپت خروجی، معادل با قالب خروجی متن ساده در pg_dump است. بنابراین، برخی از گزینههای کنترلکننده خروجی، مشابه گزینههای pg_dump هستند.
بدیهی است که pg_restore نمیتواند اطلاعاتی را که در فایل بایگانی وجود ندارد بازیابی کند. برای مثال، اگر بایگانی با استفاده از گزینهٔ “تخلیه دادهها بهصورت دستورهای INSERT” ایجاد شده باشد، pg_restore قادر نخواهد بود دادهها را با استفاده از دستورهای COPY بارگذاری کند.
هشدار
بازیابی یک نسخهٔ پشتیبان (dump) باعث میشود که مقصد، کدهای دلخواهی را به انتخاب مدیران ارشد (superusers) مبدأ اجرا کند. پشتیبانگیریهای جزئی و بازیابیهای جزئی مانع از این امر نمیشوند. اگر به مدیران ارشد مبدأ اعتمادی وجود ندارد، دستورهای SQL استخراجشده باید پیش از بازیابی بررسی شوند. نسخههای پشتیبان غیر متنی را میتوان با استفاده از گزینهٔ --file در pg_restore بررسی کرد. توجه داشته باشید کلاینتی که عملیات پشتیبانگیری و بازیابی را اجرا میکند، نیازی به اعتماد به مدیران ارشد مبدأ یا مقصد ندارد.
pg_restore آرگومانهای خط فرمان زیر را میپذیرد.
filename
-a
--data-only
این گزینه شبیه به مشخص کردن --section=data است، هرچند به دلایل تاریخی دقیقاً با آن یکسان نیست.
-c
--clean
-C
--create
با گزینهٔ --create، دستور pg_restore همچنین توضیحات (comment) پایگاه داده (در صورت وجود) و تمام تنظیمات متغیرهای پیکربندی مختص به این پایگاه داده را بازیابی میکند؛ یعنی هر دستور ALTER DATABASE ... SET ... و ALTER ROLE ... IN DATABASE ... SET ... که به این پایگاه داده اشاره دارد. امتیازات دسترسی برای خود پایگاه داده نیز بازیابی میشوند، مگر اینکه --no-acl مشخص شده باشد.
هنگامی که از این گزینه استفاده میشود، از پایگاه داده مشخصشده با -d تنها برای صدور دستورهای اولیهٔ DROP DATABASE و CREATE DATABASE استفاده میشود. تمامی دادهها در پایگاه دادهای با نام درجشده در بایگانی بازیابی میشوند.
-d dbname
--dbname=dbname
-e
--exit-on-error
-f filename
--file=filename
-F format
--format=format
c
custom
d
directory
t
tar
-I index
--index=index
-j number-of-jobs
--jobs=number-of-jobs
هر کار (job) بسته به سیستمعامل، یک فرایند یا یک ریسه (thread) است و از یک اتصال مجزا به سرور استفاده میکند.
مقدار بهینه برای این گزینه به پیکربندی سختافزاری سرور، کلاینت و شبکه بستگی دارد. عوامل موثر شامل تعداد هستههای CPU و پیکربندی دیسک است. یک نقطه شروع مناسب، تعداد هستههای CPU در سرور است، اما مقادیر بزرگتر از آن نیز در بسیاری از موارد میتوانند به زمانهای بازیابی سریعتر منجر شوند. البته مقادیر بیش از حد بالا به دلیل وقوع کوبش (thrashing) موجب کاهش کارایی خواهند شد.
با این گزینه تنها قالبهای بایگانی custom و directory پشتیبانی میشوند. ورودی باید یک فایل عادی یا دایرکتوری باشد (نه برای مثال یک pipe یا ورودی استاندارد). همچنین نمیتوان از چند کار به طور همزمان به همراه گزینهٔ --single-transaction استفاده کرد.
-l
--list
-L list-file
--use-list=list-file
فایل list-file
معمولاً با
ویرایش
خروجی یک
عملیات
قبلی -l
ایجاد
میشود.
خطوط را
میتوان
جابجا یا
حذف کرد، و
همچنین
میتوان با
قرار دادن
یک
نقطهویرگول
(;) در ابتدای
سطر، آنها
را تبدیل به
توضیح کرد.
برای
مثالها به
ادامه
مراجعه
کنید. -n schema
--schema=schema
-N schema
--exclude-schema=schema
هنگامی که هر دو گزینهٔ -n و -N برای نام طرحوارهٔ یکسانی مشخص شوند، سوئیچ -N اولویت دارد و آن طرحواره مستثنی میشود.
-O
--no-owner
-P function-name(argtype [, ...])
--function=function-name(argtype [, ...])
-R
--no-reconnect
-s
--schema-only
این گزینه نمیتواند همراه با --data-only یا --statistics-only استفاده شود. این گزینه مشابه است با، اما بنا به دلایل تاریخی دقیقاً یکسان نیست با، مشخص کردن --section=pre-data --section=post-data --no-statistics.
(این گزینه را با گزینهٔ --schema اشتباه نگیرید، که از کلمهٔ “schema” با معنایی متفاوت استفاده میکند.)
-S username
--superuser=username
-t table
--table=table
نکته
هنگامی که -t مشخص شده باشد، pg_restore هیچ تلاشی برای بازیابی سایر اشیاء پایگاهداده که جدول(های) انتخابشده ممکن است به آنها وابسته باشند، نمیکند. بنابراین، هیچ تضمینی وجود ندارد که بازیابی یک جدول خاص در یک پایگاهدادهٔ خالی با موفقیت همراه باشد.
نکته
رفتار این پرچم دقیقاً مشابه پرچم -t دستور pg_dump نیست. در حال حاضر هیچ سازوکاری برای تطبیق نویسههای عمومی (wildcard) در pg_restore وجود ندارد، و همچنین نمیتوانید نام طرحواره را درون -t آن درج کنید. افزون بر این، در حالی که پرچم -t دستور pg_dump اشیاء فرعی و وابسته (مانند ایندکسها) جدول(های) انتخابشده را نیز دامپ میکند، پرچم -t دستور pg_restore شامل چنین اشیاء فرعی نمیشود.
نکته
در نسخههای پیش از PostgreSQL 9.6، این پرچم تنها با جدولها مطابقت داشت، نه با هیچ نوع رابطهٔ (relation) دیگر.
-T trigger
--trigger=trigger
-v
--verbose
-V
--version
--no-privileges
--no-acl
-1
--single-transaction
--disable-triggers
در حال حاضر، دستورهای صادرشده برای --disable-triggers باید توسط مدیر سیستم (superuser) اجرا شوند. بنابراین باید نام یک superuser را با -S مشخص کنید یا، ترجیحاً، pg_restore را به عنوان یک superuser در PostgreSQL اجرا نمایید.
--enable-row-security
توجه داشته باشید که این گزینه در حال حاضر نیازمند این است که فایل پشتیبان در قالب INSERT باشد، زیرا COPY FROM از row security پشتیبانی نمیکند.
--filter=filename
این فایل در هر سطر یک الگوی پایگاه داده را با قالب زیر فهرست میکند:
{ include | exclude } { function | index | schema | table | trigger } PATTERN
نخستین کلیدواژه مشخص میکند که آیا اشیاء منطبق با الگو باید گنجانده (include) یا مستثنی (exclude) شوند. کلیدواژه دوم نوع شیء مورد نظر برای فیلتر شدن با الگو را تعیین میکند:
سطرهایی که با # آغاز میشوند به عنوان یادداشت (کامنت) تلقی شده و نادیده گرفته میشوند. همچنین میتوان کامنتها را بعد از یک سطر الگوی شیء قرار داد. سطرهای خالی نیز نادیده گرفته میشوند. برای آگاهی از نحوه نقلقول کردن (quoting) در الگوها، بخش Patterns را مشاهده کنید.
--if-exists
--no-data
--no-data-for-failed-tables
این گزینه تنها زمانی مؤثر است که بازیابی مستقیماً در یک پایگاه داده انجام شود، نه هنگام تولید خروجی اسکریپت SQL.
--no-policies
--no-publications
--no-schema
--no-security-labels
--no-statistics
--no-subscriptions
--no-table-access-method
--no-tablespaces
--restrict-key=restrict_key
این گزینه عمدتاً برای اهداف آزمایشی و دیگر سناریوهایی که به خروجی تکرارپذیر نیاز دارند (مانند مقایسه فایلهای dump) در نظر گرفته شده است. استفاده عمومی از آن توصیه نمیشود، زیرا یک سرور مخرب با آگاهی قبلی از کلید ممکن است قادر به تزریق کد دلخواهی باشد که روی ماشینی که psql را با خروجی dump اجرا میکند، اجرا خواهد شد.
--section=sectionname
بخش data شامل دادههای واقعی جدول و همچنین تعاریف اشیاء بزرگ (large-object) است. موارد post-data شامل تعاریف نمایهها (indexes)، تریگرها (triggers)، قوانین (rules) و قیود (constraints) به غیر از قیود اعتبارسنجیشدهی check است. موارد pre-data شامل تمامی موارد دیگر تعریف داده است.
--statistics
--statistics-only
--strict-names
--transaction-size=N
گزینه --transaction-size انتخابی بینابینی میان رفتار پیشفرض (یک تراکنش به ازای هر دستور SQL) و -1/--single-transaction (یک تراکنش برای تمام اشیاء بازیابیشده) ارائه میدهد. در حالی که --single-transaction کمترین بار اضافی (overhead) را دارد، ممکن است برای پایگاههای داده بزرگ غیرعملی باشد زیرا تراکنش روی هر شیء بازیابیشده یک قفل میگیرد که این امر احتمالاً فضای جدول قفل (lock table space) سرور را به اتمام میرساند. استفاده از --transaction-size با اندازهای در حدود چند هزار شیء، تقریباً همان مزایای عملکردی را فراهم میکند و در عین حال میزان فضای مورد نیاز جدول قفل را محدود میسازد.
--use-set-session-authorization
-?
--help
ابزار pg_restore همچنین آرگومانهای خط فرمان زیر را برای پارامترهای اتصال میپذیرد:
-h host
--host=host
-p port
--port=port
-U username
--username=username
-w
--no-password
-W
--password
--role=rolename
محیط (ENVIRONMENT)
PGHOST
PGOPTIONS
PGPORT
PGUSER
PG_COLOR
این ابزار، مانند بیشتر ابزارهای دیگر PostgreSQL، از متغیرهای محیطی پشتیبانیشده توسط libpq نیز استفاده میکند (بخش 32.15 را ببینید). با این حال، در صورتی که نام پایگاه داده ارائه نشده باشد، PGDATABASE را نمیخواند.
خطاها (DIAGNOSTICS)
هنگامی که یک اتصال مستقیم به پایگاه داده با استفاده از گزینهٔ -d مشخص میشود، pg_restore دروناً دستورات SQL را اجرا میکند. اگر در اجرای pg_restore مشکلی دارید، مطمئن شوید که میتوانید با استفاده از، برای مثال، psql(1) اطلاعاتی را از پایگاه داده واکشی کنید. همچنین، هرگونه تنظیمات پیشفرض اتصال و متغیرهای محیطی مورد استفاده توسط کتابخانهٔ کلاینت libpq اعمال خواهند شد.
نکات (NOTES)
اگر در نصب شما هرگونه مورد محلی به پایگاه دادهٔ template1 افزوده شده است، دقت کنید که خروجی pg_restore را درون یک پایگاه دادهٔ واقعاً خالی بارگذاری نمایید؛ در غیر این صورت احتمالاً به دلیل تعاریف تکراری اشیاء افزودهشده با خطا مواجه خواهید شد. برای ساخت یک پایگاه دادهٔ خالی بدون هیچگونه افزودهٔ محلی، به جای template1 از template0 نسخهبرداری کنید، برای نمونه:
CREATE DATABASE foo WITH TEMPLATE template0;
محدودیتهای pg_restore در زیر با جزئیات آمده است.
همچنین برای جزئیات بیشتر دربارهٔ محدودیتهای pg_dump، مستندات pg_dump(1) را ببینید.
بهطور پیشفرض، اگر آمارهای بهینهساز در فایل روگرفت (dump) موجود باشند، pg_restore آنها را بازیابی خواهد کرد. اگر همهٔ آمارها بازیابی نشدند، ممکن است اجرای ANALYZE روی هر جدول بازیابیشده مفید باشد تا بهینهساز به آمارهای سودمندی دسترسی داشته باشد؛ برای اطلاعات بیشتر به بخش 24.1.3 و بخش 24.1.6 مراجعه کنید..SH "مثالها (EXAMPLES)"
فرض کنید از پایگاه دادهای به نام mydb در یک فایل دامپ با قالب سفارشی (custom-format) خروجی گرفتهایم:
$ pg_dump -Fc mydb > db.dump
برای حذف پایگاه داده و ایجاد مجدد آن از فایل دامپ:
$ dropdb mydb $ pg_restore -C -d postgres db.dump
پایگاه داده مشخصشده در سوییچ -d میتواند هر پایگاه داده موجود در کلاستر باشد؛ pg_restore تنها از آن برای صدور دستور CREATE DATABASE برای mydb استفاده میکند. با گزینه -C، دادهها همیشه در پایگاه دادهای با نام درجشده در فایل دامپ بازیابی میشوند.
برای بازیابی فایل دامپ در یک پایگاه داده جدید به نام newdb:
$ createdb -T template0 newdb $ pg_restore -d newdb db.dump
توجه داشته باشید که از -C استفاده نمیکنیم و در عوض مستقیماً به پایگاه دادهای متصل میشویم که قرار است دادهها در آن بازیابی شوند. همچنین توجه داشته باشید که پایگاه داده جدید را از روی template0 شبیهسازی میکنیم، نه template1، تا اطمینان حاصل شود که در ابتدا کاملاً خالی است.
برای تغییر ترتیب آیتمهای پایگاه داده، ابتدا لازم است فهرست محتویات (table of contents) آرشیو استخراج شود:
$ pg_restore -l db.dump > db.list
فایل فهرست شامل یک سربرگ و یک خط برای هر آیتم است؛ برای مثال:
; ; Archive created at Mon Sep 14 13:55:39 2009 ; dbname: DBDEMOS ; TOC Entries: 81 ; Compression: 9 ; Dump Version: 1.10-0 ; Format: CUSTOM ; Integer: 4 bytes ; Offset: 8 bytes ; Dumped from database version: 8.3.5 ; Dumped by pg_dump version: 8.3.8 ; ; ; Selected TOC Entries: ; 3; 2615 2200 SCHEMA - public pasha 1861; 0 0 COMMENT - SCHEMA public pasha 1862; 0 0 ACL - public pasha 317; 1247 17715 TYPE public composite pasha 319; 1247 25899 DOMAIN public domain0 pasha
علامتهای نقطهویرگول (;) نشاندهنده کامنت هستند و اعداد ابتدای خطوط به شناسه داخلی آرشیو (internal archive ID) اختصاصیافته به هر آیتم اشاره دارند.
خطوط درون فایل را میتوان کامنت کرد، حذف نمود و ترتیب آنها را تغییر داد. برای مثال:
10; 145433 TABLE map_resolutions postgres ;2; 145344 TABLE species postgres ;4; 145359 TABLE nt_header postgres 6; 145402 TABLE species_records postgres ;8; 145416 TABLE ss_old postgres
میتواند به عنوان ورودی برای pg_restore استفاده شود و تنها آیتمهای 10 و 6 را با همان ترتیب بازیابی خواهد کرد:
$ pg_restore -L db.list db.dump
| 2026 | PostgreSQL 18.6 |