PG_DUMPALL(1) PostgreSQL 18.6 Documentation PG_DUMPALL(1)

pg_dumpall - استخراج تمام پایگاه‌های داده یک کلاستر PostgreSQL در یک فایل اسکریپت

pg_dumpall [connection-option...] [option...]

دستور pg_dumpall ابزاری برای استخراج و ذخیره‌سازی (“dump کردن”) تمامی پایگاه‌های داده PostgreSQL یک کلاستر در قالب یک فایل اسکریپت است. این فایل اسکریپت شامل دستورهای SQL است که می‌تواند به عنوان ورودی به psql(1) جهت بازیابی پایگاه‌های داده داده شود. این ابزار کار خود را با فراخوانی pg_dump(1) برای هر یک از پایگاه‌های داده موجود در کلاستر انجام می‌دهد. همچنین pg_dumpall اشیاء سراسری (global objects) مشترک میان تمام پایگاه‌های داده، از جمله نقش‌های پایگاه‌داده (roles)، فضاهای جدول (tablespaces) و اعطای دسترسی‌ها برای پارامترهای پیکربندی را استخراج می‌کند. (ابزار pg_dump این اشیاء را ذخیره نمی‌کند.)

از آنجا که pg_dumpall جدول‌ها را از تمام پایگاه‌های داده می‌خواند، به احتمال بسیار زیاد برای تهیه یک نسخه خروجی کامل باید به عنوان کاربر ارشد (superuser) پایگاه‌داده متصل شوید. همچنین برای اجرای اسکریپت ذخیره‌شده به دسترسی‌های superuser نیاز خواهید داشت تا اجازه افزودن نقش‌ها و ایجاد پایگاه‌های داده را داشته باشید.

اسکریپت SQL در خروجی استاندارد نوشته خواهد شد. از گزینه -f/--file یا عملگرهای تغییر مسیر پوسته برای هدایت آن به یک فایل استفاده کنید.

دستور pg_dumpall باید چندین بار به سرور PostgreSQL متصل شود (یک بار به ازای هر پایگاه‌داده). اگر از احراز هویت با گذرواژه استفاده می‌کنید، هر بار گذرواژه را درخواست خواهد کرد. در چنین مواردی، داشتن یک فایل ~/.pgpass بسیار سودمند است. برای اطلاعات بیشتر به بخش 32.16 مراجعه کنید.


هشدار (Warning)

بازیابی یک نسخه پشتیبان باعث می‌شود که سیستم مقصد کدهای دلخواه انتخاب‌شده توسط superuserهای مبدأ را اجرا کند. پشتیبان‌گیری‌های جزئی و بازیابی‌های جزئی نیز این مسئله را محدود نمی‌کنند. اگر به superuserهای مبدأ اعتماد ندارید، عبارات SQL استخراج‌شده باید پیش از بازیابی به دقت بررسی شوند. توجه داشته باشید که نیازی نیست کلاینتِ اجراکنندهٔ فرایند استخراج و بازیابی به superuserهای مبدأ یا مقصد اعتماد داشته باشد.

گزینه‌های خط فرمان زیر محتوا و قالب خروجی را کنترل می‌کنند.

-a
--data-only

تنها داده‌ها را استخراج می‌کند، نه شمای پایگاه‌داده (تعاریف داده‌ها) یا آمارها را.

-c
--clean

دستورهای SQL برای DROP کردن تمامی پایگاه‌های داده، نقش‌ها و فضاهای جدول استخراج‌شده را پیش از ایجاد مجدد آنها درج می‌کند. این گزینه زمانی مفید است که بازیابی قرار باشد روی یک کلاستر موجود بازنویسی انجام دهد. اگر هر یک از اشیاء در کلاستر مقصد وجود نداشته باشند، پیام‌های خطای قابل چشم‌پوشی در طول بازیابی گزارش می‌شوند، مگر اینکه --if-exists نیز مشخص شده باشد.

-E encoding
--encoding=encoding

خروجی استخراج‌شده را با کدگذاری نویسه (character set encoding) مشخص‌شده ایجاد می‌کند. به طور پیش‌فرض، خروجی در کدگذاری پایگاه‌داده ایجاد می‌شود. (روش دیگر برای دستیابی به نتیجه مشابه، تنظیم متغیر محیطی PGCLIENTENCODING روی کدگذاری مورد نظر برای خروجی است.)

