| PG_RECEIVEWAL(1) | PostgreSQL 18.6 Documentation | PG_RECEIVEWAL(1) |
نام (NAME)
pg_receivewal - دریافت جریانی لاگهای پیشنویس (write-ahead logs) از سرور PostgreSQL
خلاصه دستور (SYNOPSIS)
pg_receivewal [گزینه...]
توضیحات (DESCRIPTION)
دستور pg_receivewal برای دریافت جریانی لاگهای پیشنویس (write-ahead log) از یک کلاستر در حال اجرای PostgreSQL استفاده میشود. لاگ پیشنویس با استفاده از پروتکل رونوشتبرداری جریانی (streaming replication) فرستاده شده و در یک دایرکتوری محلی از فایلها ذخیره میشود. این دایرکتوری میتواند به عنوان مکان بایگانی برای انجام بازیابی نقطهای در زمان (بخش 25.3 را ببینید) به کار رود.
دستور pg_receivewal لاگهای پیشنویس را بهصورت بلادرنگ و همگام با تولید شدن در سرور بهطور جریانی دریافت میکند، و بر خلاف archive_command و archive_library منتظر کامل شدن سگمنتها نمیماند. به همین دلیل، هنگام استفاده از pg_receivewal نیازی به تنظیم archive_timeout نیست.
برخلاف دریافتکننده WAL در سرور آمادهبهکار (standby) در PostgreSQL، ابزار pg_receivewal بهطور پیشفرض دادههای WAL را تنها زمانی روی دیسک مینشاند (flush میکند) که یک فایل WAL بسته شود. برای نوشتن دادههای WAL بر روی دیسک بهصورت بلادرنگ، گزینه --synchronous باید مشخص شود. از آنجا که pg_receivewal دادههای WAL را اعمال (apply) نمیکند، نباید اجازه دهید در شرایطی که synchronous_commit برابر با remote_apply است، به یک سرور آمادهبهکار همگام (synchronous standby) تبدیل شود. اگر چنین شود، مانند یک سرور آمادهبهکار به نظر خواهد رسید که هرگز به پایگاه داده اصلی نمیرسد و باعث مسدود شدن تأیید تراکنشها (commit) خواهد شد. برای اجتناب از این وضعیت، باید یا مقدار مناسبی را برای synchronous_standby_names پیکربندی کنید، یا یک application_name برای pg_receivewal مشخص کنید که با آن مطابقت نداشته باشد، یا مقدار synchronous_commit را به چیزی غیر از remote_apply تغییر دهید.
لاگهای پیشنویس از طریق یک اتصال معمولی PostgreSQL و با استفاده از پروتکل رونوشتبرداری (replication) به صورت جریانی منتقل میشوند. این اتصال باید توسط کاربری دارای مجوزهای REPLICATION (بخش 21.2 را ببینید) یا مدیر سیستم (superuser) برقرار شود و فایل pg_hba.conf نیز باید اجازه اتصال رونوشتبرداری را صادر کند. همچنین سرور باید طوری پیکربندی شده باشد که مقدار max_wal_senders به اندازه کافی بالا تنظیم شود تا حداقل یک نشست (session) برای این جریان در دسترس باقی بماند.
نقطه آغاز جریان لاگهای پیشنویس در زمان راهاندازی pg_receivewal محاسبه میشود:
اگر اتصال با یک خطای غیرمرگبار قطع شود یا در ابتدا برقرار نگردد، pg_receivewal تلاش برای اتصال را تا بینهایت تکرار میکند و جریان را در اسرع وقت مجدداً برقرار میسازد. برای جلوگیری از این رفتار، از پارامتر -n استفاده کنید.
در صورت عدم وقوع خطاهای مرگبار، pg_receivewal تا زمانی که با سیگنال SIGINT (Control+C) یا SIGTERM متوقف نشود، به اجرای خود ادامه خواهد داد..SH "گزینهها (OPTIONS)"
-D directory
--directory=directory
این پارامتر الزامی است.
-E lsn
--endpos=lsn
اگر رکوردی با LSN دقیقاً برابر با lsn وجود داشته باشد، آن رکورد پردازش خواهد شد.
--if-not-exists
-n
--no-loop
--no-sync
این گزینه با --synchronous ناسازگار است.
-s interval
--status-interval=interval
-S slotname
--slot=slotname
هنگامی که کلاینت همانندسازی pg_receivewal روی سرور به عنوان یک standby همگام پیکربندی شده باشد، استفاده از یک اسلات همانندسازی موقعیت تخلیه را به سرور گزارش میدهد، اما تنها زمانی که یک فایل WAL بسته شود. بنابراین، آن پیکربندی باعث میشود که تراکنشها روی سرور اصلی برای مدت طولانی منتظر بمانند و عملاً کارایی رضایتبخشی نداشته باشند. علاوه بر این، گزینه --synchronous (زیر را ببینید) باید مشخص شود تا این سازوکار به درستی عمل کند.
--synchronous
اگر کلاینت همانندسازی pg_receivewal روی سرور به عنوان یک standby همگام پیکربندی شده باشد، این گزینه باید مشخص شود تا اطمینان حاصل گردد بازخورد بهموقع به سرور فرستاده میشود.
-v
--verbose
-Z level
-Z method[:detail]
--compress=level
--compress=method[:detail]
روش فشردهسازی میتواند روی gzip، lz4 (اگر PostgreSQL با --with-lz4 کامپایل شده باشد) یا none برای عدم فشردهسازی تنظیم شود. میتوان بهصورت اختیاری یک رشته جزئیات فشردهسازی را مشخص کرد. اگر رشته جزئیات یک عدد صحیح باشد، سطح فشردهسازی را مشخص میکند. در غیر این صورت، باید فهرستی از موارد جداشده با کاما به شکل keyword یا keyword=value باشد. در حال حاضر، تنها کلیدواژه پشتیبانیشده level است.
اگر هیچ سطح فشردهسازی مشخص نشود، از سطح فشردهسازی پیشفرض استفاده خواهد شد. اگر فقط یک سطح بدون ذکر الگوریتم مشخص شود، در صورتی که سطح بزرگتر از 0 باشد از فشردهسازی gzip استفاده میشود، و در صورتی که سطح 0 باشد هیچ فشردهسازی اعمال نخواهد شد.
پسوند .gz بهطور خودکار هنگام استفاده از gzip به تمام نامهای فایل اضافه خواهد شد، و پسوند .lz4 هنگام استفاده از lz4 افزوده میشود.
گزینههای خط فرمان زیر پارامترهای اتصال به پایگاهداده را کنترل میکنند.
-d connstr
--dbname=connstr
این گزینه برای سازگاری با سایر برنامههای کاربردی کلاینت --dbname نامیده شده است، اما از آنجا که pg_receivewal به هیچ پایگاهداده خاصی در کلاستر متصل نمیشود، هر نام پایگاهدادهای که در رشته اتصال گنجانده شود توسط سرور نادیده گرفته خواهد شد. با این حال، نام پایگاهدادهای که از این طریق ارائه میشود، نام پایگاهداده پیشفرض (replication) را برای مقاصد جستجوی گذرواژه اتصال همانندسازی در ~/.pgpass بازنویسی میکند. به همین ترتیب، میانافزارها یا پروکسیهای مورد استفاده در اتصال به PostgreSQL ممکن است از این نام برای مقاصدی مانند مسیریابی اتصال استفاده کنند.
-h host
--host=host
-p port
--port=port
-U username
--username=username
-w
--no-password
-W
--password
دستور pg_receivewal میتواند یکی از دو اقدام زیر را برای کنترل replication slotهای فیزیکی انجام دهد:
--create-slot
--drop-slot
گزینههای دیگری نیز در دسترس هستند:
-V
--version
-?
--help
وضعیت خروج (EXIT STATUS)
هنگامی که pg_receivewal توسط سیگنال SIGINT یا SIGTERM متوقف شود، با وضعیت 0 خارج خواهد شد. (این روش عادی برای پایان دادن به آن است؛ بنابراین خطا محسوب نمیشود.) برای خطاهای مهلک یا سایر سیگنالها، وضعیت خروج غیرصفر خواهد بود.
محیط (ENVIRONMENT)
این ابزار، مانند بیشتر ابزارهای دیگر PostgreSQL، از متغیرهای محیطی پشتیبانیشده توسط libpq استفاده میکند (بخش 32.15 را ببینید).
متغیر محیطی PG_COLOR مشخص میکند که آیا در پیامهای عیبیابی از رنگ استفاده شود یا خیر. مقادیر ممکن عبارتند از always، auto و never.
نکات (NOTES)
هنگام استفاده از pg_receivewal بهجای archive_command یا archive_library بهعنوان روش اصلی پشتیبانگیری WAL، اکیداً توصیه میشود از replication slotها استفاده کنید. در غیر این صورت، سرور مجاز است فایلهای write-ahead log را پیش از تهیهٔ نسخهٔ پشتیبان بازیافت (recycle) یا حذف کند، زیرا هیچ اطلاعاتی، چه از جانب archive_command یا archive_library و چه از سوی replication slotها، دربارهٔ این که جریان WAL تا کجا بایگانی شده است ندارد. با این حال توجه داشته باشید که اگر دریافتکننده نتواند همگام با دریافت دادههای WAL پیش برود، یک replication slot فضای دیسک سرور را پر خواهد کرد.
در صورتی که مجوزهای دسترسی گروهی روی کلاستر مبدأ فعال باشد، pg_receivewal مجوزهای گروهی را روی فایلهای WAL دریافتی حفظ خواهد کرد..SH "مثالها (EXAMPLES)"
برای استریم کردن write-ahead log از سرور mydbserver و ذخیره آن در دایرکتوری محلی /usr/local/pgsql/archive:
$ pg_receivewal -h mydbserver -D /usr/local/pgsql/archive
همچنین ببینید (SEE ALSO)
| 2026 | PostgreSQL 18.6 |