| PG_CREATESUBSCRIBER(1) | PostgreSQL 18.6 Documentation | PG_CREATESUBSCRIBER(1) |
نام (NAME)
pg_createsubscriber - تبدیل یک رپلیکای فیزیکی به یک رپلیکای منطقی جدید
خلاصه دستور (SYNOPSIS)
pg_createsubscriber [گزینهها...] {-d | --database}dbname {-D | --pgdata}datadir {-P | --publisher-server}connstr
توضیحات (DESCRIPTION)
دستور pg_createsubscriber یک رپلیکای منطقی جدید از روی یک سرور استندبای فیزیکی ایجاد میکند. تمامی جدولهای موجود در پایگاهداده مشخصشده در پیکربندی رپلیکیشن منطقی گنجانده میشوند. برای هر پایگاهداده یک جفت شیء انتشار (publication) و اشتراک (subscription) ایجاد میشود. این ابزار باید روی سرور مقصد اجرا شود.
پس از اجرای موفقیتآمیز، وضعیت سرور مقصد مشابه راهاندازی تازه رپلیکیشن منطقی خواهد بود. تفاوت اصلی بین راهاندازی رپلیکیشن منطقی معمولی و pg_createsubscriber در نحوه همگامسازی دادهها است. pg_createsubscriber دادههای اولیه جدولها را رونوشت نمیکند؛ بلکه تنها مرحله همگامسازی را انجام میدهد که تضمین میکند هر جدول به وضعیت همگامشده برسد.
ابزار pg_createsubscriber سیستمهای پایگاهداده بزرگ را هدف قرار میدهد، زیرا در راهاندازی رپلیکیشن منطقی، بخش عمده زمان صرف رونوشت اولیه دادهها میشود. علاوه بر این، پیامد این زمان طولانی صرفشده برای همگامسازی دادهها، معمولاً حجم بالایی از تغییرات است که باید اعمال شوند (تغییراتی که در طول رونوشت اولیه دادهها ایجاد شدهاند)؛ این موضوع زمان در دسترس قرار گرفتن رپلیکای منطقی را باز هم افزایش میدهد. برای پایگاههای داده کوچکتر، توصیه میشود رپلیکیشن منطقی با همگامسازی اولیه دادهها راهاندازی شود. برای جزئیات بیشتر، گزینه copy_data در CREATE SUBSCRIPTION را ببینید.
گزینهها (OPTIONS)
دستور pg_createsubscriber آرگومانهای خط فرمان زیر را میپذیرد:
-a
--all
-d dbname
--database=dbname
-D directory
--pgdata=directory
-n
--dry-run
-p port
--subscriber-port=port
-P connstr
--publisher-server=connstr
-s dir
--socketdir=dir
-t seconds
--recovery-timeout=seconds
-T
--enable-two-phase
-U username
--subscriber-username=username
-v
--verbose
--clean=objtype
اشیاء انتخابشده برای حذف به صورت جداگانه ثبت لاگ میشوند، از جمله در حین اجرای --dry-run. هیچ امکانی برای جلوگیری یا متوقف کردن حذف اشیاء انتخابشده وجود ندارد، بنابراین تهیه نسخه پشتیبان از آنها با استفاده از pg_dump را در نظر داشته باشید.
--config-file=filename
--publication=name
--replication-slot=name
--subscription=name
-V
--version
-?
--help
نکات (NOTES)
پیشنیازها (Prerequisites)
برای اینکه pg_createsubscriber سرور مقصد را به یک رپلیکای منطقی تبدیل کند، پیشنیازهایی وجود دارد. اگر این پیشنیازها برآورده نشوند، خطا گزارش خواهد شد. سرورهای مبدأ و مقصد باید دارای نسخه اصلی یکسانی با pg_createsubscriber باشند. دایرکتوری داده مقصد دادهشده باید دارای شناسه سیستم یکسانی با دایرکتوری داده مبدأ باشد. کاربر پایگاهداده مشخصشده برای دایرکتوری داده مقصد باید دسترسیهای لازم برای ایجاد اشتراکها و استفاده از pg_replication_origin_advance() را داشته باشد.
سرور مقصد باید به عنوان یک استندبای فیزیکی مورد استفاده قرار گیرد. در سرور مقصد باید max_active_replication_origins و max_logical_replication_workers روی مقداری بزرگتر یا مساوی با تعداد پایگاههای داده مشخصشده پیکربندی شده باشند. در سرور مقصد باید max_worker_processes روی مقداری بزرگتر از تعداد پایگاههای داده مشخصشده پیکربندی شده باشد. سرور مقصد باید اتصالات محلی را بپذیرد. اگر قصد استفاده از سوئیچ --enable-two-phase را دارید، باید max_prepared_transactions را نیز به شکل مناسب تنظیم کنید.
سرور مبدأ باید اتصالات از جانب سرور مقصد را بپذیرد. سرور مبدأ نباید در وضعیت بازیابی باشد. در سرور مبدأ باید wal_level روی logical تنظیم شده باشد. سرور مبدأ باید max_replication_slots را روی مقداری بزرگتر یا مساوی با تعداد پایگاههای داده مشخصشده بهعلاوه اسلاتهای رپلیکیشن موجود پیکربندی کرده باشد. سرور مبدأ باید max_wal_senders را روی مقداری بزرگتر یا مساوی با تعداد پایگاههای داده مشخصشده و فرآیندهای فرستنده WAL موجود تنظیم کرده باشد.
هشدارها (Warnings)
اگر pg_createsubscriber پس از ارتقای سرور مقصد شکست بخورد، دایرکتوری داده احتمالاً در وضعیتی نخواهد بود که قابل بازیابی باشد. در چنین حالتی، ایجاد یک سرور استندبای جدید توصیه میشود.
دستور pg_createsubscriber معمولاً در طول تغییر و تبدیل، سرور مقصد را با تنظیمات اتصال متفاوتی راهاندازی میکند. بنابراین، اتصالات به سرور مقصد باید ناموفق باشند.
از آنجا که دستورات DDL توسط رپلیکیشن منطقی بازتکرار نمیشوند، در حین اجرای pg_createsubscriber از اجرای دستورات DDL که شمای پایگاهداده را تغییر میدهند خودداری کنید. اگر سرور مقصد قبلاً به رپلیکای منطقی تبدیل شده باشد، دستورات DDL ممکن است بازتکرار نشوند که میتواند موجب بروز خطا شود.
اگر pg_createsubscriber در حین پردازش با شکست مواجه شود، اشیاء (انتشارات، اسلاتهای رپلیکیشن) ایجادشده روی سرور مبدأ حذف میشوند. اگر سرور مقصد نتواند به سرور مبدأ متصل شود، ممکن است این حذف با شکست مواجه گردد. در چنین شرایطی، یک پیام هشدار اشیاء باقیمانده را اطلاع خواهد داد. اگر سرور مقصد در حال اجرا باشد، متوقف خواهد شد.
اگر رپلیکیشن از primary_slot_name استفاده میکند، پس از راهاندازی رپلیکیشن منطقی از روی سرور مبدأ حذف خواهد شد.
اگر سرور مقصد یک رپلیکای همگام باشد، تایید تراکنشها در سرور اصلی ممکن است در حین اجرای pg_createsubscriber در انتظار رپلیکیشن بماند.
مگر اینکه سوئیچ --enable-two-phase مشخص شده باشد، pg_createsubscriber رپلیکیشن منطقی را با غیرفعال بودن تایید دوفازی راهاندازی میکند. این بدان معناست که هر تراکنش آمادهشده (prepared transaction) در زمان COMMIT PREPARED و بدون آمادهسازی قبلی بازتکرار خواهد شد. پس از اتمام راهاندازی، میتوانید به صورت دستی اشتراک(ها) را حذف کرده و با فعال بودن گزینه two_phase دوباره ایجاد کنید.
دستور pg_createsubscriber شناسه سیستم را با استفاده از pg_resetwal تغییر میدهد. این کار از شرایطی که در آن سرور مقصد ممکن است از فایلهای WAL سرور مبدأ استفاده کند جلوگیری مینماید. اگر سرور مقصد خود دارای استندبای باشد، رپلیکیشن آن مختل خواهد شد و باید یک استندبای تازه ایجاد شود.
در صورتی که فایلهای WAL مورد نیاز وجود نداشته باشند، ممکن است شکست در رپلیکیشن رخ دهد. برای جلوگیری از این موضوع، سرور مبدأ باید max_slot_wal_keep_size را روی -1 تنظیم کند تا اطمینان حاصل شود که فایلهای WAL مورد نیاز پیش از موعد حذف نمیشوند.
نحوه کارکرد (How It Works)
ایده اصلی داشتن یک نقطه شروع رپلیکیشن از سرور مبدأ و راهاندازی رپلیکیشن منطقی برای شروع از این نقطه است:
مثالها (EXAMPLES)
برای ایجاد یک رپلیکای منطقی برای پایگاههای داده hr و finance از روی یک رپلیکای فیزیکی در foo:
$ pg_createsubscriber -D /usr/local/pgsql/data -P "host=foo" -d hr -d finance
همچنین ببینید (SEE ALSO)
| 2026 | PostgreSQL 18.6 |