-f filename
--file=filename

خروجی را به فایل مشخص‌شده می‌فرستد. اگر این گزینه نادیده گرفته شود، از خروجی استاندارد استفاده خواهد شد.

-g
--globals-only

تنها اشیاء سراسری (نقش‌ها و فضاهای جدول) را استخراج می‌کند و پایگاه‌های داده را شامل نمی‌شود.

-O
--no-owner

دستوراتی را برای تطبیق مالکیت اشیاء با پایگاه‌داده اصلی صادر نمی‌کند. به طور پیش‌فرض، pg_dumpall دستورات ALTER OWNER یا SET SESSION AUTHORIZATION را برای تعیین مالکیت عناصر شمای ایجادشده درج می‌کند. اجرای این دستورات هنگام اجرای اسکریپت با خطا مواجه خواهد شد، مگر اینکه توسط یک superuser (یا همان کاربری که مالک تمام اشیاء موجود در اسکریپت است) اجرا شود. برای ایجاد اسکریپتی که توسط هر کاربری قابل بازیابی باشد اما مالکیت تمام اشیاء را به همان کاربر اختصاص دهد، گزینه -O را مشخص کنید.

-r
--roles-only

تنها نقش‌ها را استخراج می‌کند و پایگاه‌های داده یا فضاهای جدول را شامل نمی‌شود.

-s
--schema-only

تنها تعاریف اشیاء (شما) را استخراج می‌کند، نه داده‌ها را.

-S username
--superuser=username

نام کاربری superuser را جهت استفاده هنگام غیرفعال کردن محرک‌ها (triggers) مشخص می‌کند. این گزینه تنها زمانی کاربرد دارد که از --disable-triggers استفاده شود. (معمولاً بهتر است این گزینه درج نشود و در عوض اسکریپت حاصل مستقیماً توسط superuser اجرا شود.)

-t
--tablespaces-only

تنها فضاهای جدول را استخراج می‌کند و پایگاه‌های داده یا نقش‌ها را نادیده می‌گیرد.

-v
--verbose

حالت پرگو (verbose) را مشخص می‌کند. این گزینه باعث می‌شود pg_dumpall زمان‌های شروع/پایان را در فایل خروجی و پیام‌های پیشرفت را در خطای استاندارد بنویسد. تکرار این گزینه باعث نمایش پیام‌های اشکال‌زدایی (debug) بیشتر در خطای استاندارد می‌شود. این گزینه به pg_dump نیز منتقل می‌گردد.

-V
--version

نسخه pg_dumpall را چاپ کرده و خارج می‌شود.

-x
--no-privileges
--no-acl

از استخراج دسترسی‌های کاربری (دستورهای grant/revoke) جلوگیری می‌کند.

--binary-upgrade

این گزینه برای استفاده توسط ابزارهای ارتقای درجا (in-place upgrade) طراحی شده است. استفاده از آن برای اهداف دیگر توصیه و پشتیبانی نمی‌شود. رفتار این گزینه ممکن است در نسخه‌های بعدی بدون اطلاع قبلی تغییر کند. --column-inserts
--attribute-inserts
داده‌ها را به صورت دستورهای INSERT با نام صریح ستون‌ها (INSERT INTO table (column, ...) VALUES ...) استخراج می‌کند. این کار بازیابی را بسیار کُند خواهد کرد؛ این گزینه عمدتاً برای ایجاد خروجی‌هایی مفید است که می‌توانند در پایگاه‌های داده غیر PostgreSQL بارگذاری شوند.

--disable-dollar-quoting

این گزینه استفاده از نقل‌قول دلاری (dollar quoting) را برای بدنه توابع غیرفعال کرده و آن‌ها را وادار به استفاده از قواعد نگارشی استاندارد رشته‌های SQL می‌کند.

--disable-triggers

این گزینه تنها هنگام ایجاد خروجی به همراه داده و بدون شِما (schema) کاربرد دارد. این گزینه به pg_dumpall دستور می‌دهد تا دستورهایی را برای غیرفعال کردن موقت تریگرها روی جدول‌های مقصد در حین بازیابی داده‌ها بگنجاند. اگر بررسی‌های یکپارچگی ارجاعی یا تریگرهای دیگری روی جدول‌ها دارید که نمی‌خواهید حین بازیابی داده‌ها اجرا شوند، از این گزینه استفاده کنید.

