| PG_DUMP(1) | PostgreSQL 18.6 Documentation | PG_DUMP(1) |
نام (NAME)
pg_dump - برونبری یک پایگاه داده PostgreSQL در قالب اسکریپت SQL یا فرمتهای دیگر
خلاصه دستور (SYNOPSIS)
pg_dump [connection-option...] [option...] [dbname]
توضیحات (DESCRIPTION)
pg_dump ابزاری برای برونبری یک پایگاه داده PostgreSQL است. این ابزار حتی در صورت استفاده همزمان از پایگاه داده، خروجیهای سازگار و یکدستی ایجاد میکند. pg_dump مانع دسترسی سایر کاربران به پایگاه داده نمیشود (نه خوانندگان و نه نویسندگان). با این حال، توجه داشته باشید که به جز در موارد ساده، pg_dump عموماً انتخاب مناسبی برای تهیه منظم نسخههای پشتیبان از پایگاههای داده عملیاتی (production) نیست. برای توضیحات بیشتر به Chapter 25 مراجعه کنید.
pg_dump تنها از یک پایگاه داده نسخه پشتیبان تهیه میکند. برای برونبری کل یک کلاستر، یا برونبری اشیاء سراسری (global) که میان تمام پایگاههای داده یک کلاستر مشترک هستند (مانند نقشها و tablespaceها)، از pg_dumpall(1) استفاده کنید.
خروجیها را میتوان در قالب فایل اسکریپت یا فایلهای بایگانی (archive) ذخیره کرد. نسخههای اسکریپتی، فایلهای متنی سادهای (plain-text) هستند که شامل دستورات SQL لازم برای بازسازی پایگاه داده به وضعیتی که در زمان ذخیرهسازی داشته است میباشند. برای بازیابی از چنین اسکریپتی، آن را به psql(1) ارسال کنید. فایلهای اسکریپت را میتوان برای بازسازی پایگاه داده حتی روی ماشینهای دیگر و با معماریهای متفاوت به کار گرفت؛ و با اعمال برخی تغییرات، حتی روی سایر سیستمهای پایگاه داده مبتنی بر SQL قابل استفاده هستند.
فرمتهای جایگزین فایل بایگانی باید به همراه pg_restore(1) برای بازسازی پایگاه داده استفاده شوند. آنها به pg_restore اجازه میدهند تا در مورد آنچه بازیابی میشود گزینشی عمل کند، یا حتی ترتیب بازیابی آیتمها را پیش از اجرا تغییر دهد. فرمتهای فایل بایگانی بهگونهای طراحی شدهاند که بین معماریهای مختلف سازگار و قابلحمل باشند.
هنگام استفاده با یکی از فرمتهای فایل بایگانی و ترکیب با pg_restore، ابزار pg_dump یک سازوکار بایگانی و انتقال منعطف را فراهم میآورد. pg_dump میتواند برای برونبری یک پایگاه داده کامل استفاده شود، سپس pg_restore میتواند برای بررسی بایگانی و/یا انتخاب اینکه کدام بخشهای پایگاه داده باید بازیابی شوند مورد استفاده قرار گیرد. منعطفترین فرمتهای فایل خروجی، فرمت “custom” (-Fc) و فرمت “directory” (-Fd) هستند. آنها امکان انتخاب و تغییر ترتیب تمام آیتمهای بایگانیشده را فراهم میسازند، از بازیابی موازی پشتیبانی میکنند و بهطور پیشفرض فشرده هستند. فرمت “directory” تنها فرمتی است که از برونبری موازی (parallel dumps) پشتیبانی میکند.
هنگام اجرای pg_dump، باید خروجی را برای هرگونه هشدار (چاپشده در خطای استاندارد) بررسی کرد، بهویژه با در نظر گرفتن محدودیتهای ذکر شده در زیر.
هشدار
بازیابی یک نسخه پشتیبان باعث میشود مقصد، کدهای دلخواه انتخابی مدیران سیستم (superusers) مبدأ را اجرا کند. برونبریهای جزئی و بازیابیهای جزئی این موضوع را محدود نمیکنند. اگر مدیران سیستم (superusers) مبدأ مورد اعتماد نباشند، دستورات SQL استخراجشده باید پیش از بازیابی بازبینی شوند. نسخههای پشتیبان غیرمتنی را میتوان با استفاده از گزینه --file در pg_restore بررسی کرد. توجه داشته باشید کلاینتی که dump و restore را اجرا میکند نیازی به اعتماد به مدیران سیستم (superusers) مبدأ یا مقصد ندارد.
گزینههای خط فرمان زیر محتوا و قالب خروجی را کنترل میکنند.
dbname
-a
--data-only
این گزینه مشابه، اما به دلایل تاریخی نه دقیقاً یکسان با، مشخص کردن --section=data است.
-b
--large-objects
--blobs
(منسوخشده)
-B
--no-large-objects
--no-blobs
(منسوخشده)
هنگامی که هر دو گزینهٔ -b و -B داده شوند، رفتار برنامه خروجی دادن اشیاء بزرگ است، در صورتی که دادهها در حال رونوشتگیری باشند؛ به مستندات -b مراجعه کنید.
-c
--clean
این گزینه هنگام تولید یک فایل خروجی آرشیو (غیرمتنی) نادیده گرفته میشود. برای قالبهای آرشیو، میتوانید این گزینه را هنگام فراخوانی pg_restore مشخص کنید.
-C
--create
با --create، خروجی همچنین شامل یادداشت (comment) پایگاه داده در صورت وجود، و هرگونه تنظیمات متغیرهای پیکربندی مختص به این پایگاه داده خواهد بود؛ یعنی تمام دستورهای ALTER DATABASE ... SET ... و ALTER ROLE ... IN DATABASE ... SET ... که به این پایگاه داده اشاره دارند. مجوزهای دسترسی برای خود پایگاه داده نیز استخراج میشوند، مگر اینکه --no-acl مشخص شده باشد.
این گزینه هنگام تولید فایل خروجی آرشیو (غیرمتنی) نادیده گرفته میشود. برای قالبهای آرشیو، میتوانید این گزینه را هنگام فراخوانی pg_restore مشخص کنید.
-e pattern
--extension=pattern
هر رابطهٔ پیکربندی ثبتشده توسط pg_extension_config_dump، اگر افزونهٔ آن توسط --extension مشخص شده باشد، در رونوشت گنجانده میشود.
نکته
هنگامی که -e مشخص میشود، pg_dump هیچ تلاشی برای استخراج سایر اشیاء پایگاه داده که افزونه(های) انتخابشده ممکن است به آنها وابسته باشند نمیکند. از این رو، هیچ تضمینی وجود ندارد که نتایج یک رونوشتِ افزونه-خاص بتواند به تنهایی با موفقیت در یک پایگاه دادهٔ پاک بازیابی شود.
-E encoding
--encoding=encoding
-f file
--file=file
-F format
--format=format
p
plain
c
custom
d
directory
tar
-j njobs
--jobs=njobs
دستور pg_dump به تعداد njobs + 1 اتصال به پایگاه داده باز خواهد کرد، بنابراین اطمینان حاصل کنید که تنظیم max_connections شما به اندازه کافی بالا باشد تا بتواند پاسخگوی تمام اتصالات باشد.
درخواست قفلهای انحصاری بر روی اشیاء پایگاه داده هنگام اجرای یک dump موازی میتواند باعث شکست dump شود. دلیل آن این است که فرآیند راهبر (leader) در pg_dump قفلهای اشتراکی (ACCESS SHARE) را بر روی اشیایی که فرآیندهای کارگر (worker) قرار است بعداً از آنها dump بگیرند درخواست میکند تا مطمئن شود هیچکس آنها را در حین اجرای dump حذف نکرده یا از بین نمیبرد. اگر سپس یک کلاینت دیگر درخواست قفل انحصاری روی یک جدول داشته باشد، آن قفل اعطا نخواهد شد اما در صف انتظار برای آزادسازی قفل اشتراکی فرآیند راهبر منتظر خواهد ماند. در نتیجه، به هیچ دسترسی دیگری به جدول نیز اجازه داده نخواهد شد و پس از درخواست قفل انحصاری در صف قرار میگیرد. این شامل فرآیند کارگری که تلاش میکند از جدول dump بگیرد نیز میشود. بدون هیچ تدبیری، این یک وضعیت کلاسیک بنبست (deadlock) خواهد بود. برای تشخیص این تداخل، فرآیند کارگر pg_dump با استفاده از گزینه NOWAIT درخواست یک قفل اشتراکی دیگر میدهد. اگر به فرآیند کارگر این قفل اشتراکی داده نشود، شخص دیگری باید در این میان قفل انحصاری درخواست کرده باشد و هیچ راهی برای ادامه dump وجود ندارد، بنابراین pg_dump چارهای جز لغو عملیات dump ندارد.
برای انجام یک dump موازی، سرور پایگاه داده باید از نماهای لحظهای همگامسازیشده (synchronized snapshots) پشتیبانی کند؛ قابلیتی که در PostgreSQL نسخه 9.2 برای سرورهای اصلی (primary) و نسخه 10 برای سرورهای آمادهباش (standby) معرفی شد. با این ویژگی، کلاینتهای پایگاه داده میتوانند اطمینان حاصل کنند که مجموعه دادههای یکسانی را میبینند، حتی اگر از اتصالات متفاوتی استفاده کنند. pg_dump -j از چندین اتصال پایگاه داده استفاده میکند؛ یک بار با فرآیند راهبر و یک بار دیگر برای هر کارگر (worker job) به پایگاه داده متصل میشود. بدون ویژگی نماهای لحظهای همگامسازیشده، تضمین نمیشود که کارهای کارگر مختلف دادههای یکسانی را در هر اتصال مشاهده کنند، که میتواند منجر به یک پشتیبانگیری ناسازگار شود.
-n pattern
--schema=pattern
نکته
هنگامی که -n مشخص میشود، pg_dump هیچ تلاشی برای گرفتن dump از سایر اشیاء پایگاه داده که اسکیما(های) انتخابشده ممکن است به آنها وابسته باشند انجام نمیدهد. بنابراین، تضمینی وجود ندارد که نتایج یک dump مربوط به اسکیمایی خاص بتواند به تنهایی در یک پایگاه داده تمیز با موفقیت بازیابی شود.
نکته
اشیای غیر اسکیما مانند large objects هنگامی که -n مشخص شده باشد dump نمیشوند. با استفاده از سوئیچ --large-objects میتوانید large objects را دوباره به dump اضافه کنید.
-N pattern
--exclude-schema=pattern
هنگامی که هر دوی -n و -N داده شوند، رفتار بدین صورت است که فقط از اسکیمایی dump گرفته میشود که حداقل با یکی از سوئیچهای -n مطابقت داشته باشد و با هیچیک از سوئیچهای -N مطابقت نداشته باشد. اگر -N بدون -n بیاید، در آن صورت اسکیمای منطبق بر -N از آنچه که در حالت عادی یک dump معمولی است، مستثنی میشوند.
-O
--no-owner
این گزینه هنگام صدور یک فایل خروجی بایگانی (غیر متنی) نادیده گرفته میشود. برای قالبهای بایگانی، میتوانید این گزینه را هنگام فراخوانی pg_restore تعیین کنید.
-R
--no-reconnect
-s
--schema-only
این گزینه نمیتواند همراه با --data-only یا --statistics-only استفاده شود. این گزینه مشابه تعیین --section=pre-data --section=post-data است، هرچند بنا به دلایل تاریخی دقیقاً با آن یکسان نیست.
(این گزینه را با گزینه --schema که از واژه “schema” به معنایی متفاوت استفاده میکند اشتباه نگیرید.)
برای مستثنی کردن دادههای جدول تنها برای زیرمجموعهای از جداول در پایگاه داده، به --exclude-table-data مراجعه کنید.
-S username
--superuser=username
-t pattern
--table=pattern
سوئیچهای -n و -N هنگام استفاده از -t هیچ تاثیری ندارند، زیرا جدولهای انتخابشده با -t صرفنظر از آن سوئیچها استخراج خواهند شد و اشیاء غیرجدولی استخراج نخواهند شد.
نکته
هنگامی که -t مشخص میشود، pg_dump هیچ تلاشی برای استخراج اشیاء پایگاه داده دیگری که جدول(های) انتخابشده ممکن است به آنها وابسته باشند نمیکند. بنابراین، هیچ تضمینی وجود ندارد که نتایج یک استخراج مختص به جدول بتواند به تنهایی در یک پایگاه داده تمیز با موفقیت بازیابی شود.
-T pattern
--exclude-table=pattern
هنگامی که هر دوی -t و -T داده شوند، رفتار بدین صورت است که فقط جدولهایی استخراج میشوند که دستکم با یک سوئیچ -t همخوانی داشته باشند اما با هیچکدام از سوئیچهای -T منطبق نباشند. اگر -T بدون -t ارائه شود، جدولهای منطبق با -T از خروجی که در غیر این صورت یک استخراج عادی میبود، مستثنی میشوند.
-v
--verbose
-V
--version
-x
--no-privileges
--no-acl
-Z level
-Z method[:detail]
--compress=level
--compress=method[:detail]
اگر هیچ سطح فشردهسازی مشخص نشود، سطح فشردهسازی پیشفرض استفاده خواهد شد. اگر تنها یک سطح بدون ذکر الگوریتم مشخص شود، در صورتی که سطح بزرگتر از 0 باشد از فشردهسازی gzip استفاده میشود، و در صورتی که سطح 0 باشد هیچ فشردهسازی انجام نخواهد شد.
برای قالبهای آرشیو سفارشی (custom) و دایرکتوری، این گزینه فشردهسازی قطعات دادههای جداگانه هر جدول را تعیین میکند و حالت پیشفرض، فشردهسازی با استفاده از gzip در یک سطح متوسط است. برای خروجی متن ساده، تنظیم یک سطح فشردهسازی غیرصفر باعث میشود کل فایل خروجی فشرده شود، درست مانند اینکه از طریق gzip، lz4 یا zstd هدایت شده باشد؛ اما حالت پیشفرض فشرده نکردن است. با فشردهسازی zstd، حالت long ممکن است نسبت فشردهسازی را به بهای افزایش مصرف حافظه بهبود بخشد.
قالب آرشیو tar در حال حاضر بههیچوجه از فشردهسازی پشتیبانی نمیکند.
--binary-upgrade
--column-inserts
--attribute-inserts
--disable-dollar-quoting
--disable-triggers
در حال حاضر، دستورهای ایجادشده برای --disable-triggers باید توسط مدیر سیستم (superuser) اجرا شوند. بنابراین، باید نام یک مدیر سیستم را با -S مشخص کنید، یا ترجیحاً دقت کنید که اسکریپت حاصل به عنوان مدیر سیستم (superuser) اجرا شود.
این گزینه هنگام تولید یک فایل خروجی آرشیو (غیرمتنی) نادیده گرفته میشود. برای قالبهای آرشیو، میتوانید این گزینه را هنگام فراخوانی pg_restore مشخص کنید.
--enable-row-security
توجه داشته باشید در صورتی که هماکنون از این گزینه استفاده میکنید، احتمالاً میخواهید استخراج در قالب INSERT باشد، زیرا دستور COPY FROM در زمان بازیابی از امنیت در سطح سطر پشتیبانی نمیکند. --exclude-extension=pattern
هنگامی که هر دو گزینهٔ -e و --exclude-extension داده شده باشند، رفتار به این صورت است که تنها افزونههایی تخلیه میشوند که حداقل با یکی از سوییچهای -e تطابق داشته و با هیچیک از سوییچهای --exclude-extension تطابقی نداشته باشند. اگر --exclude-extension بدون -e ارائه شود، افزونههای منطبق با --exclude-extension از آنچه در غیر این صورت یک تخلیهٔ عادی میبود، مستثنی میشوند.
--exclude-table-and-children=pattern
--exclude-table-data=pattern
برای مستثنی کردن دادههای تمام جدولهای پایگاه داده، به --schema-only یا --statistics-only مراجعه کنید.
--exclude-table-data-and-children=pattern
--extra-float-digits=ndigits
--filter=filename
این فایل در هر سطر یک الگوی شیء را با ساختار زیر فهرست میکند:
{ include | exclude } { extension | foreign_data | table | table_and_children | table_data | table_data_and_children | schema } PATTERN
کلمهٔ کلیدی اول مشخص میکند که آیا اشیای منطبق با الگو باید گنجانده شوند یا مستثنی گردند. کلمهٔ کلیدی دوم نوع شیء مورد پالایش با استفاده از الگو را مشخص میکند:
سطرهایی که با # شروع میشوند توضیح (کامنت) در نظر گرفته شده و نادیده گرفته میشوند. توضیحات میتوانند پس از یک سطر الگوی شیء نیز قرار گیرند. سطرهای خالی نیز نادیده گرفته میشوند. برای نحوهٔ نقلقولگذاری در الگوها بخش Patterns را ببینید.
فایلهای نمونه در زیر در بخش Examples فهرست شدهاند.
--if-exists
--include-foreign-data=foreignserver
نکته
استفاده از نویسههای عام در --include-foreign-data ممکن است منجر به دسترسی به سرورهای خارجی غیرمنتظره شود. همچنین، برای استفادهٔ امن از این گزینه، مطمئن شوید که سرور نامبرده مالک قابل اعتمادی داشته باشد.
نکته
هنگامی که --include-foreign-data مشخص شده باشد، pg_dump بررسی نمیکند که آیا جدول خارجی قابل نوشتن است یا خیر. بنابراین، هیچ تضمینی وجود ندارد که نتایج استخراج یک جدول خارجی با موفقیت بازیابی شود.
--inserts
--load-via-partition-root
--lock-wait-timeout=timeout
--no-comments
--no-data
--no-policies
--no-publications
--no-schema
--no-security-labels
--no-statistics
--no-subscriptions
--no-sync
این گزینه هنگام تولید یک فایل خروجی بایگانی (غیرمتنی) نادیده گرفته میشود. برای قالبهای بایگانی، میتوانید این گزینه را هنگام فراخوانی pg_restore مشخص کنید.
--no-tablespaces
این گزینه هنگام تولید یک فایل خروجی بایگانی (غیرمتنی) نادیده گرفته میشود. برای قالبهای بایگانی، میتوانید این گزینه را هنگام فراخوانی pg_restore مشخص کنید.
--no-toast-compression
--no-unlogged-table-data
--on-conflict-do-nothing
--quote-all-identifiers
--restrict-key=restrict_key
این گزینه عمدتاً برای اهداف آزمایشی و سایر سناریوهایی که نیاز به خروجی تکرارپذیر دارند (مانند مقایسه فایلهای dump) در نظر گرفته شده است. برای استفاده عمومی توصیه نمیشود، زیرا یک سرور مخرب با آگاهی قبلی از کلید ممکن است بتواند کدهای دلخواهی را تزریق کند که روی ماشینی که psql را با خروجی dump اجرا میکند، اجرا شوند.
--rows-per-insert=nrows
--section=sectionname
بخش data شامل دادههای واقعی جدول، محتویات اشیاء بزرگ (large-object)، مقادیر دنبالهها، و آمارهای مربوط به جدولها، نماهای مادیشده (materialized views) و جدولهای خارجی (foreign tables) است. موارد post-data شامل تعاریف اندیسها، تریگرها، قواعد (rules)، آمارهای مربوط به اندیسها، و قیدهایی غیر از قیدهای اعتبارسنجیشدهی check و not-null است. موارد pre-data شامل تمام موارد دیگر تعریف داده هستند.
--sequence-data
--serializable-deferrable
این گزینه برای dumpای که تنها برای بازیابی پس از بحران (disaster recovery) در نظر گرفته شده است، مزیتی ندارد. این گزینه میتواند برای dumpای مفید باشد که جهت بارگذاری یک کپی از پایگاهداده برای گزارشگیری یا سایر مقاصد تقسیم بار فقطخواندنی استفاده میشود، در حالی که پایگاهداده اصلی همچنان در حال بهروزرسانی است. بدون آن، dump ممکن است وضعیتی را منعکس کند که با هیچ اجرای سریالی از تراکنشهایی که در نهایت ثبت (commit) شدهاند سازگار نباشد. برای مثال، اگر از روشهای پردازش دستهای (batch processing) استفاده شود، ممکن است یک دسته بدون ظاهر شدن تمام موارد درون آن، به عنوان بستهشده در خروجی نمایش داده شود.
اگر هنگام شروع pg_dump هیچ تراکنش خواندن-نوشتنی فعالی وجود نداشته باشد، این گزینه هیچ تفاوتی ایجاد نخواهد کرد. اگر تراکنشهای خواندن-نوشتن فعال باشند، شروع dump ممکن است برای مدت نامعلومی به تعویق بیفتد. پس از شروع اجرا، کارایی با وجود این گزینه یا بدون آن یکسان خواهد بود.
--snapshot=snapshotname
این گزینه زمانی مفید است که نیاز به همگامسازی dump با یک شکاف تکثیر منطقی (logical replication slot، به فصل 47 مراجعه کنید) یا با یک نشست (session) همزمان وجود داشته باشد.
در حالت خروجی موازی (parallel dump)، بهجای گرفتن یک snapshot جدید، از نام snapshot تعریفشده توسط این گزینه استفاده میشود.
--statistics
--statistics-only
--strict-names
این گزینه تأثیری بر --exclude-extension، -N/--exclude-schema، -T/--exclude-table یا --exclude-table-data ندارد. عدم تطابق یک الگوی استثنا (exclude pattern) با هیچ شیئی، خطا محسوب نمیشود.
--sync-method=method
در Linux، میتوان بهجای آن از syncfs استفاده کرد تا از سیستمعامل خواسته شود کل سیستمفایلی را که شامل دایرکتوری بایگانی است همگامسازی کند. برای اطلاعات درباره نکاتی که باید هنگام استفاده از syncfs مد نظر داشت، به recovery_init_sync_method مراجعه کنید.
این گزینه در صورتی که --no-sync استفاده شود یا --format روی directory تنظیم نشده باشد، هیچ اثری ندارد.
--table-and-children=pattern
-?
--help
گزینههای خط فرمان زیر پارامترهای اتصال به پایگاهداده را کنترل میکنند.
-d dbname
--dbname=dbname
-h host
--host=host
-p port
--port=port
-U username
--username=username
-w
--no-password
-W
--password
این گزینه هرگز ضروری نیست، چرا که اگر سرور نیازمند احراز هویت با گذرواژه باشد، pg_dump بهطور خودکار اعلان گذرواژه را نمایش خواهد داد. با این حال، pg_dump یک تلاش برای اتصال را هدر خواهد داد تا متوجه شود سرور گذرواژه میخواهد. در برخی موارد برای جلوگیری از این تلاش اتصال اضافه، وارد کردن -W ارزشش را دارد.
--role=rolename
PGDATABASE
PGHOST
PGOPTIONS
PGPORT
PGUSER
PG_COLOR
این ابزار، مانند بیشتر ابزارهای دیگر PostgreSQL، از متغیرهای محیطی پشتیبانیشده توسط libpq نیز استفاده میکند (ببینید Section 32.15).
خطاها (DIAGNOSTICS)
pg_dump بهصورت درونی دستورهای SELECT را اجرا میکند. اگر در اجرای pg_dump مشکلی دارید، مطمئن شوید که میتوانید با استفاده از، مثلاً، psql(1) اطلاعات را از پایگاه داده واکشی کنید. همچنین، هرگونه تنظیمات اتصال پیشفرض و متغیرهای محیطی که توسط کتابخانهٔ فرانتاند libpq استفاده میشوند اعمال خواهند شد.
فعالیت پایگاه دادهٔ pg_dump معمولاً توسط سامانهٔ آمار تجمعی جمعآوری میشود. اگر این امر مطلوب نیست، میتوانید پارامتر track_counts را از طریق PGOPTIONS یا دستور ALTER USER روی مقدار false تنظیم کنید.
نکات (NOTES)
اگر کلاستر پایگاه دادهٔ شما هرگونه افزودهٔ محلی در پایگاه دادهٔ template1 دارد، دقت کنید که خروجی pg_dump را در یک پایگاه دادهٔ واقعاً خالی بازگردانی کنید؛ در غیر این صورت احتمالاً به دلیل تعاریف تکراری اشیاء اضافهشده با خطا مواجه خواهید شد. برای ساختن یک پایگاه دادهٔ خالی بدون هیچ افزودهٔ محلی، به جای template1 از template0 کپی بگیرید، برای مثال:
CREATE DATABASE foo WITH TEMPLATE template0;
هنگامی که یک dump بدون طرحواره (schema) انتخاب شده باشد و گزینهٔ --disable-triggers به کار رود، pg_dump دستوراتی را برای غیرفعال کردن تریگرها روی جدولهای کاربری پیش از درج دادهها، و سپس دستوراتی را برای فعالسازی مجدد آنها پس از درج دادهها صادر میکند. اگر فرایند بازگردانی در میانهٔ کار متوقف شود، ممکن است کاتالوگهای سیستم در وضعیتی نادرست رها شوند.
هنگامی که --statistics مشخص شده باشد، pg_dump بیشتر آمارهای بهینهساز را در فایل dump حاصل لحاظ خواهد کرد. این امر شامل همهٔ آمارها نمیشود، مانند آمارهایی که صراحتاً با CREATE STATISTICS (CREATE_STATISTICS(7)) ایجاد شدهاند، آمارهای سفارشی اضافهشده توسط یک افزونه، یا آمارهای جمعآوریشده توسط سامانهٔ آمار تجمعی. بنابراین، اجرای ANALYZE پس از بازگردانی از یک فایل dump ممکن است همچنان برای اطمینان از عملکرد بهینه سودمند باشد؛ برای اطلاعات بیشتر ببینید Section 24.1.3 و Section 24.1.6.
از آنجا که pg_dump برای انتقال دادهها به نسخههای جدیدتر PostgreSQL استفاده میشود، میتوان انتظار داشت که خروجی pg_dump در نسخههای سرور PostgreSQL جدیدتر از نسخهٔ خودِ pg_dump بارگذاری شود. همچنین pg_dump میتواند از سرورهای PostgreSQL قدیمیتر از نسخهٔ خودش dump تهیه کند. (در حال حاضر، سرورها تا نسخهٔ 9.2 پشتیبانی میشوند.) با این حال، pg_dump نمیتواند از سرورهای PostgreSQL جدیدتر از نسخهٔ اصلی (major version) خودش dump تهیه کند؛ این ابزار حتی اقدام به این کار را رد میکند تا ریسک ایجاد یک dump نامعتبر پیش نیاید. همچنین، تضمینی وجود ندارد که خروجی pg_dump بتواند در سروری با نسخهٔ اصلی قدیمیتر بارگذاری شود — حتی اگر dump از سروری با همان نسخه گرفته شده باشد. بارگذاری یک فایل dump در سرور قدیمیتر ممکن است نیازمند ویرایش دستی فایل dump برای حذف ساختارهای نحوی باشد که توسط سرور قدیمیتر درک نمیشوند. استفاده از گزینهٔ --quote-all-identifiers در موارد بیننسخهای توصیه میشود، چرا که میتواند از بروز مشکلات ناشی از تفاوت در فهرست واژههای رزروشده در نسخههای مختلف PostgreSQL جلوگیری کند.
هنگام گرفتن dump از اشتراکهای تکثیر منطقی (logical replication subscriptions)، دستور pg_dump فرمانهای CREATE SUBSCRIPTION را طوری تولید میکند که از گزینهٔ connect = false استفاده کنند تا بازگردانی اشتراک اتصالات از راه دور برای ایجاد یک replication slot یا کپی اولیهٔ جدول برقرار نکند. بدین ترتیب، فایل dump میتواند بدون نیاز به دسترسی شبکه به سرورهای راه دور بازگردانی شود. پس از آن، فعالسازی مجدد اشتراکها به روشی مناسب بر عهدهٔ کاربر خواهد بود. اگر میزبانهای مربوطه تغییر کرده باشند، ممکن است اطلاعات اتصال نیاز به تغییر داشته باشد. همچنین ممکن است خالی کردن (truncate) جدولهای مقصد پیش از آغاز یک کپی کامل جدید از جدول مناسب باشد. اگر کاربران قصد دارند دادههای اولیه را در حین نوسازی کپی کنند، باید slot را با two_phase = false بسازند. پس از همگامسازی اولیه، اگر اشتراک در اصل با گزینهٔ two_phase = true ایجاد شده باشد، گزینهٔ two_phase بهطور خودکار توسط مشترک (subscriber) فعال خواهد شد.
بهطور کلی توصیه میشود هنگام بازگردانی یک پایگاه داده از اسکریپت متنی سادهٔ pg_dump از گزینهٔ -X (--no-psqlrc) استفاده کنید تا از یک فرایند بازگردانی تمیز اطمینان حاصل شود و از تداخلهای احتمالی با پیکربندیهای غیرپیشفرض psql جلوگیری به عمل آید..SH "مثالها (EXAMPLES)"
برای استخراج پایگاه دادهای با نام mydb به یک فایل اسکریپت SQL:
$ pg_dump mydb > db.sql
برای بارگذاری مجدد چنین اسکریپتی در یک پایگاه داده (بهتازگی ایجادشده) با نام newdb:
$ psql -X -d newdb -f db.sql
برای استخراج یک پایگاه داده در یک فایل آرشیو با قالب سفارشی (custom-format):
$ pg_dump -Fc mydb > db.dump
برای استخراج یک پایگاه داده در یک آرشیو با قالب دایرکتوری (directory-format):
$ pg_dump -Fd mydb -f dumpdir
برای استخراج یک پایگاه داده در یک آرشیو با قالب دایرکتوری بهصورت موازی با ۵ وظیفهٔ کارگر (worker job):
$ pg_dump -Fd mydb -j 5 -f dumpdir
برای بارگذاری مجدد یک فایل آرشیو در یک پایگاه داده (بهتازگی ایجادشده) با نام newdb:
$ pg_restore -d newdb db.dump
برای بارگذاری مجدد یک فایل آرشیو در همان پایگاه دادهای که از آن استخراج شده است، با نادیده گرفتن و حذف محتویات فعلی آن پایگاه داده:
$ pg_restore -d postgres --clean --create db.dump
برای استخراج یک جدول مشخص با نام mytab:
$ pg_dump -t mytab mydb > db.sql
برای استخراج تمام جدولهایی در طرحوارهٔ (schema) detroit که نام آنها با emp شروع میشود، به استثنای جدول نامگذاریشده به employee_log:
$ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
برای استخراج تمام طرحوارههایی که نام آنها با east یا west شروع شده و به gsm ختم میشود، به استثنای هر طرحوارهای که نام آن شامل کلمهٔ test باشد:
$ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql
همان حالت، با استفاده از نمادگذاری عبارت باقاعده (regular expression) برای ادغام گزینهها:
$ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql
برای استخراج تمام اشیای پایگاه داده به استثنای جدولهایی که نام آنها با ts_ آغاز میشود:
$ pg_dump -T 'ts_*' mydb > db.sql
برای مشخص کردن نامی با حروف بزرگ (upper-case) یا ترکیبی از حروف کوچک و بزرگ (mixed-case) در -t و گزینههای مرتبط، باید نام را درون علامت نقلقول جفتی (double quote) قرار دهید؛ در غیر این صورت به حروف کوچک تبدیل خواهد شد (بخش الگوها (Patterns) را ببینید). اما علامتهای نقلقول جفتی برای پوسته (shell) کاراکتر خاص محسوب میشوند، بنابراین خود آنها نیز باید نقلقولبندی شوند. بنابراین، برای استخراج یک جدول منفرد با نامی مرکب از حروف کوچک و بزرگ، به چیزی شبیه به این نیاز خواهید داشت
$ pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql
برای استخراج تمام جدولهایی که نام آنها با mytable آغاز میشود، به استثنای جدول mytable2 یک فایل فیلتر به نام filter.txt را مانند زیر مشخص کنید:.sp
include table mytable* exclude table mytable2
$ pg_dump --filter=filter.txt mydb > db.sql
همچنین ببینید (SEE ALSO)
| 2026 | PostgreSQL 18.6 |