| POSTGRES(1) | PostgreSQL 18.6 Documentation | POSTGRES(1) |
نام (NAME)
postgres - کارساز پایگاهداده PostgreSQL
خلاصه دستور (SYNOPSIS)
postgres [گزینه...]
توضیحات (DESCRIPTION)
postgres کارساز پایگاهداده PostgreSQL است. برای اینکه یک برنامه کلاینت به پایگاهداده دسترسی پیدا کند، (از طریق شبکه یا به صورت محلی) به یک نمونه در حال اجرای postgres متصل میشود. سپس نمونه postgres یک پردازه کارساز جداگانه را برای رسیدگی به این اتصال آغاز میکند.
یک نمونه postgres همواره دادههای دقیقاً یک خوشه پایگاهداده را مدیریت میکند. یک خوشه پایگاهداده مجموعهای از پایگاههای داده است که در یک مکان مشترک در سیستمفایل (تحت عنوان “ناحیه داده”) ذخیره شده است. تا زمانی که از نواحی داده متفاوت و درگاههای ارتباطی مختلفی استفاده شود (به زیر مراجعه کنید)، بیش از یک نمونه postgres میتواند به طور همزمان روی یک سیستم اجرا شود. هنگامی که postgres آغاز به کار میکند، باید از مکان ناحیه داده آگاه باشد. این مکان باید توسط گزینه -D یا متغیر محیطی PGDATA مشخص شود؛ هیچ پیشفرضی وجود ندارد. بهطور معمول، -D یا PGDATA مستقیماً به دایرکتوری ناحیه داده که توسط initdb(1) ایجاد شده است اشاره میکند. سایر ساختارهای ممکن برای فایلها در بخش 19.2 بررسی شدهاند.
بهطور پیشفرض postgres در پیشزمینه آغاز به کار میکند و پیامهای گزارش را به جریان خطای استاندارد میفرستد. در کاربردهای عملی، postgres باید به عنوان یک پردازه پسزمینه، برای نمونه هنگام بوت سیستم، اجرا شود.
دستور postgres همچنین میتواند در حالت تککاربره فراخوانی شود. کاربرد اصلی این حالت هنگام راهاندازی اولیه (bootstrapping) توسط initdb(1) است. گاهی اوقات برای اشکالزدایی یا بازیابی پس از سانحه استفاده میشود؛ توجه داشته باشید که اجرای کارساز در حالت تککاربره برای اشکالزدایی کارساز واقعاً مناسب نیست، چرا که هیچ ارتباط بینپردازهای و قفلگذاری واقعبینانهای صورت نمیپذیرد. در صورت فراخوانی در حالت تککاربره از پوسته، کاربر میتواند پرسوجوها را وارد کند و نتایج روی صفحه نمایش چاپ میشوند، اما در قالبی که بیشتر برای توسعهدهندگان مفید است تا کاربران نهایی. در حالت تککاربره، کاربر نشست روی کاربری با شناسه ۱ (ID 1) تنظیم میشود و اختیارات ضمنی مدیر سیستم (superuser) به این کاربر اعطا میگردد. این کاربر در عمل نیازی نیست وجود داشته باشد، بنابراین میتوان از حالت تککاربره برای بازیابی دستی انواع خاصی از آسیبهای تصادفی به کاتالوگهای سیستم استفاده کرد.
گزینهها (OPTIONS)
postgres آرگومانهای خط فرمان زیر را میپذیرد. برای بررسی دقیق گزینهها به فصل 19 مراجعه کنید. میتوانید با برپایی یک فایل پیکربندی از تایپ بیشتر این گزینهها بینیاز شوید. برخی از گزینهها (گزینههای امن) همچنین میتوانند از طرف کلاینت متصلشونده، بسته به برنامه به نحوی تنظیم شوند که فقط برای همان نشست اعمال گردند. برای نمونه، اگر متغیر محیطی PGOPTIONS تنظیم شده باشد، کلاینتهای مبتنی بر libpq آن رشته را به کارساز ارسال میکنند و کارساز آن را به عنوان گزینههای خط فرمان postgres تفسیر خواهد کرد..SS "کاربرد عمومی (General Purpose)"
-B nbuffers
-c name=value
-C name
از این گزینه میتوان روی یک سرور در حال اجرا برای بیشتر پارامترها استفاده کرد. با این حال، سرور باید برای برخی پارامترهای محاسبهشده در زمان اجرا (مانند shared_memory_size، shared_memory_size_in_huge_pages و wal_segment_size) خاموش باشد.
این گزینه برای برنامههای دیگری در نظر گرفته شده است که با یک نمونهٔ سرور در تعامل هستند، مانند pg_ctl(1)، تا مقادیر پارامترهای پیکربندی را پرسوجو کنند. برنامههای کاربرمحور باید در عوض از SHOW یا نمای pg_settings استفاده کنند.
-d debug-level
-D datadir
-e
-F
-h hostname
-i
این گزینه منسوخ شده است زیرا امکان دسترسی به تمام قابلیتهای listen_addresses را فراهم نمیکند. معمولاً بهتر است listen_addresses مستقیماً تنظیم شود.
-k directory
-l
-N max-connections
-p port
-s
-S work-mem
-V
--version
--name=value
--describe-config
--help
گزینههای نیمهداخلی (Semi-Internal Options)
گزینههایی که در اینجا شرح داده شدهاند عمدتاً برای اهداف اشکالزدایی و در برخی موارد برای کمک به بازیابی پایگاههای دادهای که آسیب شدید دیدهاند استفاده میشوند. هیچ دلیلی برای استفاده از آنها در محیطهای عملیاتی پایگاه داده وجود ندارد. این گزینهها در اینجا صرفاً برای استفاده توسعهدهندگان سیستم PostgreSQL فهرست شدهاند. علاوه بر این، ممکن است این گزینهها در نسخههای آتی بدون اطلاع قبلی تغییر کرده یا حذف شوند.
-f { s | i | o | b | t | n | m | h }
نه پویشهای ترتیبی و نه پیوندهای nested-loop را نمیتوان به طور کامل غیرفعال کرد؛ گزینههای -fs و -fn صرفاً بهینهساز را در صورتی که گزینه جایگزین دیگری داشته باشد، از بهکارگیری آن نوع طرحها منصرف میکنند.
-O
-P
-t pa[rser] | pl[anner] | e[xecutor]
-T
-v protocol
-W seconds
گزینههای حالت تککاربره (Options for Single-User Mode)
گزینههای زیر فقط در حالت تککاربره اعمال میشوند (بخش Single-User Mode را در ادامه ببینید).
--single
database
-E
-j
-r filename
PGCLIENTENCODING
PGDATA
PGDATESTYLE
PGPORT
عیبیابی (DIAGNOSTICS)
پیام خطایی که در آن به semget یا shmget اشاره شده است، احتمالاً نشاندهندهٔ این است که باید هستهٔ خود را برای فراهم کردن حافظهٔ اشتراکی و سمافورهای کافی پیکربندی کنید. برای توضیحات بیشتر، به Section 18.4 مراجعه کنید. ممکن است بتوانید با کاهش دادن shared_buffers برای کاهش مصرف حافظهٔ اشتراکی PostgreSQL، و/یا با کاهش دادن max_connections برای کاهش مصرف سمافورها، پیکربندی مجدد هستهٔ خود را به تعویق بیندازید.
پیام خطایی مبنی بر اینکه سرور دیگری در حال حاضر در حال اجرا است باید با دقت بررسی شود، برای نمونه با استفاده از دستور
$ ps ax | grep postgres
یا
$ ps -ef | grep postgres
بسته به سیستم شما. اگر اطمینان دارید که هیچ سرورِ متداخلی در حال اجرا نیست، میتوانید فایل قفل ذکرشده در پیام را حذف کرده و دوباره تلاش کنید.
پیام خطایی مبنی بر ناتوانی در متصل شدن به یک پورت (bind) ممکن است نشان دهد که آن پورت از قبل توسط فرایندی غیر-PostgreSQL در حال استفاده است. همچنین اگر postgres را خاتمه داده و بلافاصله با استفاده از همان پورت دوباره راهاندازی کنید، ممکن است با این خطا مواجه شوید؛ در این حالت، کافی است پیش از تلاش دوباره، چند ثانیه صبر کنید تا سیستمعامل پورت را ببندد. در نهایت، اگر شماره پورتی را مشخص کنید که سیستمعامل شما آن را رزروشده تلقی میکند، ممکن است این خطا رخ دهد. برای مثال، بسیاری از نسخههای Unix شماره پورتهای زیر 1024 را “قابل اعتماد” در نظر میگیرند و تنها به کاربر ریشهٔ (superuser) Unix اجازهٔ دسترسی به آنها را میدهند.
نکات (NOTES)
دستور کمکی pg_ctl(1) میتواند برای راهاندازی و خاموش کردن ایمن و راحت سرور postgres به کار رود.
در صورت امکان، به هیچ وجه از SIGKILL برای خاتمه دادن به سرور اصلی postgres استفاده نکنید. انجام این کار مانع از آن میشود که postgres منابع سیستمی تحت اختیار خود (مانند حافظهٔ اشتراکی و سمافورها) را پیش از پایان کار آزاد کند. این موضوع ممکن است هنگام راهاندازی مجدد و تازهٔ postgres باعث بروز مشکلاتی شود.
برای خاتمه دادن عادی به سرور postgres، میتوان از سیگنالهای SIGTERM، SIGINT یا SIGQUIT استفاده کرد. سیگنال نخست پیش از خروج، منتظر پایان کار تمام کلاینتها میماند، دومی اتصال همهٔ کلاینتها را به اجبار قطع میکند، و سومی بدون خاموشسازی مناسب بلافاصله خارج میشود که منجر به اجرای عملیات بازیابی در هنگام راهاندازی مجدد خواهد شد.
سیگنال SIGHUP فایلهای پیکربندی سرور را مجدداً بارگذاری میکند. همچنین ارسال SIGHUP به یک فرایند مجزای سرور امکانپذیر است، اما معمولاً این کار منطقی نیست.
برای لغو یک پرسوجوی در حال اجرا، سیگنال SIGINT را به فرایند مجری آن دستور ارسال کنید. برای پایان دادن تمیز به یک فرایند پسزمینه (backend)، سیگنال SIGTERM را به آن فرایند بفرستید. همچنین برای معادلهای قابل فراخوانی در SQL این دو عمل، به pg_cancel_backend و pg_terminate_backend در Section 9.28.2 مراجعه کنید.
سرور postgres از SIGQUIT استفاده میکند تا به فرایندهای فرعی سرور اعلام کند بدون پاکسازی عادی خاتمه یابند. این سیگنال نباید توسط کاربران استفاده شود. همچنین ارسال SIGKILL به یک فرایند سرور نامعقول است — فرایند اصلی postgres این را به عنوان یک فروپاشی (crash) تفسیر خواهد کرد و به عنوان بخشی از روال استاندارد بازیابی از فروپاشی (crash-recovery)، تمامی فرایندهای همتا (sibling) را مجبور به خروج میکند..SH "گزارش باگها (BUGS)"
گزینههای -- روی FreeBSD یا OpenBSD کار نخواهند کرد. در عوض از -c استفاده کنید. این یک اشکال در سیستمعاملهای مذکور است؛ چنانچه این مشکل برطرف نشود، در نسخههای آیندهٔ PostgreSQL یک راهحل جایگزین ارائه خواهد شد.
حالت تککاربره (SINGLE-USER MODE)
برای راهاندازی سرور در حالت تککاربره، از دستوری مانند زیر استفاده کنید:
postgres --single -D /usr/local/pgsql/data other-options my_database
مسیر درست به دایرکتوری پایگاه داده را با -D مشخص کنید، یا مطمئن شوید که متغیر محیطی PGDATA تنظیم شده باشد. همچنین نام پایگاه دادهٔ مورد نظری را که میخواهید در آن کار کنید، مشخص نمایید.
بهطور معمول، سرورِ حالت تککاربره، خط جدید (newline) را به عنوان پایاندهندهٔ ورود دستور در نظر میگیرد؛ برخلاف psql، هیچ هوشمندی نسبت به نقطهویرگولها ندارد. برای امتداد دادن یک دستور در چندین خط، باید دقیقاً قبل از هر خط جدید (به جز آخرین خط)، یک بکاسلش وارد کنید. بکاسلش و خط جدید مجاور آن، هر دو از دستور ورودی حذف میشوند. توجه داشته باشید که این عمل حتی درون یک رشتهٔ متنی یا کامنت نیز رخ خواهد داد.
اما اگر از سوییچ خط فرمان -j استفاده کنید، یک خط جدید به تنهایی باعث خاتمهٔ ورود دستور نمیشود؛ بلکه توالی نقطهویرگول-خطجدید-خطجدید این کار را انجام میدهد. بدین معنا که یک نقطهویرگول تایپ کرده و بلافاصله پس از آن یک خط کاملاً خالی قرار دهید. در این حالت با ترکیب بکاسلش-خطجدید رفتار ویژهای نخواهد شد. باز هم تأکید میشود که هیچ هوشمندی دربارهٔ قرار گرفتن چنین توالیای در داخل یک رشتهٔ متنی یا کامنت وجود ندارد.
در هر دو حالت ورودی، اگر نقطهویرگولی تایپ کنید که دقیقاً قبل از پایاندهندهٔ ورود دستور نبوده یا بخشی از آن نباشد، به عنوان جداکنندهٔ دستور در نظر گرفته میشود. هنگامی که پایاندهندهٔ ورود دستور را وارد میکنید، تمام عبارتهای متعددی که وارد کردهاید در قالب یک تراکنشِ واحد اجرا خواهند شد.
برای خروج از نشست، EOF (معمولاً Control+D) را وارد کنید. اگر پس از آخرین پایاندهندهٔ ورود دستور، متنی وارد کرده باشید، آنگاه EOF به عنوان پایاندهندهٔ ورود دستور در نظر گرفته میشود، و برای خروج به یک EOF دیگر نیاز خواهد بود.
توجه داشته باشید که سرور حالت تککاربره، ویژگیهای پیشرفتهٔ ویرایش خط را فراهم نمیکند (برای نمونه، تاریخچهٔ دستورات وجود ندارد). حالت تککاربره همچنین هیچ پردازش پسزمینهای مانند checkpointهای خودکار یا رونوشتسازی (replication) را انجام نمیدهد.
مثالها (EXAMPLES)
برای راهاندازی postgres در پسزمینه با استفاده از مقادیر پیشفرض، این دستور را تایپ کنید:
$ nohup postgres >logfile 2>&1 </dev/null &
برای راهاندازی postgres با یک پورت خاص، مثلاً 1234:
$ postgres -p 1234
برای اتصال به این سرور با استفاده از psql، این پورت را با گزینهٔ -p مشخص کنید:
$ psql -p 1234
یا متغیر محیطی PGPORT را تنظیم نمایید:
$ export PGPORT=1234 $ psql
پارامترهای زمان اجرای نامگذاریشده را میتوان به هر یک از این دو شیوه تنظیم کرد:
$ postgres -c work_mem=1234 $ postgres --work-mem=1234
هر یک از این دو حالت، بر هر تنظیمی که ممکن است برای work_mem در postgresql.conf وجود داشته باشد، اولویت خواهد داشت و آن را بازنویسی میکند. توجه کنید که در خط فرمان، زیرخطها (underscores) در نام پارامترها را میتوان هم با زیرخط و هم با خط تیره نوشت. به جز در آزمایشهای کوتاهمدت، احتمالاً ویرایش تنظیمات در postgresql.conf روش بهتری نسبت به تکیه بر سوییچ خط فرمان برای تعیین مقدار یک پارامتر است..SH "همچنین ببینید (SEE ALSO)"
| 2026 | PostgreSQL 18.6 |