در حال حاضر، دستورهای صادرشده برای --disable-triggers باید توسط مدیر سیستم (superuser) اجرا شوند. بنابراین، باید نام یک superuser را با -S مشخص کنید، یا ترجیحاً دقت داشته باشید که اسکریپت حاصل به عنوان یک superuser اجرا شود.

--exclude-database=pattern

پایگاه‌های داده‌ای که نام آن‌ها با pattern مطابقت دارد را استخراج نمی‌کند. چندین الگو را می‌توان با نوشتن چندین گزینه --exclude-database مستثنی کرد. پارامتر pattern مطابق با همان قواعد مورد استفاده توسط دستورهای \d در psql تفسیر می‌شود (به Patterns مراجعه کنید)، بنابراین چندین پایگاه داده را نیز می‌توان با نوشتن نویسه‌های عام (wildcard) در الگو مستثنی کرد. هنگام استفاده از نویسه‌های عام، در صورت نیاز الگو را در نقل‌قول قرار دهید تا از بسط نویسه‌های عام توسط شل (shell) جلوگیری شود.

--extra-float-digits=ndigits

هنگام استخراج داده‌های ممیز شناور (floating-point)، به جای بیشینه دقت در دسترس، از مقدار مشخص‌شده extra_float_digits استفاده می‌کند. نسخه‌های پشتیبان روتین نباید از این گزینه استفاده کنند.

--filter=filename

نام فایلی را مشخص می‌کند که الگوهای پایگاه‌های داده مستثنی‌شده از خروجی از آن خوانده شوند. الگوها طبق همان قواعد --exclude-database تفسیر می‌شوند. برای خواندن از STDIN، از - به عنوان نام فایل استفاده کنید. گزینه --filter می‌تواند به همراه --exclude-database برای مستثنی کردن پایگاه‌های داده مشخص شود، و همچنین می‌تواند بیش از یک بار برای چندین فایل پالایه مشخص گردد.

این فایل در هر سطر یک الگوی پایگاه داده را با قالب زیر فهرست می‌کند:

exclude database PATTERN

سطرهایی که با # شروع می‌شوند توضیح (comment) تلقی شده و نادیده گرفته می‌شوند. توضیحات می‌توانند پس از سطر الگوی شیء نیز قرار گیرند. سطرهای خالی نیز نادیده گرفته می‌شوند. برای چگونگی انجام نقل‌قول در الگوها به Patterns مراجعه کنید.

--if-exists

از دستورهای DROP ... IF EXISTS برای حذف اشیاء در حالت --clean استفاده می‌کند. این کار خطاهای “does not exist” را که ممکن است در غیر این صورت گزارش شوند، فرونشانی می‌کند. این گزینه معتبر نیست مگر اینکه --clean نیز مشخص شده باشد.

--inserts

داده‌ها را به صورت دستورهای INSERT (به جای COPY) استخراج می‌کند. این کار بازیابی را بسیار کُند خواهد کرد؛ این گزینه عمدتاً برای ایجاد خروجی‌هایی مفید است که می‌توانند در پایگاه‌های داده غیر PostgreSQL بارگذاری شوند. توجه داشته باشید که اگر ترتیب ستون‌ها را تغییر داده باشید، ممکن است بازیابی به طور کلی با شکست مواجه شود. گزینه --column-inserts امن‌تر است، اگرچه حتی کُندتر خواهد بود.

--load-via-partition-root

هنگام استخراج داده‌های یک پارتیشن جدول، باعث می‌شود دستورهای COPY یا INSERT به جای خودِ پارتیشن، ریشه سلسله‌مراتب پارتیشن‌بندی شامل آن را هدف قرار دهند. این کار موجب می‌شود هنگام بارگذاری داده‌ها، پارتیشن مناسب برای هر سطر مجدداً تعیین شود. این ممکن است هنگام بازیابی داده‌ها روی سروری که در آن سطرها همیشه در همان پارتیشن‌های سرور اصلی قرار نمی‌گیرند، مفید باشد. برای مثال، این حالت ممکن است زمانی رخ دهد که ستون پارتیشن‌بندی از نوع text باشد و دو سیستم تعاریف متفاوتی از collation مورد استفاده برای مرتب‌سازی ستون پارتیشن‌بندی داشته باشند.

--lock-wait-timeout=timeout

در ابتدای استخراج اطلاعات، برای به دست آوردن قفل‌های اشتراکی جدول تا ابد منتظر نمی‌ماند. در عوض، در صورتی که نتواند در مدت زمان timeout مشخص‌شده یک جدول را قفل کند، با خطا متوقف می‌شود. این مهلت زمانی می‌تواند در هر یک از قالب‌های پذیرفته‌شده توسط SET statement_timeout مشخص شود.

--no-comments

دستورهای COMMENT را در خروجی قرار نمی‌دهد.

--no-data

داده‌ها را استخراج نمی‌کند.

--no-policies

سیاست‌های امنیت سطحی (row security policies) را استخراج نمی‌کند.

--no-publications

انتشارات (publications) را استخراج نمی‌کند.

--no-role-passwords

گذرواژه‌های نقش‌ها (roles) را استخراج نمی‌کند. هنگام بازیابی، نقش‌ها دارای گذرواژه تهی (null) خواهند بود و احراز هویت با گذرواژه همواره ناموفق خواهد بود تا زمانی که گذرواژه تنظیم شود. از آنجا که هنگام مشخص شدن این گزینه نیازی به مقادیر گذرواژه نیست، اطلاعات نقش از نمای کاتالوگ pg_roles به جای pg_authid خوانده می‌شود. بنابراین، این گزینه در صورتی که دسترسی به pg_authid توسط برخی سیاست‌های امنیتی محدود شده باشد نیز کاربردی است.

--no-schema

شِما (تعاریف داده) را استخراج نمی‌کند.

--no-security-labels

برچسب‌های امنیتی را استخراج نمی‌کند.

--no-statistics

آمارها را استخراج نمی‌کند. این حالت پیش‌فرض است.

--no-subscriptions

اشتراک‌ها (subscriptions) را استخراج نمی‌کند.

--no-sync

به طور پیش‌فرض، pg_dumpall منتظر می‌ماند تا تمام فایل‌ها به صورت ایمن روی دیسک نوشته شوند. این گزینه باعث می‌شود pg_dumpall بدون انتظار بازگردد، که سریع‌تر است اما به این معنی است که یک کرش بعدی سیستم‌عامل می‌تواند فایل خروجی را خراب کند. عموماً این گزینه برای آزمایش مفید است اما نباید هنگام استخراج داده‌ها از محیط‌های عملیاتی استفاده شود.

--no-table-access-method

دستورهایی برای انتخاب روش‌های دسترسی به جدول صادر نمی‌کند. با این گزینه، تمام اشیاء با هر روش دسترسی به جدولی که حین بازیابی پیش‌فرض باشد ایجاد خواهند شد.

--no-tablespaces

دستورهایی برای ایجاد tablespaceها یا انتخاب tablespaceها برای اشیاء صادر نمی‌کند. با این گزینه، تمام اشیاء در هر tablespaceای که حین بازیابی پیش‌فرض باشد ایجاد خواهند شد.

--no-toast-compression

دستورهایی برای تنظیم روش‌های فشرده‌سازی TOAST صادر نمی‌کند. با این گزینه، تمام ستون‌ها با تنظیمات فشرده‌سازی پیش‌فرض بازیابی خواهند شد.

--no-unlogged-table-data

محتویات جدول‌های unlogged را استخراج نمی‌کند. این گزینه تاثیری بر استخراج یا عدم استخراج تعاریف جدول (شِما) ندارد؛ بلکه فقط از استخراج داده‌های جدول جلوگیری می‌کند. --on-conflict-do-nothing
افزودن عبارت ON CONFLICT DO NOTHING به دستورهای INSERT. این گزینه تنها در صورتی معتبر است که --inserts یا --column-inserts نیز مشخص شده باشد.

--quote-all-identifiers

اجبار به قرار دادن تمام شناسه‌ها درون نقل‌قول (کوتیشن). استفاده از این گزینه زمانی توصیه می‌شود که استخراج نسخه پشتیبان از سروری انجام می‌شود که نسخه اصلی (major version) PostgreSQL آن با نسخه pg_dumpall متفاوت است، یا زمانی که خروجی قرار است در سروری با نسخه اصلی متفاوتی بارگذاری شود. به‌طور پیش‌فرض، pg_dumpall فقط شناسه‌هایی را درون نقل‌قول قرار می‌دهد که در نسخه اصلی خودش جزو کلمات رزروشده هستند. این مسئله گاهی هنگام تعامل با سرورهایی از نسخه‌های دیگر که ممکن است مجموعه کلمات رزروشده آن‌ها اندکی تفاوت داشته باشد، باعث مشکلات سازگاری می‌شود. استفاده از --quote-all-identifiers از چنین مشکلاتی جلوگیری می‌کند، هرچند به بهای خوانایی دشوارتر اسکریپت خروجی تمام می‌شود.

--restrict-key=restrict_key

استفاده از رشته ارائه‌شده به عنوان کلید \restrict در psql برای خروجی دامپ. اگر هیچ کلید محدودیتی مشخص نشود، pg_dumpall در صورت نیاز یک کلید تصادفی ایجاد خواهد کرد. کلیدها فقط می‌توانند شامل نویسه‌های الفبایی-عددی باشند.

این گزینه عمدتاً برای اهداف آزمایشی و سایر سناریوهایی که نیازمند خروجی تکرارپذیر هستند (مانند مقایسه فایل‌های دامپ) در نظر گرفته شده است. استفاده از آن برای مصارف عمومی توصیه نمی‌شود، زیرا یک سرور مخرب با داشتن آگاهی قبلی از کلید ممکن است بتواند کد دلخواهی را تزریق کند که روی ماشینی که psql را با خروجی دامپ اجرا می‌کند، اجرا شود.

--rows-per-insert=nrows

استخراج داده‌ها به صورت دستورهای INSERT (به جای COPY). این گزینه حداکثر تعداد ردیف‌ها را در هر دستور INSERT کنترل می‌کند. مقدار مشخص‌شده باید عددی بزرگ‌تر از صفر باشد. هرگونه خطا در حین بازیابی، تنها باعث از دست رفتن ردیف‌هایی می‌شود که بخشی از دستور مشکل‌دار INSERT بوده‌اند، نه کل محتویات جدول.

--statistics

استخراج آمار بهینه‌ساز (optimizer statistics).

--statistics-only

تنها استخراج آمار، نه طرح‌واره (تعاریف داده) یا خود داده‌ها. آمار بهینه‌ساز برای جدول‌ها، نماهای محقق‌شده (materialized views)، جدول‌های خارجی و نمایه‌ها استخراج می‌شوند.

--sequence-data

گنجاندن داده‌های دنباله (sequence) در دامپ خروجی. این رفتار پیش‌فرض است مگر آنکه گزینه‌های --no-data، --schema-only یا --statistics-only مشخص شده باشند.

--use-set-session-authorization

خروجی دادن دستورهای استاندارد SQL شامل SET SESSION AUTHORIZATION به جای دستورهای ALTER OWNER برای تعیین مالکیت اشیاء. این امر دامپ را با استانداردها سازگارتر می‌کند، اما بسته به تاریخچه اشیاء موجود در دامپ، ممکن است بازیابی به‌درستی صورت نگیرد.

-?
--help

نمایش راهنما درباره آرگومان‌های خط فرمان pg_dumpall و خروج.

گزینه‌های خط فرمان زیر پارامترهای اتصال به پایگاه داده را کنترل می‌کنند.

-d connstr
--dbname=connstr

پارامترهای مورد استفاده برای اتصال به سرور را در قالب یک رشته اتصال (connection string) مشخص می‌کند؛ این پارامترها بر هر گزینه خط فرمان دیگری که دارای تداخل باشد اولویت خواهند داشت.

این گزینه برای سازگاری با سایر برنامه‌های کلاینت، --dbname نامیده شده است، اما از آنجا که pg_dumpall باید به چندین پایگاه داده متصل شود، نام پایگاه داده موجود در رشته اتصال نادیده گرفته خواهد شد. از گزینه -l برای تعیین نام پایگاه داده مورد استفاده در اتصال اولیه استفاده کنید؛ اتصالی که اشیاء سراسری را استخراج کرده و مشخص می‌کند چه پایگاه‌های داده دیگری باید استخراج شوند.

-h host
--host=host

نام میزبان ماشینی را که سرور پایگاه داده روی آن در حال اجرا است مشخص می‌کند. اگر این مقدار با یک اسلش آغاز شود، به عنوان دایرکتوری سوکت دامنه یونیکس (Unix domain socket) استفاده خواهد شد. مقدار پیش‌فرض از متغیر محیطی PGHOST (در صورت تنظیم بودن) گرفته می‌شود، در غیر این صورت برای برقراری اتصال از طریق سوکت دامنه یونیکس تلاش خواهد شد.

-l dbname
--database=dbname

نام پایگاه داده‌ای را برای اتصال اولیه جهت استخراج اشیاء سراسری و تشخیص اینکه چه پایگاه‌های داده دیگری باید استخراج شوند مشخص می‌کند. در صورت عدم تعیین، پایگاه داده postgres مورد استفاده قرار می‌گیرد و اگر آن نیز وجود نداشته باشد، از template1 استفاده خواهد شد.

-p port
--port=port

پورت TCP یا پسوند فایل سوکت دامنه یونیکس محلی را که سرور روی آن منتظر دریافت اتصال است مشخص می‌کند. مقدار پیش‌فرض از متغیر محیطی PGPORT (در صورت تنظیم بودن) یا مقدار پیش‌فرض زمان کامپایل گرفته می‌شود.

-U username
--username=username

نام کاربری برای اتصال.

-w
--no-password

هرگز درخواست گذرواژه نمایش داده نشود. اگر سرور نیازمند احراز هویت با گذرواژه باشد و گذرواژه از راه‌های دیگری مانند فایل .pgpass در دسترس نباشد، تلاش برای برقراری اتصال ناموفق خواهد بود. این گزینه در کارهای دسته‌ای (batch jobs) و اسکریپت‌هایی که هیچ کاربری برای وارد کردن گذرواژه حضور ندارد، می‌تواند مفید باشد.

-W
--password

اجبار pg_dumpall به درخواست گذرواژه پیش از اتصال به یک پایگاه داده.

این گزینه هرگز ضروری نیست، چرا که اگر سرور احراز هویت با گذرواژه را الزام کند، pg_dumpall به‌طور خودکار درخواست گذرواژه خواهد داد. با این حال، pg_dumpall یک تلاش برای اتصال را فقط برای پی بردن به اینکه سرور گذرواژه می‌خواهد تلف خواهد کرد. در برخی موارد، استفاده از -W برای جلوگیری از این تلاش اضافی اتصال ارزشش را دارد.

توجه داشته باشید که درخواست گذرواژه برای هر پایگاه داده‌ای که قرار است استخراج شود دوباره تکرار خواهد شد. معمولاً تنظیم یک فایل ~/.pgpass بهتر از اتکا به وارد کردن دستی گذرواژه است.

--role=rolename

نام نقشی را که باید برای ایجاد دامپ استفاده شود مشخص می‌کند. این گزینه باعث می‌شود pg_dumpall پس از اتصال به پایگاه داده، دستور SET ROLE rolename را صادر کند. این ویژگی زمانی مفید است که کاربر احراز هویت شده (مشخص‌شده توسط -U) فاقد اختیارات لازم برای pg_dumpall است، اما می‌تواند به نقشی با اختیارات مورد نیاز تغییر وضعیت دهد. در برخی سیستم‌ها سیاستی مبنی بر عدم ورود مستقیم به عنوان مدیر سیستم (superuser) وجود دارد و استفاده از این گزینه امکان تهیه نسخه پشتیبان را بدون نقض این سیاست فراهم می‌کند.

PGHOST
PGOPTIONS
PGPORT
PGUSER

پارامترهای اتصال پیش‌فرض

PG_COLOR

مشخص می‌کند که آیا در پیام‌های عیب‌یابی از رنگ استفاده شود یا خیر. مقادیر ممکن عبارتند از always، auto و never.

این ابزار نیز، مانند بیشتر ابزارهای دیگر PostgreSQL، از متغیرهای محیطی پشتیبانی‌شده توسط libpq استفاده می‌کند (بخش 32.15 را ببینید).

از آنجا که pg_dumpall به صورت داخلی pg_dump را فراخوانی می‌کند، برخی پیام‌های عیب‌یابی به pg_dump ارجاع خواهند داد.

گزینهٔ --clean می‌تواند حتی زمانی که قصد دارید اسکریپت پشتیبان را در یک کلاستر جدید بازیابی کنید نیز مفید باشد. استفاده از --clean به اسکریپت اجازه می‌دهد پایگاه‌های دادهٔ توکار postgres و template1 را حذف و دوباره ایجاد کند، که تضمین می‌کند آن پایگاه‌های داده همان ویژگی‌هایی (مانند locale و encoding) را که در کلاستر مبدأ داشتند حفظ خواهند کرد. بدون این گزینه، آن پایگاه‌های داده ویژگی‌های سطح پایگاه دادهٔ موجود و همچنین محتویات از پیش موجود خود را حفظ خواهند کرد.

هنگامی که --statistics مشخص شود، pg_dumpall بیشتر آمارهای بهینه‌ساز را در فایل پشتیبان حاصل خواهد گنجاند. این شامل همهٔ آمارها نمی‌شود، مانند آمارهایی که صراحتاً با CREATE STATISTICS (CREATE_STATISTICS(7)) ایجاد شده‌اند، آمارهای سفارشی اضافه‌شده توسط یک افزونه، یا آمارهای جمع‌آوری‌شده توسط سامانهٔ آمار تجمعی. بنابراین، ممکن است برای اطمینان از عملکرد بهینه، همچنان اجرای ANALYZE روی هر پایگاه داده پس از بازیابی از یک فایل پشتیبان مفید باشد. همچنین می‌توانید برای تحلیل همهٔ پایگاه‌های داده، vacuumdb -a -z را اجرا کنید.

نباید انتظار داشت که اسکریپت پشتیبان کاملاً بدون خطا اجرا شود. به‌ویژه، از آنجا که اسکریپت برای هر نقش موجود در کلاستر مبدأ دستور CREATE ROLE را صادر می‌کند، حتماً با خطای “role already exists” برای کاربر ارشد راه‌انداز (bootstrap superuser) مواجه خواهد شد، مگر اینکه کلاستر مقصد با نام متفاوتی برای کاربر ارشد راه‌انداز مقداردهی اولیه شده باشد. این خطا بی‌ضرر است و باید نادیده گرفته شود. استفاده از گزینهٔ --clean احتمالاً پیام‌های خطای بی‌ضرر دیگری دربارهٔ اشیاء ناموجود تولید می‌کند، اگرچه می‌توانید با افزودن --if-exists آن‌ها را به حداقل برسانید.

دستور pg_dumpall نیازمند این است که تمام دایرکتوری‌های tablespace مورد نیاز پیش از بازیابی وجود داشته باشند؛ در غیر این صورت، ایجاد پایگاه داده برای پایگاه‌های داده در مکان‌های غیرپیش‌فرض با شکست مواجه خواهد شد.

به‌طور کلی توصیه می‌شود هنگام بازیابی یک پایگاه داده از اسکریپت pg_dumpall، از گزینهٔ -X (--no-psqlrc) استفاده کنید تا از یک فرایند بازیابی بی‌نقص اطمینان حاصل شده و از تداخل‌های احتمالی با پیکربندی‌های غیرپیش‌فرض psql جلوگیری شود. علاوه بر این، از آنجا که ممکن است اسکریپت pg_dumpall شامل فرادستورهای psql باشد، ممکن است با کلاینت‌هایی به جز psql ناسازگار باشد.

برای پشتیبان‌گیری از تمام پایگاه‌های داده:

$ pg_dumpall > db.out

برای بازیابی پایگاه(های) داده از این فایل، می‌توانید استفاده کنید از:

$ psql -X -f db.out -d postgres

در اینجا اهمیتی ندارد که به کدام پایگاه داده متصل می‌شوید، زیرا فایل اسکریپت ایجادشده توسط pg_dumpall شامل دستورات مناسب برای ساخت و اتصال به پایگاه‌های دادهٔ ذخیره‌شده خواهد بود. یک استثنا این است که اگر --clean را مشخص کرده باشید، در ابتدا باید به پایگاه دادهٔ postgres متصل شوید؛ زیرا اسکریپت بلافاصله تلاش خواهد کرد سایر پایگاه‌های داده را حذف کند، و این عمل برای پایگاه داده‌ای که هم‌اکنون به آن متصل هستید ناموفق خواهد بود.

برای جزئیات مربوط به شرایط خطای احتمالی، pg_dump(1) را بررسی کنید.

2026 PostgreSQL 18.6