PSQL(1) PostgreSQL 18.6 Documentation PSQL(1)

psql - ترمینال تعاملی PostgreSQL

psql [option...] [dbname [username]]

دستور psql یک واسط کاربری متنی (front-end) برای PostgreSQL است. این ابزار به شما امکان می‌دهد پرس‌وجوها را به‌صورت تعاملی تایپ کرده، آن‌ها را به PostgreSQL ارسال نمایید و نتایج پرس‌وجو را مشاهده کنید. همچنین، ورودی می‌تواند از یک فایل یا از آرگومان‌های خط فرمان تأمین شود. علاوه بر این، psql تعدادی فرادستور (meta-command) و قابلیت‌های گوناگون شبیه به پوسته ارائه می‌دهد تا نوشتن اسکریپت‌ها و خودکارسازی طیف وسیعی از وظایف تسهیل گردد.

-a
--echo-all

تمام خطوط ورودی غیرخالی را به محض خوانده شدن در خروجی استاندارد چاپ می‌کند. (این گزینه برای خطوطی که به‌صورت تعاملی خوانده می‌شوند اعمال نمی‌گردد.) این معادل تنظیم متغیر ECHO روی all است.

-A
--no-align

به حالت خروجی غیرتراز (unaligned) تغییر وضعیت می‌دهد. (حالت خروجی پیش‌فرض aligned است.) این معادل \pset format unaligned می‌باشد.

-b
--echo-errors

دستورات ناموفق SQL را در خروجی خطای استاندارد چاپ می‌کند. این معادل تنظیم متغیر ECHO روی errors است.

-c command
--command=command

مشخص می‌کند که psql باید رشته دستور داده‌شده، یعنی command را اجرا کند. این گزینه می‌تواند تکرار شده و به هر ترتیبی با گزینه -f ترکیب شود. هنگامی که یکی از گزینه‌های -c یا -f مشخص شده باشد، psql دستورات را از ورودی استاندارد نمی‌خواند؛ بلکه پس از پردازش تمام گزینه‌های -c و -f به ترتیب، خاتمه می‌یابد.

command باید یا یک رشته دستور باشد که کاملاً توسط سرور قابل تجزیه است (یعنی شامل هیچ‌کدام از قابلیت‌های اختصاصی psql نیست)، یا یک دستور بک‌اسلش منفرد باشد. بنابراین نمی‌توانید دستورات SQL و فرادستورهای psql را درون یک گزینه -c ترکیب کنید. برای دستیابی به این هدف، می‌توانید از گزینه‌های تکراری -c استفاده کرده یا رشته را به psql پایپ کنید؛ برای مثال:

psql -c '\x' -c 'SELECT * FROM foo;'

یا

echo '\x \\ SELECT * FROM foo;' | psql

(\\ فرادستور جداکننده است.)

هر رشته دستور SQL که به -c داده می‌شود، به عنوان یک درخواست واحد به سرور ارسال می‌گردد. به همین دلیل، سرور آن را حتی اگر رشته شامل چندین دستور SQL باشد به عنوان یک تراکنش واحد اجرا می‌کند، مگر اینکه دستورات صریح BEGIN/COMMIT در رشته گنجانده شده باشند تا آن را به چندین تراکنش تقسیم کنند. (برای جزئیات بیشتر درباره نحوه رسیدگی سرور به رشته‌های چندپرس‌وجویی، بخش Section 54.2.2.1 را ببینید.)

اگر مایل نیستید چند دستور در یک تراکنش اجرا شوند، از دستورات تکراری -c استفاده کنید یا چندین دستور را به ورودی استاندارد psql هدایت نمایید؛ چه با استفاده از echo همان‌طور که در بالا نشان داده شد، یا از طریق یک here-document در پوسته؛ برای مثال:

psql <<EOF
\x
SELECT * FROM foo;
EOF

--csv

به حالت خروجی CSV (Comma-Separated Values) تغییر وضعیت می‌دهد. این معادل \pset format csv است.

-d dbname
--dbname=dbname

نام پایگاه داده‌ای که باید به آن متصل شد را مشخص می‌کند. این معادل مشخص کردن dbname به عنوان نخستین آرگومان غیرگزینه‌ای در خط فرمان است. مقدار dbname می‌تواند یک connection string باشد. در این صورت، پارامترهای connection string بر هرگونه گزینه متناقض در خط فرمان اولویت خواهند داشت.

-e
--echo-queries

تمام دستورات SQL ارسال‌شده به سرور را در خروجی استاندارد نیز چاپ می‌کند. این معادل تنظیم متغیر ECHO روی queries است.

-E
--echo-hidden

پرس‌وجوهای واقعی تولیدشده توسط \d و سایر دستورات بک‌اسلش را چاپ می‌کند. می‌توانید از این گزینه برای بررسی عملیات داخلی psql استفاده کنید. این معادل تنظیم متغیر ECHO_HIDDEN روی on است. -f filename
--file=filename
دستورها را به جای ورودی استاندارد، از فایل filename می‌خواند. این گزینه می‌تواند تکرار شده و با هر ترتیبی با گزینهٔ -c ترکیب شود. هنگامی که هر یک از -c یا -f مشخص شوند، psql دستورها را از ورودی استاندارد نمی‌خواند؛ بلکه پس از پردازش تمام گزینه‌های -c و -f به ترتیب، خاتمه می‌یابد. به جز این مورد، این گزینه تا حد زیادی معادل فرادستور \i است.

اگر filename برابر با - (خط پیوند) باشد، ورودی استاندارد تا رسیدن به نشانگر EOF یا فرادستور \q خوانده می‌شود. از این قابلیت می‌توان برای درآمیختن ورودی تعاملی با ورودی فایل‌ها استفاده کرد. با این حال توجه داشته باشید که در این حالت از Readline استفاده نمی‌شود (درست مانند حالتی که -n مشخص شده باشد).

استفاده از این گزینه تفاوت ظریفی با نوشتن psql < filename دارد. به‌طور کلی هر دو آنچه را که انتظار دارید انجام می‌دهند، اما استفاده از -f برخی قابلیت‌های مفید مانند پیام‌های خطا به همراه شماره خطوط را فعال می‌کند. همچنین احتمال کمی وجود دارد که استفاده از این گزینه سربار راه‌اندازی را کاهش دهد. از سوی دیگر، حالت استفاده از تغییر مسیر ورودی پوسته (در تئوری) تضمین می‌کند دقیقاً همان خروجی‌ای حاصل شود که اگر همه‌چیز را دستی وارد می‌کردید دریافت می‌کردید.

-F separator
--field-separator=separator

از separator به‌عنوان جداکننده فیلد برای خروجی ترازنشده استفاده می‌کند. این معادل \pset fieldsep یا \f است.

-h hostname
--host=hostname

نام میزبان ماشینی که سرور روی آن در حال اجرا است را مشخص می‌کند. اگر مقدار با یک اسلش آغاز شود، به عنوان دایرکتوری برای سوکت Unix-domain استفاده می‌شود.

-H
--html

به حالت خروجی HTML تغییر وضعیت می‌دهد. این معادل \pset format html یا دستور \H است.

-l
--list

فهرست کردن تمام پایگاه‌های داده در دسترس و سپس خروج. سایر گزینه‌های غیرمرتبط با اتصال نادیده گرفته می‌شوند. این مشابه فرادستور \list است.

هنگامی که از این گزینه استفاده می‌شود، psql به پایگاه داده postgres متصل خواهد شد، مگر اینکه پایگاه داده متفاوتی در خط فرمان مشخص شده باشد (گزینهٔ -d یا آرگومان غیرگزینه‌ای، احتمالاً از طریق یک مدخل سرویس، اما نه از طریق متغیر محیطی).

-L filename
--log-file=filename

علاوه بر مقصد معمول خروجی، تمام خروجی پرسمان را در فایل filename می‌نویسد.

-n
--no-readline

عدم استفاده از Readline برای ویرایش خط و عدم استفاده از تاریخچه دستورات (بخش “Command-Line Editing” در زیر را ببینید).

-o filename
--output=filename

تمام خروجی پرسمان را در فایل filename قرار می‌دهد. این معادل دستور \o است.

-p port
--port=port

پورت TCP یا پسوند فایل سوکت محلی Unix-domain که سرور روی آن به اتصالات گوش می‌دهد را مشخص می‌کند. مقدار پیش‌فرض آن مقدار متغیر محیطی PGPORT است یا در صورت تنظیم نشدن، پورتی که در زمان کامپایل مشخص شده است، معمولاً 5432.

-P assignment
--pset=assignment

گزینه‌های چاپ را به شیوهٔ \pset مشخص می‌کند. توجه داشته باشید که در اینجا باید نام و مقدار را به جای فاصله با علامت مساوی جدا کنید. برای مثال، برای تنظیم قالب خروجی روی LaTeX، می‌توانید بنویسید -P format=latex.

-q
--quiet

مشخص می‌کند که psql باید کار خود را بی‌صدا انجام دهد. به‌طور پیش‌فرض، پیام‌های خوش‌آمدگویی و خروجی‌های اطلاعاتی مختلفی را چاپ می‌کند. اگر این گزینه استفاده شود، هیچ‌یک از این‌ها رخ نمی‌دهد. این ویژگی همراه با گزینهٔ -c مفید است. این معادل با تنظیم متغیر QUIET روی on است.

-R separator
--record-separator=separator

از separator به‌عنوان جداکننده رکورد برای خروجی ترازنشده استفاده می‌کند. این معادل \pset recordsep است.

-s
--single-step

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

-S
--single-line

در حالت تک‌خطی اجرا می‌شود که در آن یک خط جدید (newline) مانند یک نقطه‌ویرگول، یک دستور SQL را پایان می‌دهد.

نکته
این حالت برای کسانی ارائه شده است که بر استفاده از آن اصرار دارند، اما لزوماً استفاده از آن به شما توصیه نمی‌شود. به‌ویژه، اگر SQL و فرادستورها را در یک خط با هم ترکیب کنید، ترتیب اجرا ممکن است برای کاربر کم‌تجربه همیشه واضح نباشد.

-t
--tuples-only

چاپ نام ستون‌ها و پانویس‌های شمارش سطرهای نتیجه و غیره را غیرفعال می‌کند. این معادل \t یا \pset tuples_only است.

-T table_options
--table-attr=table_options

گزینه‌هایی را که باید در تگ جدول HTML قرار گیرند مشخص می‌کند. برای جزئیات به \pset tableattr مراجعه کنید. -U username
--username=username
اتصال به پایگاه‌داده با کاربر username به‌جای مقدار پیش‌فرض. (البته باید مجوز انجام این کار را داشته باشید.)

-v assignment
--set=assignment
--variable=assignment

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

-V
--version

چاپ نسخهٔ psql و خروج.

-w
--no-password

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

توجه داشته باشید که این گزینه برای کل نشست فعال خواهد ماند، بنابراین بر استفاده از فرامان \connect و همچنین تلاش اولیه برای برقراری اتصال تأثیر می‌گذارد.

-W
--password

وادار کردن psql به درخواست گذرواژه پیش از اتصال به پایگاه‌داده، حتی اگر از گذرواژه استفاده نشود.

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

توجه داشته باشید که این گزینه برای کل نشست فعال خواهد ماند، بنابراین بر استفاده از فرامان \connect و همچنین تلاش اولیه برای اتصال تأثیر می‌گذارد.

-x
--expanded

فعال کردن حالت قالب‌بندی گسترش‌یافتهٔ جدول. این معادل \x یا \pset expanded است.

-X
--no-psqlrc

فایل راه‌اندازی را نخواند (نه فایل سراسری psqlrc سیستم و نه فایل ~/.psqlrc کاربر).

-z
--field-separator-zero

تنظیم جداکنندهٔ فیلد برای خروجی ترازنشده روی یک بایت صفر. این معادل \pset fieldsep_zero است.

-0
--record-separator-zero

تنظیم جداکنندهٔ رکورد برای خروجی ترازنشده روی یک بایت صفر. این برای نمونه جهت تعامل با xargs -0 مفید است. این معادل \pset recordsep_zero است.

-1
--single-transaction

این گزینه تنها می‌تواند در ترکیب با یک یا چند گزینه از گزینه‌های -c و/یا -f به کار رود. این گزینه موجب می‌شود که psql پیش از نخستین گزینه از این دست دستور BEGIN و پس از آخرین آن‌ها دستور COMMIT را صادر کند، و در نتیجه تمام دستورها را در قالب یک تراکنش واحد دربرگیرد. اگر هر یک از دستورها با شکست مواجه شود و متغیر ON_ERROR_STOP تنظیم شده باشد، به‌جای آن یک دستور ROLLBACK فرستاده می‌شود. این امر تضمین می‌کند که یا همهٔ دستورها با موفقیت پایان یابند، یا هیچ تغییری اعمال نشود.

اگر خود دستورها حاوی BEGIN، COMMIT یا ROLLBACK باشند، این گزینه اثر مورد نظر را نخواهد داشت. همچنین اگر یک دستور منفرد نتواند درون یک بلوک تراکنش اجرا شود، تعیین این گزینه باعث شکست کل تراکنش خواهد شد.

-?
--help[=topic]

نمایش راهنما دربارهٔ psql و خروج. پارامتر اختیاری topic (با مقدار پیش‌فرض options) مشخص می‌کند کدام بخش از psql توضیح داده شود: commands دستورهای بک‌اسلش psql را شرح می‌دهد؛ options گزینه‌های خط فرمانی را که می‌توان به psql پاس داد توصیف می‌کند؛ و variables راهنما را دربارهٔ متغیرهای پیکربندی psql نمایش می‌دهد.

psql در صورتی که به طور عادی پایان یابد مقدار 0 را به شل بازمی‌گرداند؛ در صورت بروز خطای مهلک داخلی (مانند اتمام حافظه یا پیدا نشدن فایل) مقدار 1؛ در صورتی که اتصال به سرور قطع شود و نشست به صورت تعاملی نباشد مقدار 2؛ و در صورتی که خطایی در یک اسکریپت رخ دهد و متغیر ON_ERROR_STOP تنظیم شده باشد مقدار 3 را بازمی‌گرداند.

psql یک برنامه کلاینت معمولی PostgreSQL است. برای اتصال به یک پایگاه داده باید نام پایگاه داده هدف، نام میزبان و شماره پورت سرور، و نام کاربری پایگاه داده‌ای که می‌خواهید با آن متصل شوید را بدانید. می‌توان این پارامترها را از طریق گزینه‌های خط فرمان، یعنی به ترتیب -d، -h، -p و -U به psql اعلام کرد. اگر آرگومانی پیدا شود که متعلق به هیچ گزینه‌ای نباشد، به عنوان نام پایگاه داده (یا در صورتی که نام پایگاه داده از قبل مشخص شده باشد، به عنوان نام کاربر پایگاه داده) تفسیر خواهد شد. همه این گزینه‌ها اجباری نیستند؛ مقادیر پیش‌فرض مفیدی وجود دارند. اگر نام میزبان را نادیده بگیرید، psql از طریق یک سوکت دامنه یونیکس (Unix-domain socket) به سروری روی میزبان محلی، یا از طریق TCP/IP به localhost در ویندوز متصل خواهد شد. شماره پورت پیش‌فرض در زمان کامپایل تعیین می‌شود. از آنجا که سرور پایگاه داده از همان پیش‌فرض استفاده می‌کند، در بیشتر موارد نیازی به مشخص کردن پورت نخواهید داشت. نام کاربر پیش‌فرض پایگاه داده، همان نام کاربری سیستم‌عامل شما است. پس از تعیین نام کاربر پایگاه داده، از آن به عنوان نام پایگاه داده پیش‌فرض استفاده می‌شود. توجه داشته باشید که نمی‌توانید با هر نام کاربری پایگاه داده به هر پایگاه داده‌ای متصل شوید. مدیر پایگاه داده شما باید شما را از دسترسی‌هایتان مطلع کرده باشد.

هنگامی که مقادیر پیش‌فرض کاملاً مناسب نیستند، می‌توانید با تنظیم متغیرهای محیطی PGDATABASE، PGHOST، PGPORT و/یا PGUSER به مقادیر مناسب، از تایپ مکرر جلوگیری کنید. (برای متغیرهای محیطی بیشتر، بخش 32.15 را ببینید.) همچنین داشتن یک فایل ~/.pgpass برای جلوگیری از نیاز مداوم به تایپ گذرواژه‌ها سودمند است. برای اطلاعات بیشتر بخش 32.16 را ببینید.

یک راه جایگزین برای مشخص کردن پارامترهای اتصال، استفاده از یک رشته conninfo یا یک URI است که به جای نام پایگاه داده به کار می‌رود. این سازوکار کنترل بسیار گسترده‌ای بر اتصال به شما می‌دهد. برای مثال:

$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require

به این روش همچنین می‌توانید همان‌طور که در بخش 32.18 شرح داده شده است، از LDAP برای جستجوی پارامترهای اتصال استفاده کنید. برای اطلاعات بیشتر درباره تمام گزینه‌های اتصال موجود، بخش 32.1.2 را ببینید.

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

اگر هر دو ورودی استاندارد و خروجی استاندارد یک ترمینال باشند، psql کدگذاری کلاینت را روی “auto” تنظیم می‌کند، که کدگذاری کلاینت مناسب را بر اساس تنظیمات محلی (متغیر محیطی LC_CTYPE در سیستم‌های یونیکس) تشخیص می‌دهد. اگر این مورد مطابق انتظار کار نکرد، می‌توان کدگذاری کلاینت را با استفاده از متغیر محیطی PGCLIENTENCODING لغو و بازنویسی کرد.

در حالت عادی، psql یک اعلان (prompt) همراه با نام پایگاه داده‌ای که psql در حال حاضر به آن متصل است، و در ادامه رشته => ارائه می‌دهد. برای مثال:

$ psql testdb
psql (18.6)
Type "help" for help.
testdb=>

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

اگر کاربران غیرقابل‌اعتماد به پایگاه داده‌ای دسترسی دارند که از الگوی استفاده امن از شِما (secure schema usage pattern) پیروی نکرده است، نشست خود را با حذف شِماهای با قابلیت نوشتن همگانی از search_path آغاز کنید. می‌توان options=-csearch_path= را به رشته اتصال اضافه کرد یا دستور SELECT pg_catalog.set_config('search_path', '', false) را پیش از سایر دستورهای SQL اجرا نمود. این نکته مختص psql نیست؛ بلکه در مورد هر رابطی برای اجرای دستورهای دلخواه SQL صدق می‌کند.

هر زمان که فرمانی اجرا شود، psql همچنین رویدادهای اعلان ناهمگام (asynchronous notification events) تولید شده توسط LISTEN و NOTIFY را بررسی می‌کند.

در حالی که کامنت‌های بلوکی سبک C برای پردازش و حذف به سرور ارسال می‌شوند، کامنت‌های استاندارد SQL توسط psql حذف می‌گردند.

هر چیزی که در psql وارد کنید و با یک بک‌اسلش بدون علامت نقل‌قول آغاز شود، یک متادستور psql است که توسط خود psql پردازش می‌شود. این دستورها psql را برای امور مدیریتی یا اسکریپت‌نویسی کاربردی‌تر می‌کنند. متادستورها اغلب دستورهای اسلش یا بک‌اسلش نامیده می‌شوند.

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

برای گنجاندن فاصله خالی در یک آرگومان می‌توانید آن را با نقل‌قول تکی محصور کنید. برای گنجاندن یک نقل‌قول تکی در یک آرگومان، دو نقل‌قول تکی متوالی درون متن محصور با نقل‌قول تکی بنویسید. هر آنچه درون نقل‌قول‌های تکی قرار دارد علاوه بر این مشمول جایگزینی‌های سبک C برای \n (خط جدید)، \t (تب)، \b (پس‌بر)، \r (بازگشت به ابتدای سطر)، \f (برگه‌شمار)، \digits (هشت‌هشتی)، و \xdigits (شانزده‌شانزدهی) می‌شود. یک بک‌اسلش قبل از هر نویسه دیگر در متن محصور با نقل‌قول تکی، آن نویسه را، هر چه که باشد، نقل‌قول (بی‌اثر) می‌کند.

اگر یک دونقطه بدون علامت نقل‌قول (:) همراه با نام یک متغیر psql درون یک آرگومان ظاهر شود، همان‌طور که در بخش درج متغیرها در SQL (SQL Interpolation) در زیر توضیح داده شده، با مقدار آن متغیر جایگزین می‌شود. قالب‌های :'variable_name' و :"variable_name" که در آنجا شرح داده شده‌اند نیز عمل می‌کنند. نحو :{?variable_name} امکان بررسی تعریف شدن یا نشدن یک متغیر را فراهم می‌کند. این عبارت با TRUE یا FALSE جایگزین می‌شود. فرار دادن (escape) دونقطه با یک بک‌اسلش، آن را از جایگزینی محافظت می‌کند.

درون یک آرگومان، متنی که در بک‌تیک (`) محصور شده است، به عنوان یک خط فرمان در نظر گرفته می‌شود که به شل ارسال می‌گردد. خروجی فرمان (با حذف هرگونه نویسه خط جدید در انتهای آن) جایگزین متن درون بک‌تیک می‌شود. درون متنی که در بک‌تیک محصور است، هیچ نقل‌قول ویژه یا پردازش دیگری رخ نمی‌دهد، به جز اینکه موارد :variable_name که در آن‌ها variable_name یک نام متغیر psql است با مقدار متغیر جایگزین می‌شوند. همچنین، موارد :'variable_name' با مقدار متغیر جایگزین می‌شوند که به شکل مناسبی نقل‌قول شده تا به یک آرگومان واحد در فرمان شل تبدیل شود. (شکل دوم تقریباً همیشه ترجیح داده می‌شود، مگر اینکه کاملاً مطمئن باشید چه چیزی در متغیر قرار دارد.) به دلیل اینکه نویسه‌های بازگشت به ابتدای سطر (carriage return) و سطر جدید (line feed) در همه پلتفرم‌ها نمی‌توانند به شکل امن نقل‌قول شوند، قالب :'variable_name' در صورت ظاهر شدن چنین نویسه‌هایی در مقدار، یک پیام خطا چاپ می‌کند و مقدار متغیر را جایگزین نمی‌نماید.

برخی از دستورها یک شناسه SQL (مانند نام جدول) را به عنوان آرگومان دریافت می‌کنند. این آرگومان‌ها از قواعد نحو SQL پیروی می‌کنند: حروف بدون نقل‌قول به حروف کوچک تبدیل می‌شوند، در حالی که نقل‌قول دوگانه (") حروف را از تبدیل بزرگ/کوچک محافظت می‌کند و امکان گنجاندن فاصله خالی را در شناسه فراهم می‌سازد. درون نقل‌قول دوگانه، دو نقل‌قول دوگانه جفت‌شده به یک نقل‌قول دوگانه منفرد در نام نهایی تقلیل می‌یابند. برای مثال، FOO"BAR"BAZ به صورت fooBARbaz تفسیر می‌شود، و "A weird"" name" تبدیل به A weird" name می‌گردد.

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

بسیاری از متادستورها بر روی بافر پرس‌وجوی جاری (current query buffer) عمل می‌کنند. این صرفاً بافری است که هر متن دستور SQL را که تایپ شده اما هنوز برای اجرا به سرور ارسال نشده است، نگهداری می‌کند. این شامل خطوط ورودی قبلی و همچنین هر متنی است که پیش از متادستور در همان خط قرار دارد.

بسیاری از متادستورها همچنین اجازه می‌دهند که x به عنوان یک گزینه به آن‌ها اضافه شود. این باعث می‌شود که نتایج در حالت گسترده (expanded mode) نمایش داده شوند، درست مانند اینکه از \x یا \pset expanded استفاده شده باشد..PP متا‌دستورهای زیر تعریف شده‌اند:

\a

اگر قالب کنونی خروجی جدول ترازنشده باشد، به تراز‌شده تغییر می‌یابد. اگر ترازنشده نباشد، به ترازنشده تنظیم می‌شود. این دستور برای سازگاری با گذشته حفظ شده است. برای یک راهکار جامع‌تر، \pset را ببینید.

\bind [ parameter ] ...

پارامترهای پرس‌وجو را برای اجرای پرس‌وجوی بعدی تنظیم می‌کند، به‌طوری که پارامترهای مشخص‌شده برای هر جای‌نگه‌دار پارامتر ($1 و غیره) ارسال می‌شوند.

مثال:

INSERT INTO tbl1 VALUES ($1, $2) \bind 'first value' 'second value' \g

این دستور علاوه بر \g، برای سایر دستورهای اجرای پرس‌وجو مانند \gx و \gset نیز کار می‌کند.

این دستور بر خلاف عملکرد عادی psql که از پروتکل پرس‌وجوی ساده استفاده می‌کند، باعث به‌کارگیری پروتکل پرس‌وجوی گسترش‌یافته (ببینید: بخش 54.1.2) می‌شود. بنابراین این دستور می‌تواند برای آزمایش پروتکل پرس‌وجوی گسترش‌یافته از طریق psql مفید باشد. (پروتکل پرس‌وجوی گسترش‌یافته حتی در صورتی که پرس‌وجو هیچ پارامتری نداشته باشد و این دستور صفر پارامتر تعیین کرده باشد نیز استفاده می‌شود.) این دستور تنها بر پرس‌وجوی بعدی که اجرا می‌شود تأثیر می‌گذارد؛ تمام پرس‌وجوهای بعدی به‌طور پیش‌فرض از پروتکل پرس‌وجوی ساده استفاده خواهند کرد.

\bind_named statement_name [ parameter ] ...

دستور \bind_named معادل \bind است، با این تفاوت که نام یک عبارت آماده‌سازی‌شدهٔ موجود را به عنوان اولین پارامتر دریافت می‌کند. یک رشتهٔ خالی نشان‌دهندهٔ عبارت آماده‌سازی‌شدهٔ بی‌نام است.

مثال:

INSERT INTO tbls1 VALUES ($1, $2) \parse stmt1
\bind_named stmt1 'first value' 'second value' \g

این دستور بر خلاف عملکرد عادی psql که از پروتکل پرس‌وجوی ساده استفاده می‌کند، باعث به‌کارگیری پروتکل پرس‌وجوی گسترش‌یافته (ببینید: بخش 54.1.2) می‌شود. بنابراین این دستور می‌تواند برای آزمایش پروتکل پرس‌وجوی گسترش‌یافته از طریق psql مفید باشد.

\c یا \connect [ -reuse-previous=on|off ] [ dbname [ username ] [ host ] [ port ] | conninfo ]

یک اتصال جدید به یک سرور PostgreSQL برقرار می‌کند. پارامترهای اتصالِ مورد استفاده را می‌توان با یک نحو موضعی (یک یا چند مورد از نام پایگاه‌داده، کاربر، میزبان، و درگاه) یا با استفاده از یک رشتهٔ اتصال conninfo همان‌طور که در بخش 32.1.1 شرح داده شده است، تعیین کرد. اگر هیچ آرگومانی داده نشود، اتصال جدیدی با استفاده از همان پارامترهای قبلی برقرار می‌شود.

تعیین هر یک از dbname، username، host یا port به صورت - معادل با حذف آن پارامتر است.

اتصال جدید می‌تواند پارامترهای اتصال را از اتصال قبلی مجدداً استفاده کند؛ نه‌تنها نام پایگاه‌داده، کاربر، میزبان، و درگاه، بلکه سایر تنظیمات نظیر sslmode. به‌طور پیش‌فرض، پارامترها در نحو موضعی مجدداً استفاده می‌شوند، اما هنگام ارائهٔ رشتهٔ conninfo خیر. ارسال اولین آرگومان به صورت -reuse-previous=on یا -reuse-previous=off این حالت پیش‌فرض را لغو می‌کند. اگر پارامترها مجدداً استفاده شوند، هر پارامتری که به‌طور صریح به عنوان یک پارامتر موضعی یا در رشتهٔ conninfo مشخص نشده باشد، از پارامترهای اتصال موجود گرفته می‌شود. یک استثنا این است که اگر تنظیم host از مقدار قبلی خود با استفاده از نحو موضعی تغییر کند، هرگونه تنظیم hostaddr موجود در پارامترهای اتصال کنونی حذف می‌شود. همچنین، هر گذرواژه‌ای که برای اتصال قبلی استفاده شده است، تنها در صورتی مجدداً استفاده خواهد شد که تنظیمات کاربر، میزبان، و درگاه تغییر نکرده باشند. هنگامی که دستور نه پارامتری را مشخص کند و نه مجدداً استفاده نماید، مقدار پیش‌فرض libpq به‌کار می‌رود.

اگر اتصال جدید با موفقیت برقرار شود، اتصال قبلی بسته می‌شود. اگر تلاش برای اتصال با شکست مواجه شود (نام کاربری اشتباه، رد دسترسی، و غیره)، در صورتی که psql در حالت تعاملی باشد، اتصال قبلی حفظ خواهد شد. اما هنگام اجرای یک اسکریپت غیرتعاملی، اتصال قدیمی بسته شده و یک خطا گزارش می‌شود. این ممکن است به پایان یافتن اسکریپت منجر بشود یا نشود؛ اگر نشود، تمام دستورهای دسترسی به پایگاه‌داده تا زمانی که دستور \connect دیگری با موفقیت اجرا شود با شکست مواجه خواهند شد. این تمایز از یک سو برای راحتی کاربر در برابر اشتباهات تایپی و از سوی دیگر به عنوان یک سازوکار ایمنی انتخاب شده تا اسکریپت‌ها به‌طور تصادفی روی پایگاه‌دادهٔ اشتباه عمل نکنند. توجه داشته باشید که هر زمان دستور \connect تلاش می‌کند پارامترها را مجدداً استفاده کند، مقادیر بازاستفاده‌شده متعلق به آخرین اتصال موفق هستند، نه تلاش‌های ناموفقی که پس از آن صورت گرفته‌اند. با این حال، در صورت شکست یک \connect غیرتعاملی، هیچ پارامتری اجازهٔ استفادهٔ مجدد بعدی را ندارد، چرا که اسکریپت احتمالاً انتظار بازاستفاده از مقادیر حاصل از \connect شکست‌خورده را خواهد داشت.

مثال‌ها:

=> \c mydb myuser host.dom 6432
=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c -reuse-previous=on sslmode=require    -- changes only sslmode
=> \c postgresql://tom@localhost/mydb?application_name=myapp

\C [ title ]

عنوان هر جدولی را که به عنوان نتیجهٔ یک پرس‌وجو چاپ می‌شود تنظیم کرده یا هرگونه عنوان این‌چنینی را حذف می‌کند. این دستور معادل \pset title title است. (نام این دستور از “caption” گرفته شده است، زیرا قبلاً فقط برای تعیین عنوان در جدول HTML به‌کار می‌رفت.)

\cd [ directory ]

دایرکتوری کاری فعلی را به directory تغییر می‌دهد. بدون آرگومان، به دایرکتوری خانگی کاربر جاری تغییر می‌یابد. برای جزئیات در مورد نحوهٔ یافتن دایرکتوری‌های خانگی، ببینید: بخش 32.16.

نکته
برای چاپ دایرکتوری کاری فعلی خود، از \! pwd استفاده کنید.

\close_prepared prepared_statement_name

عبارت آماده‌سازی‌شدهٔ مشخص را می‌بندد. یک رشتهٔ خالی نشان‌دهندهٔ عبارت آماده‌سازی‌شدهٔ بی‌نام است. اگر هیچ عبارت آماده‌سازی‌شده‌ای با این نام وجود نداشته باشد، این عملیات هیچ اثری نخواهد داشت (no-op).

مثال:

SELECT $1 \parse stmt1
\close_prepared stmt1

این دستور بر خلاف عملکرد عادی psql که از پروتکل پرس‌وجوی ساده استفاده می‌کند، باعث به‌کارگیری پروتکل پرس‌وجوی گسترش‌یافته می‌شود. بنابراین این دستور می‌تواند برای آزمایش پروتکل پرس‌وجوی گسترش‌یافته از طریق psql مفید باشد.

\conninfo

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

توجه داشته باشید که فیلد Client User کاربر را در زمان برقراری اتصال نشان می‌دهد، در حالی که فیلد Superuser مشخص می‌کند که آیا کاربر فعلی (در بافت اجرایی جاری) از امتیازات مدیر سیستم (superuser) برخوردار است یا خیر. این کاربران معمولاً یکسان هستند، اما می‌توانند متفاوت باشند، برای مثال اگر کاربر فعلی با دستور SET ROLE تغییر کرده باشد.

\copy { table [ ( column_list ) ] } from { 'filename' | program 'command' | stdin | pstdin } [ [ with ] ( option [, ...] ) ] [ where condition ]
\copy { table [ ( column_list ) ] | ( query ) } to { 'filename' | program 'command' | stdout | pstdout } [ [ with ] ( option [, ...] ) ]

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

هنگامی که program مشخص شده باشد، command توسط psql اجرا می‌شود و داده‌های ارسال‌شده از یا به command میان سرور و کلاینت هدایت می‌شوند. مجدداً، امتیازات اجرا متعلق به کاربر محلی است نه سرور، و نیازی به امتیازات مدیر سیستم در SQL نیست.

برای \copy ... from stdin، سطرهای داده از همان منبعی که دستور را صادر کرده خوانده می‌شوند، و تا زمانی که خطی فقط شامل \. خوانده شود یا جریان داده به EOF برسد ادامه می‌یابد. این گزینه برای پر کردن جدول‌ها به‌صورت درخط در یک فایل اسکریپت SQL مفید است. برای \copy ... to stdout، خروجی به همان جایی ارسال می‌شود که خروجی دستورهای psql فرستاده می‌شود، و وضعیت دستور COPY count چاپ نمی‌شود (زیرا ممکن است با یک سطر داده اشتباه گرفته شود). برای خواندن/نوشتن در ورودی یا خروجی استاندارد psql، بدون در نظر گرفتن منبع دستور جاری یا گزینهٔ \o، عبارت from pstdin یا to pstdout را بنویسید.

نحو این دستور مشابه دستور COPY در SQL است. تمام گزینه‌ها به غیر از مبدأ/مقصد داده، همانند مواردی هستند که برای COPY مشخص شده‌اند. به همین دلیل، قواعد تجزیهٔ نحوی ویژه‌ای بر متا‌دستور \copy اعمال می‌شود. برخلاف اغلب متا‌دستورهای دیگر، کل باقی‌ماندهٔ خط همیشه به عنوان آرگومان‌های \copy در نظر گرفته می‌شود، و نه جای‌گذاری متغیر و نه بسط بک‌تیک در آرگومان‌ها انجام نمی‌شود.


نکته
روش دیگر برای دستیابی به همان نتیجهٔ \copy ... to، استفاده از دستور SQL به‌صورت COPY ... TO STDOUT و پایان دادن به آن با \g filename یا \g |program است. برخلاف \copy، این روش به دستور امکان می‌دهد که در چند خط گسترده شود؛ همچنین می‌توان از جای‌گذاری متغیرها و بسط بک‌تیک استفاده کرد.

نکته
این عملیات‌ها به اندازهٔ دستور COPY در SQL با مبدأ یا مقصد دادهٔ فایلی یا برنامه‌ای کارآمد نیستند، چرا که تمام داده‌ها باید از طریق اتصال کلاینت/سرور عبور کنند. برای حجم زیادی از داده‌ها، ممکن است دستور SQL ارجحیت داشته باشد.
\copyright
شرایط کپی‌رایت و توزیع PostgreSQL را نمایش می‌دهد.

\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]

بافر پرسمان فعلی را (مانند \g) اجرا کرده و نتایج را در یک جدول متقاطع (crosstab grid) نمایش می‌دهد. پرسمان باید حداقل سه ستون برگرداند. ستون خروجی مشخص‌شده توسط colV به یک سرستون عمودی و ستون خروجی مشخص‌شده توسط colH به یک سرستون افقی تبدیل می‌شود. colD ستون خروجی جهت نمایش درون جدول را مشخص می‌کند. sortcolH یک ستون مرتب‌سازی اختیاری برای سرستون افقی تعیین می‌کند.

مشخصات هر ستون می‌تواند یک شماره ستون (شروع از ۱) یا یک نام ستون باشد. قواعد معمول SQL برای تبدیل حروف بزرگ و کوچک و استفاده از علامت نقل‌قول در نام ستون‌ها اعمال می‌شود. در صورت حذف، colV به عنوان ستون ۱ و colH به عنوان ستون ۲ در نظر گرفته می‌شود. colH باید با colV متفاوت باشد. اگر colD مشخص نشده باشد، باید دقیقاً سه ستون در نتیجه پرسمان وجود داشته باشد، و ستونی که نه colV است و نه colH، به عنوان colD در نظر گرفته می‌شود.

سرستون عمودی که در سمت چپ‌ترین ستون نمایش داده می‌شود، شامل مقادیر موجود در ستون colV با همان ترتیب موجود در نتایج پرسمان، اما با حذف موارد تکراری است.

سرستون افقی که در سطر اول نمایش داده می‌شود، شامل مقادیر موجود در ستون colH با حذف موارد تکراری است. به‌طور پیش‌فرض، این مقادیر با همان ترتیب موجود در نتایج پرسمان ظاهر می‌شوند. اما اگر آرگومان اختیاری sortcolH داده شود، ستونی را مشخص می‌کند که مقادیر آن باید اعداد صحیح باشند و مقادیر colH در سرستون افقی، مرتب‌شده بر اساس مقادیر متناظر sortcolH ظاهر خواهند شد.

درون جدول متقاطع، برای هر مقدار متمایز x از colH و هر مقدار متمایز y از colV، خانه‌ای که در تقاطع (x,y) قرار دارد حاوی مقدار ستون colD در سطر نتیجه پرسمان است که در آن مقدار colH برابر با x و مقدار colV برابر با y است. اگر چنین سطری وجود نداشته باشد، خانه خالی می‌ماند. اگر چندین سطر این‌چنینی وجود داشته باشد، یک خطا گزارش می‌شود.

\d[Sx+] [ pattern ]

برای هر رابطه (جدول، view، نمای مادی‌شده (materialized view)، ایندکس، دنباله یا جدول خارجی) یا نوع مرکب (composite type) که با pattern مطابقت داشته باشد، تمام ستون‌ها، نوع‌های آن‌ها، tablespace (در صورتی که پیش‌فرض نباشد) و هر ویژگی خاص مانند NOT NULL یا مقادیر پیش‌فرض را نشان می‌دهد. ایندکس‌ها، محدودیت‌ها (constraints)، قواعد (rules) و تریگرهای مرتبط نیز نمایش داده می‌شوند. برای جدول‌های خارجی، foreign server مرتبط نیز نشان داده می‌شود. (“مطابقت با الگو” در بخش Patterns در زیر تعریف شده است.)

برای برخی از انواع رابطه‌ها، \d اطلاعات بیشتری را برای هر ستون نمایش می‌دهد: مقادیر ستون برای دنباله‌ها، عبارت‌های ایندکس‌شده برای ایندکس‌ها، و گزینه‌های foreign data wrapper برای جدول‌های خارجی.

شکل دستوری \d+ مشابه است، با این تفاوت که اطلاعات بیشتری نمایش داده می‌شود: هرگونه یادداشت (comment) مرتبط با ستون‌های جدول نمایش داده می‌شود، همچنین حضور OIDها در جدول، تعریف view در صورتی که رابطه یک view باشد، تنظیمات غیرپیش‌فرض replica identity و در صورتی که رابطه دارای روش دسترسی باشد، نام access method نمایش داده می‌شود.

به‌طور پیش‌فرض، فقط اشیاء ایجادشده توسط کاربر نمایش داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا اصلاح‌کننده S را ارائه دهید.


یادداشت
اگر \d بدون آرگومان pattern استفاده شود، معادل \dtvmsE خواهد بود که فهرستی از تمام جدول‌ها، viewها، viewهای مادی‌شده، دنباله‌ها و جدول‌های خارجی قابل مشاهده را نمایش می‌دهد. این فقط یک قابلیت برای راحتی کار است.

مانند بسیاری از دستورهای دیگر، اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده (expanded mode) نمایش داده می‌شوند، اما توجه داشته باشید که این ویژگی تنها زمانی اعمال می‌شود که \d بدون آرگومان pattern استفاده شود، و اصلاح‌کننده x نمی‌تواند بلافاصله بعد از \d بیاید (زیرا \dx دستور متفاوتی است)؛ اصلاح‌کننده x تنها می‌تواند پس از اصلاح‌کننده S یا + قرار گیرد. برای مثال، \d+x معادل \dtvmsE+x است و فهرستی از تمام رابطه‌ها را در حالت گسترده نمایش خواهد داد.

\da[Sx] [ pattern ]

توابع تجمعی (aggregate functions) را به همراه نوع بازگشتی و نوع‌های داده‌ای که روی آن‌ها عمل می‌کنند فهرست می‌کند. اگر pattern مشخص شده باشد، فقط توابع تجمعی که نام آن‌ها با الگو مطابقت دارد نمایش داده می‌شوند. به‌طور پیش‌فرض، فقط اشیاء ایجادشده توسط کاربر نمایش داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا اصلاح‌کننده S را ارائه دهید. اگر x به انتهای نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند.

\dA[x+] [ pattern ]

روش‌های دسترسی (access methods) را فهرست می‌کند. اگر pattern مشخص شده باشد، فقط روش‌های دسترسی که نام آن‌ها با الگو مطابقت دارد نمایش داده می‌شوند. اگر x به انتهای نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور افزوده شود، هر روش دسترسی به همراه تابع گرداننده (handler function) و توضیحات مرتبط با آن فهرست می‌شود.

\dAc[x+] [access-method-pattern [input-type-pattern]]

کلاس‌های عملگر (operator classes) را فهرست می‌کند (بخش 36.16.1 را ببینید). اگر access-method-pattern مشخص شده باشد، فقط کلاس‌های عملگر مرتبط با روش‌های دسترسی که نام آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر input-type-pattern مشخص شده باشد، فقط کلاس‌های عملگر مرتبط با نوع‌های ورودی که نام آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور افزوده شود، هر کلاس عملگر به همراه خانواده عملگر (operator family) و مالک مربوطه‌اش فهرست می‌شود.

\dAf[x+] [access-method-pattern [input-type-pattern]]

خانواده‌های عملگر (operator families) را فهرست می‌کند (بخش 36.16.5 را ببینید). اگر access-method-pattern مشخص شده باشد، فقط خانواده‌های عملگر مرتبط با روش‌های دسترسی که نام آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر input-type-pattern مشخص شده باشد، فقط خانواده‌های عملگر مرتبط با نوع‌های ورودی که نام آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور افزوده شود، هر خانواده عملگر به همراه مالک آن فهرست می‌شود.

\dAo[x+] [access-method-pattern [operator-family-pattern]]

عملگرهای مرتبط با خانواده‌های عملگر را فهرست می‌کند (بخش 36.16.2 را ببینید). اگر access-method-pattern مشخص شده باشد، فقط اعضای خانواده‌های عملگر مرتبط با روش‌های دسترسی که نام آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر operator-family-pattern مشخص شده باشد، فقط اعضای خانواده‌های عملگر که نام آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور افزوده شود، هر عملگر به همراه خانواده عملگر مرتب‌سازی آن (در صورتی که یک عملگر ترتیبی باشد)، و این که آیا تابع زیربنایی آن ضد نشت (leakproof) است یا خیر، فهرست می‌شود. \dAp[x+] [access-method-pattern [operator-family-pattern]]
توابع پشتیبان مرتبط با خانواده‌های عملگر (operator families) را فهرست می‌کند (بخش 36.16.3 را ببینید). اگر access-method-pattern مشخص شده باشد، تنها توابع مربوط به خانواده‌های عملگری که با روش‌های دسترسی منطبق با آن الگو در ارتباط هستند فهرست می‌شوند. اگر operator-family-pattern مشخص شده باشد، تنها توابع مربوط به خانواده‌های عملگری که نام آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده (expanded mode) نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، توابع با جزئیات کامل و همراه با فهرست پارامترهای واقعی‌شان نمایش داده می‌شوند.

\db[x+] [ pattern ]

فضاهای جدول (tablespaces) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها فضاهای جدولی که نام آن‌ها با الگو مطابقت دارد نمایش داده می‌شوند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، هر فضای جدول به همراه گزینه‌های مرتبط، اندازه روی دیسک، مجوزها و توضیحات آن فهرست می‌شود.

\dc[Sx+] [ pattern ]

تبدیل‌ها میان کدگذاری‌های مجموعه نویسه (character-set encodings) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها تبدیل‌هایی که نام آن‌ها با الگو مطابقت دارد فهرست می‌شوند. به‌طور پیش‌فرض، تنها اشیای ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیای سیستمی، یک الگو یا اصلاح‌کنندهٔ S را ارائه دهید. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، هر شیء به همراه توضیحات مرتبط با آن فهرست می‌شود.

\dconfig[x+] [ pattern ]

پارامترهای پیکربندی سرور و مقادیر آن‌ها را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها پارامترهایی که نام آن‌ها با الگو مطابقت دارد فهرست می‌شوند. بدون pattern، تنها پارامترهایی که روی مقادیری غیر از پیش‌فرض تنظیم شده‌اند فهرست می‌شوند. (برای مشاهدهٔ تمام پارامترها از \dconfig * استفاده کنید.) اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، هر پارامتر به همراه نوع داده، زمینه‌ای (context) که پارامتر در آن قابل تنظیم است و مجوزهای دسترسی (در صورتی که مجوزهای دسترسی غیرپیش‌فرض اعطا شده باشد) فهرست می‌شود.

\dC[x+] [ pattern ]

تبدیل‌های نوع داده (type casts) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها تبدیل‌هایی که نوع مبدأ یا مقصد آن‌ها با الگو مطابقت دارد فهرست می‌شوند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، اطلاعات تکمیلی درباره هر تبدیل نوع نشان داده می‌شود، از جمله این‌که آیا تابع زیربنایی آن leakproof است یا خیر، و همچنین توضیحات تبدیل نوع.

\dd[Sx] [ pattern ]

توضیحات اشیایی از نوع constraint، operator class، operator family، rule، و trigger را نشان می‌دهد. سایر کامنت‌ها را می‌توان با دستورهای بک‌اسلش مربوط به آن انواع شیء مشاهده کرد.

\dd توضیحات مربوط به اشیای منطبق با pattern، یا در صورت عدم ارائه آرگومان، اشیای قابل مشاهده از نوع مناسب را نمایش می‌دهد. اما در هر دو حالت، تنها اشیایی که دارای توضیحات هستند فهرست می‌شوند. به‌طور پیش‌فرض، تنها اشیای ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیای سیستمی، یک الگو یا اصلاح‌کنندهٔ S را ارائه دهید. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند.

توضیحات اشیاء را می‌توان با دستور SQL COMMENT ایجاد کرد.

\dD[Sx+] [ pattern ]

دامنه‌ها (domains) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها دامنه‌هایی که نام آن‌ها با الگو مطابقت دارد نمایش داده می‌شوند. به‌طور پیش‌فرض، تنها اشیای ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیای سیستمی، یک الگو یا اصلاح‌کنندهٔ S را ارائه دهید. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، هر شیء به همراه مجوزها و توضیحات مرتبط با آن فهرست می‌شود.

\ddp[x] [ pattern ]

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

دستور ALTER DEFAULT PRIVILEGES برای تنظیم مجوزهای دسترسی پیش‌فرض به کار می‌رود. مفهوم نحوهٔ نمایش مجوزها در بخش 5.8 توضیح داده شده است.

\dE[Sx+] [ pattern ]
\di[Sx+] [ pattern ]
\dm[Sx+] [ pattern ]
\ds[Sx+] [ pattern ]
\dt[Sx+] [ pattern ]
\dv[Sx+] [ pattern ]

در این گروه از دستورها، حروف E، i، m، s، t، و v به ترتیب نشان‌دهندهٔ foreign table، index، materialized view، sequence، table و view هستند. می‌توانید هر یک یا تمام این حروف را، با هر ترتیبی، برای دریافت فهرستی از اشیایی از این نوع‌ها مشخص کنید. به عنوان مثال، \dti جدول‌ها و شاخص‌ها را فهرست می‌کند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، هر شیء به همراه وضعیت ماندگاری آن (permanent، temporary، یا unlogged)، اندازهٔ فیزیکی روی دیسک، و توضیحات مرتبط (در صورت وجود) فهرست می‌شود. اگر pattern مشخص شده باشد، تنها اشیایی که نام آن‌ها با الگو مطابقت دارد فهرست می‌شوند. به‌طور پیش‌فرض، تنها اشیای ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیای سیستمی، یک الگو یا اصلاح‌کنندهٔ S را ارائه دهید.

\des[x+] [ pattern ]

سرورهای خارجی (foreign servers؛ سرواژهٔ یادیار: “external servers”) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها سرورهایی که نام آن‌ها با الگو مطابقت دارد فهرست می‌شوند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، شرح کاملی از هر سرور نمایش داده می‌شود، شامل مجوزهای دسترسی سرور، نوع، نسخه، گزینه‌ها و توضیحات آن.

\det[x+] [ pattern ]

جدول‌های خارجی (foreign tables؛ سرواژهٔ یادیار: “external tables”) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها مدخل‌هایی که نام جدول یا نام طرح‌وارهٔ آن‌ها با الگو مطابقت دارد فهرست می‌شوند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، گزینه‌های عمومی و توضیحات جدول خارجی نیز نمایش داده می‌شوند.

\deu[x+] [ pattern ]

نگاشت‌های کاربر (user mappings؛ سرواژهٔ یادیار: “external users”) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها نگاشت‌هایی که نام کاربری آن‌ها با الگو مطابقت دارد فهرست می‌شوند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، اطلاعات تکمیلی درباره هر نگاشت نمایش داده می‌شود.

احتیاط
\deu+ ممکن است نام کاربری و گذرواژهٔ کاربر دوردست را نیز نمایش دهد، بنابراین باید احتیاط شود تا آن‌ها فاش نشوند.

\dew[x+] [ pattern ]

پوشش‌های داده‌های خارجی (foreign-data wrappers؛ سرواژهٔ یادیار: “external wrappers”) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها پوشش‌های داده‌های خارجی که نام آن‌ها با الگو مطابقت دارد فهرست می‌شوند. اگر x به نام دستور افزوده شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور افزوده شود، مجوزهای دسترسی، گزینه‌ها و توضیحات foreign-data wrapper نیز نشان داده می‌شوند. \df[anptwSx+] [ pattern [ arg_pattern ... ] ]
توابع را همراه با انواع داده‌ای نتیجه، انواع داده‌ای آرگومان، و انواع تابع فهرست می‌کند که در دسته‌های “agg” (تجمیعی یا aggregate)، “normal”، “procedure”، “trigger” یا “window” طبقه‌بندی می‌شوند. برای نمایش تنها توابع با نوع (یا انواع) خاص، حروف متناظر a، n، p، t یا w را به دستور اضافه کنید. اگر pattern مشخص شده باشد، تنها توابعی که نامشان با الگو مطابقت دارد نشان داده می‌شوند. هر آرگومان اضافی، الگوی نام نوع داده است که با نام نوع آرگومان‌های اول، دوم و به همین ترتیبِ تابع مطابقت داده می‌شود. (توابع منطبق می‌توانند آرگومان‌های بیشتری نسبت به آنچه مشخص کرده‌اید داشته باشند؛ برای جلوگیری از آن، یک خط تیره - را به عنوان آخرین arg_pattern بنویسید.) به‌طور پیش‌فرض، فقط اشیاء ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا تغییردهندهٔ S را ارائه دهید. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده (expanded mode) نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، اطلاعات بیشتری درباره هر تابع نشان داده می‌شود، از جمله تغییرپذیری (volatility)، ایمنی اجرای موازی (parallel safety)، مالک، دسته‌بندی امنیتی، نشت‌ناپذیر بودن (leakproof)، امتیازات دسترسی، زبان، نام داخلی (تنها برای توابع C و داخلی)، و توضیحات. کد منبع یک تابع خاص را می‌توان با استفاده از \sf مشاهده کرد.

\dF[x+] [ pattern ]

پیکربندی‌های جستجوی متن (text search configurations) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها پیکربندی‌هایی که نامشان با الگو مطابقت دارد نمایش داده می‌شوند. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، توضیحات کامل هر پیکربندی شامل تجزیه‌کنندهٔ جستجوی متن (text search parser) زیرین و فهرست واژه‌نامه‌ها برای هر نوع نشانه (token type) تجزیه‌کننده نمایش داده می‌شود.

\dFd[x+] [ pattern ]

واژه‌نامه‌های جستجوی متن (text search dictionaries) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها واژه‌نامه‌هایی که نامشان با الگو مطابقت دارد نمایش داده می‌شوند. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، اطلاعات بیشتری درباره هر واژه‌نامهٔ انتخاب‌شده، از جمله الگوی جستجوی متن زیرین و مقادیر گزینه‌ها نمایش داده می‌شود.

\dFp[x+] [ pattern ]

تجزیه‌کننده‌های جستجوی متن (text search parsers) را فهرست می‌کند. اگر pattern مشخص شده باشد، تنها تجزیه‌کننده‌هایی که نامشان با الگو مطابقت دارد نشان داده می‌شوند. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، شرح کاملی از هر تجزیه‌کننده شامل توابع زیرین و فهرست انواع نشانه‌های شناخته‌شده نمایش داده می‌شود.

\dFt[x+] [ pattern ]

الگوهای جستجوی متن (text search templates) را فهرست می‌کند. اگر pattern مشخص شده باشد، فقط الگوهایی که نامشان با الگو مطابقت دارد نمایش داده می‌شوند. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، اطلاعات بیشتری درباره هر الگو از جمله نام توابع زیرین نمایش داده می‌شود.

\dg[Sx+] [ pattern ]

نقش‌های پایگاه‌داده (database roles) را فهرست می‌کند. (از آنجا که مفاهیم “users” و “groups” در “roles” ادغام شده‌اند، این دستور اکنون معادل \du است.) به‌طور پیش‌فرض، فقط نقش‌های ایجادشده توسط کاربر نشان داده می‌شوند؛ تغییردهندهٔ S را برای گنجاندن نقش‌های سیستمی ارائه دهید. اگر pattern مشخص شده باشد، فقط نقش‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، اطلاعات بیشتری درباره هر نقش نشان داده می‌شود؛ در حال حاضر این گزینه توضیح (comment) مربوط به هر نقش را اضافه می‌کند.

\dl[x+]

این یک نام مستعار برای \lo_list است که فهرستی از اشیاء بزرگ (large objects) را نشان می‌دهد. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، هر شیء بزرگ همراه با مجوزهای مربوط به آن (در صورت وجود) فهرست می‌شود.

\dL[Sx+] [ pattern ]

زبان‌های رویه‌ای (procedural languages) را فهرست می‌کند. اگر pattern مشخص شده باشد، فقط زبان‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. به‌طور پیش‌فرض، فقط زبان‌های ایجادشده توسط کاربر نشان داده می‌شوند؛ تغییردهندهٔ S را برای گنجاندن اشیاء سیستمی ارائه دهید. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، هر زبان همراه با گرداننده فراخوانی (call handler)، اعتبارسنج (validator)، امتیازات دسترسی، و اینکه آیا یک شیء سیستمی است یا خیر فهرست می‌شود.

\dn[Sx+] [ pattern ]

طرحواره‌ها یا اسکیماها (فضاهای نام) را فهرست می‌کند. اگر pattern مشخص شده باشد، فقط طرحواره‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. به‌طور پیش‌فرض، فقط اشیاء ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا تغییردهندهٔ S را ارائه دهید. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، هر شیء همراه با مجوزها و توضیحات مربوطه‌اش (در صورت وجود) فهرست می‌شود.

\do[Sx+] [ pattern [ arg_pattern [ arg_pattern ] ] ]

عملگرها را همراه با نوع عملوندها و نتایجشان فهرست می‌کند. اگر pattern مشخص شده باشد، فقط عملگرهایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر یک arg_pattern مشخص شده باشد، فقط عملگرهای پیشوندی که نام نوع آرگومان راست آن‌ها با آن الگو مطابقت دارد فهرست می‌شوند. اگر دو arg_pattern مشخص شده باشد، فقط عملگرهای دودویی که نام نوع آرگومان‌های آن‌ها با آن الگوها مطابقت دارد فهرست می‌شوند. (به عنوان جایگزین، برای آرگومان استفاده‌نشدهٔ یک عملگر یکانی، یک - بنویسید.) به‌طور پیش‌فرض، فقط اشیاء ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا تغییردهندهٔ S را ارائه دهید. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، اطلاعات بیشتری درباره هر عملگر نشان داده می‌شود، از جمله نام تابع زیرین و نشت‌ناپذیر بودن (leakproof) آن.

\dO[Sx+] [ pattern ]

ترتیب‌های تطبیق (collations) را فهرست می‌کند. اگر pattern مشخص شده باشد، فقط ترتیب‌های تطبیقی که نامشان با الگو مطابقت دارد فهرست می‌شوند. به‌طور پیش‌فرض، فقط اشیاء ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا تغییردهندهٔ S را ارائه دهید. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، هر ترتیب تطبیق همراه با توضیحات مرتبط با آن (در صورت وجود) فهرست می‌شود. توجه داشته باشید که فقط ترتیب‌های تطبیقِ قابل استفاده با کدگذاری پایگاه‌دادهٔ فعلی نمایش داده می‌شوند، بنابراین نتایج ممکن است در پایگاه‌های دادهٔ مختلف از یک نصب یکسان متفاوت باشد.

\dp[Sx] [ pattern ]

جدول‌ها، نماها (views) و دنباله‌ها (sequences) را همراه با امتیازات دسترسی مربوطه‌شان فهرست می‌کند. اگر pattern مشخص شده باشد، فقط جدول‌ها، نماها و دنباله‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. به‌طور پیش‌فرض فقط اشیاء ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا تغییردهندهٔ S را ارائه دهید. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند.

دستورهای GRANT و REVOKE برای تعیین امتیازات دسترسی استفاده می‌شوند. معنای نمایش امتیازات در بخش 5.8 توضیح داده شده است.

\dP[itnx+] [ pattern ]

رابطه‌های افرازبندی‌شده (partitioned relations) را فهرست می‌کند. اگر pattern مشخص شده باشد، فقط مدخل‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. تغییردهنده‌های t (جدول‌ها) و i (شاخص‌ها) می‌توانند به دستور افزوده شوند و نوع رابطه‌ها را برای فهرست کردن فیلتر کنند. به‌طور پیش‌فرض، جدول‌ها و شاخص‌های افرازبندی‌شده فهرست می‌شوند.

اگر تغییردهندهٔ n (“nested”) استفاده شود، یا یک الگو مشخص شده باشد، آن‌گاه رابطه‌های افرازبندی‌شده غیرریشه گنجانده می‌شوند، و ستونی نمایش داده می‌شود که والد هر رابطهٔ افرازبندی‌شده را نشان می‌دهد.

اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به نام دستور ضمیمه شود، مجموع اندازهٔ پارتیشن‌های هر رابطه نیز همراه با توضیحات رابطه نمایش داده می‌شود. اگر n با + ترکیب شود، دو اندازه نشان داده می‌شود: یکی شامل اندازه کل پارتیشن‌های برگ مستقیماً متصل، و دیگری اندازه کل همه پارتیشن‌ها از جمله زیرپارتیشن‌های غیرمستقیم متصل را نمایش می‌دهد. \drds[x] [ role-pattern [ database-pattern ] ]

تنظیمات پیکربندی تعریف‌شده را فهرست می‌کند. این تنظیمات می‌توانند مختص به نقش (role-specific)، مختص به پایگاه‌داده (database-specific)، یا هر دو باشند. role-pattern و database-pattern به ترتیب برای انتخاب نقش‌ها و پایگاه‌های دادهٔ مشخص جهت فهرست شدن به کار می‌روند. در صورت حذف یا در صورتی که * مشخص شود، همهٔ تنظیمات، از جمله مواردی که به ترتیب مختص به نقش یا مختص به پایگاه‌داده نیستند، فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده (expanded mode) نمایش داده می‌شوند.

دستورهای ALTER ROLE و ALTER DATABASE برای تعریف تنظیمات پیکربندی به‌ازای هر نقش و به‌ازای هر پایگاه‌داده به کار می‌روند.

\drg[Sx] [ pattern ]

اطلاعات مربوط به هر عضویت نقش اعطاشده را به همراه گزینه‌های تخصیص‌یافته (ADMIN، INHERIT و/یا SET) و اعطاکننده (grantor) فهرست می‌کند. برای کسب اطلاعات دربارهٔ عضویت‌های نقش، دستور GRANT را ببینید.

به‌طور پیش‌فرض، فقط اعطاها به نقش‌های ایجادشده توسط کاربر نشان داده می‌شوند؛ تغییردهندهٔ S را برای گنجاندن نقش‌های سیستمی اضافه کنید. اگر pattern مشخص شود، تنها اعطاها به نقش‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند.

\dRp[x+] [ pattern ]

انتشارهای همانندسازی (replication publications) را فهرست می‌کند. اگر pattern مشخص شود، تنها انتشارهایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور اضافه شود، جدول‌ها و طرحواره‌های (schemas) مرتبط با هر انتشار نیز نشان داده می‌شوند.

\dRs[x+] [ pattern ]

اشتراک‌های همانندسازی (replication subscriptions) را فهرست می‌کند. اگر pattern مشخص شود، تنها اشتراک‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور اضافه شود، ویژگی‌های بیشتری از اشتراک‌ها نشان داده می‌شوند.

\dT[Sx+] [ pattern ]

انواع داده را فهرست می‌کند. اگر pattern مشخص شود، تنها انواعی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور افزوده شود، هر نوع همراه با نام و اندازهٔ داخلی آن، مقادیر مجاز در صورتی که یک نوع enum باشد، و مجوزهای مرتبط با آن فهرست می‌شود. به‌طور پیش‌فرض، تنها اشیاء ایجادشده توسط کاربر نشان داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا تغییردهندهٔ S را ارائه دهید.

\du[Sx+] [ pattern ]

نقش‌های پایگاه‌داده را فهرست می‌کند. (از آنجا که مفاهیم “کاربران” و “گروه‌ها” در “نقش‌ها” ادغام شده‌اند، این دستور اکنون معادل \dg است.) به‌طور پیش‌فرض، تنها نقش‌های ایجادشده توسط کاربر نشان داده می‌شوند؛ تغییردهندهٔ S را برای گنجاندن نقش‌های سیستمی اضافه کنید. اگر pattern مشخص شود، تنها نقش‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور اضافه شود، اطلاعات بیشتری دربارهٔ هر نقش نشان داده می‌شود؛ در حال حاضر این گزینه توضیح (comment) مربوط به هر نقش را اضافه می‌کند.

\dx[x+] [ pattern ]

افزونه‌های نصب‌شده را فهرست می‌کند. اگر pattern مشخص شود، تنها افزونه‌هایی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور اضافه شود، تمام اشیاء متعلق به هر افزونهٔ منطبق فهرست می‌شوند.

\dX[x] [ pattern ]

آمارهای گسترش‌یافته (extended statistics) را فهرست می‌کند. اگر pattern مشخص شود، تنها آمارهای گسترش‌یافته‌ای که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند.

وضعیت هر نوع از آمارهای گسترش‌یافته در ستونی به نام همان نوع آمار (مانند Ndistinct) نشان داده می‌شود. مقدار defined به این معنی است که هنگام ایجاد آمار درخواست شده بوده است، و مقدار NULL به این معنی است که درخواست نشده بوده است. اگر مایلید بدانید که آیا ANALYZE اجرا شده و آمارها در دسترس برنامه‌ریز (planner) هستند یا خیر، می‌توانید از pg_stats_ext استفاده کنید.

\dy[x+] [ pattern ]

تریگرهای رویداد (event triggers) را فهرست می‌کند. اگر pattern مشخص شود، تنها تریگرهای رویدادی که نامشان با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور اضافه شود، هر شیء به همراه توضیحات مرتبط با آن فهرست می‌شود.

\e یا \edit [ filename ] [ line_number ]

اگر filename مشخص شود، فایل ویرایش می‌شود؛ پس از خروج از ویرایشگر، محتوای فایل در بافر پرسمان جاری کپی می‌شود. اگر هیچ filename داده نشود، بافر پرسمان جاری به یک فایل موقت کپی شده که سپس به همان شیوه ویرایش می‌شود. یا، در صورتی که بافر پرسمان جاری خالی باشد، آخرین پرسمان اجراشده در یک فایل موقت کپی شده و به همان شیوه ویرایش می‌شود.

اگر فایلی یا پرسمان قبلی را ویرایش کنید، و بدون تغییر دادن فایل از ویرایشگر خارج شوید، بافر پرسمان پاک می‌شود. در غیر این صورت، محتوای جدید بافر پرسمان طبق قواعد معمول psql و با رفتار با کل بافر به عنوان یک خط واحد، مجدداً تجزیه می‌شود. هر پرسمانِ کامل بلافاصله اجرا می‌شود؛ به این معنی که اگر بافر پرسمان حاوی یک نقطه ویرگول (semicolon) باشد یا با آن پایان یابد، همه چیز تا آن نقطه اجرا شده و از بافر پرسمان حذف می‌شود. هر آنچه در بافر پرسمان باقی بماند دوباره نمایش داده می‌شود. نقطه ویرگول یا \g را برای ارسال آن تایپ کنید، یا \r را برای لغو آن از طریق پاک کردن بافر پرسمان وارد نمایید.

رفتار با بافر به عنوان یک تک‌خط، عمدتاً بر متادستورها تأثیر می‌گذارد: هر آنچه پس از یک متادستور در بافر قرار گیرد به عنوان آرگومان(های) آن متادستور در نظر گرفته می‌شود، حتی اگر در چندین خط گسترده شده باشد. (بنابراین نمی‌توانید از این طریق اسکریپت‌هایی با متادستور بسازید. برای این کار از \i استفاده کنید.)

اگر شمارهٔ خط مشخص شده باشد، psql مکان‌نما را روی خط مشخص‌شده از فایل یا بافر پرسمان قرار می‌دهد. توجه داشته باشید که اگر یک تک‌آرگومانِ کاملاً عددی داده شود، psql آن را شمارهٔ خط فرض می‌کند، نه نام فایل.


نکته
برای نحوهٔ پیکربندی و سفارشی‌سازی ویرایشگر خود، بخش Environment در ادامه را ببینید.

\echo text [ ... ]

آرگومان‌های ارزیابی‌شده را در خروجی استاندارد چاپ می‌کند که با فاصله از هم جدا شده و به دنبال آن‌ها یک خط جدید قرار می‌گیرد. این دستور می‌تواند برای درج اطلاعات در بین خروجی اسکریپت‌ها مفید باشد. به عنوان مثال:
=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999

اگر نخستین آرگومان یک -n بدون نقل‌قول باشد، خط جدید انتهایی نوشته نمی‌شود (و آرگومان نخست نیز نوشته نمی‌شود).


نکته
اگر از دستور \o برای تغییر مسیر خروجی پرسمان خود استفاده می‌کنید، ممکن است بخواهید به جای این دستور از \qecho استفاده کنید. همچنین \warn را ببینید.
\ef [ function_description [ line_number ] ]
این دستور تعریف تابع یا رویهٔ (procedure) مشخص‌شده را در قالب یک دستور CREATE OR REPLACE FUNCTION یا CREATE OR REPLACE PROCEDURE واکشی کرده و برای ویرایش باز می‌کند. ویرایش به همان روش دستور \edit انجام می‌شود. اگر ویرایشگر را بدون ذخیره کردن ترک کنید، عبارت نادیده گرفته می‌شود. اگر ذخیره کرده و خارج شوید، در صورتی که یک نقطه‌ویرگول (semicolon) به آن اضافه کرده باشید، دستور به‌روزرسانی‌شده بی‌درنگ اجرا می‌شود. در غیر این صورت دوباره نمایش داده می‌شود؛ برای ارسال آن یک نقطه‌ویرگول یا \g را وارد کنید، یا برای لغو آن \r را بزنید.

تابع هدف را می‌توان تنها با نام، یا با نام و آرگومان‌ها، برای نمونه foo(integer, text) مشخص کرد. اگر بیش از یک تابع با نام یکسان وجود داشته باشد، نوع آرگومان‌ها باید ذکر شود.

اگر هیچ تابعی مشخص نشود، یک قالب خالی CREATE FUNCTION برای ویرایش ارائه می‌شود.

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

برخلاف اکثر فرادستورهای دیگر، تمام دنبالهٔ خط همواره به عنوان آرگومان(های) \ef در نظر گرفته می‌شود و هیچ‌گونه درونیابی متغیر یا بسط نقل‌قول معکوس روی آرگومان‌ها انجام نمی‌شود.


نکته
برای چگونگی پیکربندی و سفارشی‌سازی ویرایشگر خود، بخش «محیط» را در ادامه ببینید.

\encoding [ encoding ]

کدبندی (encoding) مجموعه نویسه‌های کلاینت را تنظیم می‌کند. بدون آرگومان، این دستور کدبندی فعلی را نشان می‌دهد.

\errverbose

جدیدترین پیام خطای سرور را با بیشترین جزئیات تکرار می‌کند، گویی VERBOSITY روی verbose و SHOW_CONTEXT روی always تنظیم شده باشد.

\ev [ view_name [ line_number ] ]

این دستور تعریف نمای (view) مشخص‌شده را در قالب یک دستور CREATE OR REPLACE VIEW واکشی کرده و برای ویرایش باز می‌کند. ویرایش به همان روش دستور \edit انجام می‌شود. اگر ویرایشگر را بدون ذخیره کردن ترک کنید، عبارت نادیده گرفته می‌شود. اگر ذخیره کرده و خارج شوید، در صورتی که یک نقطه‌ویرگول به آن افزوده باشید، دستور به‌روزرسانی‌شده بی‌درنگ اجرا می‌شود. در غیر این صورت دوباره نمایش داده می‌شود؛ برای ارسال آن یک نقطه‌ویرگول یا \g را وارد کنید، یا برای لغو آن \r را بزنید.

اگر هیچ نمایی مشخص نشود، یک قالب خالی CREATE VIEW برای ویرایش ارائه می‌شود.

اگر شمارهٔ خط مشخص شده باشد، psql مکان‌نما را در خط مشخص‌شده از تعریف نما قرار می‌دهد.

برخلاف بیشتر فرادستورهای دیگر، تمام دنبالهٔ خط همواره به عنوان آرگومان(های) \ev در نظر گرفته می‌شود و هیچ‌گونه درونیابی متغیر یا بسط نقل‌قول معکوس روی آرگومان‌ها انجام نمی‌شود.

\f [ string ]

جداکنندهٔ فیلد را برای خروجی ترازنشدهٔ پرس‌وجو تنظیم می‌کند. مقدار پیش‌فرض خط عمودی (|) است. این دستور معادل \pset fieldsep است.

\g [ (option=value [...]) ] [ filename ]
\g [ (option=value [...]) ] [ |command ]

بافر پرس‌وجوی فعلی را برای اجرا به سرور ارسال می‌کند.

اگر پس از \g پرانتز قرار گیرد، نشان‌دهندهٔ فهرستی از بندهای گزینه‌های قالب‌بندی option=value است که با فاصله از هم جدا شده‌اند؛ این بندها همانند دستورهای \pset option value تفسیر می‌شوند، اما تنها برای مدت‌زمان اجرای این پرس‌وجو معتبر خواهند بود. در این فهرست، وجود فاصله در اطراف علامت‌های = مجاز نیست، اما بین بندهای گزینه‌ها الزامی است. اگر =value حذف شود، option نام‌برده به همان شیوه‌ای تغییر می‌کند که در دستور \pset option بدون value صریح عمل می‌شود.

اگر آرگومان filename یا |command داده شود، خروجی پرس‌وجو به جای نمایش معمول، در فایل مشخص‌شده نوشته می‌شود یا به دستور شل داده‌شده هدایت (pipe) می‌گردد. نوشتن در فایل یا ارسال به دستور تنها در صورتی صورت می‌گیرد که پرس‌وجو با موفقیت صفر یا چند تاپل (tuple) برگرداند، نه در مواقعی که پرس‌وجو ناموفق باشد یا یک دستور SQL باشد که داده‌ای بازنمی‌گرداند.

اگر بافر پرس‌وجوی فعلی خالی باشد، پرس‌وجوی ارسال‌شدهٔ اخیر دوباره اجرا می‌شود. به جز این مورد، دستور \g بدون آرگومان اساساً معادل با یک نقطه‌ویرگول است. همراه با آرگومان‌ها، \g یک جایگزین “یک‌باره” برای دستور \o فراهم می‌سازد و افزون بر آن، امکان تغییر یک‌بارهٔ گزینه‌های قالب‌بندی خروجی را که معمولاً با \pset تنظیم می‌شوند فراهم می‌کند.

هنگامی که آخرین آرگومان با | آغاز شود، تمام دنبالهٔ خط به عنوان command برای اجرا تلقی می‌شود و هیچ‌گونه درونیابی متغیر یا بسط نقل‌قول معکوس روی آن انجام نمی‌شود. باقی‌ماندهٔ خط عینا به شل منتقل خواهد شد.

\gdesc

توصیف (یعنی نام ستون‌ها و نوع داده‌ها) نتیجهٔ بافر پرس‌وجوی فعلی را نمایش می‌دهد. پرس‌وجو در عمل اجرا نمی‌شود؛ با این حال، چنانچه دارای نوعی خطای نگارشی (syntax error) باشد، آن خطا به شیوهٔ معمول گزارش داده می‌شود.

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

\getenv psql_var env_var

مقدار متغیر محیطی env_var را دریافت کرده و آن را به متغیر psql با نام psql_var اختصاص می‌دهد. اگر env_var در محیط فرایند psql تعریف نشده باشد، psql_var تغییری نخواهد کرد. مثال:
=> \getenv home HOME
=> \echo :home
/home/postgres

\gexec

بافر پرس‌وجوی فعلی را به سرور می‌فرستد، سپس با هر ستون از هر سطر خروجی پرس‌وجو (در صورت وجود) به عنوان یک دستور SQL که باید اجرا شود رفتار می‌کند. برای نمونه، جهت ایجاد یک نمایه (index) روی هر ستون از my_table:
=> SELECT format('create index on my_table(%I)', attname)
-> FROM pg_attribute
-> WHERE attrelid = 'my_table'::regclass AND attnum > 0
-> ORDER BY attnum
-> \gexec
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX

پرس‌وجوهای تولیدشده به ترتیبی که سطرها بازگردانده می‌شوند، و از چپ به راست در هر سطر در صورتی که بیش از یک ستون وجود داشته باشد، اجرا می‌شوند. فیلدهای NULL نادیده گرفته می‌شوند. پرس‌وجوهای تولیدشده دقیقاً و به شکل عین عبارت برای پردازش به سرور ارسال می‌شوند، بنابراین نمی‌توانند فرادستورهای psql بوده یا حاوی ارجاعات متغیر psql باشند. در صورت بروز خطا در هر پرس‌وجوی جداگانه، اجرای سایر پرس‌وجوها ادامه می‌یابد مگر آنکه ON_ERROR_STOP تنظیم شده باشد. اجرای هر پرس‌وجو تابع پردازش ECHO است. (تنظیم ECHO روی all یا queries هنگام استفاده از \gexec غالباً توصیه می‌شود.) ثبت وقایع پرس‌وجو، حالت تک‌مرحله‌ای، زمان‌بندی و سایر قابلیت‌های اجرای پرس‌وجو روی هر پرس‌وجوی تولیدشده نیز اعمال خواهند شد.

اگر بافر پرس‌وجوی فعلی خالی باشد، پرس‌وجوی ارسال‌شدهٔ اخیر دوباره اجرا می‌شود. \gset [ prefix ]

بافر پرس‌وجوی جاری را به سرور ارسال می‌کند و خروجی پرس‌وجو را در متغیرهای psql ذخیره می‌کند (بخش Variables در زیر را ببینید). پرس‌وجوی مورد اجرا باید دقیقاً یک سطر بازگرداند. هر ستون سطر در یک متغیر جداگانه هم‌نام با آن ستون ذخیره می‌شود. برای مثال:
=> SELECT 'hello' AS var1, 10 AS var2
-> \gset
=> \echo :var1 :var2
hello 10

اگر یک prefix مشخص کنید، آن رشته به ابتدای نام‌های ستون‌های پرس‌وجو افزوده می‌شود تا نام متغیرهای مورد استفاده ایجاد شوند:

=> SELECT 'hello' AS var1, 10 AS var2
-> \gset result_
=> \echo :result_var1 :result_var2
hello 10

اگر نتیجهٔ یک ستون NULL باشد، متغیر متناظر به‌جای مقداردهی، بازنشانی (unset) می‌شود.

اگر پرس‌وجو با شکست مواجه شود یا دقیقاً یک سطر بازنگرداند، هیچ متغیری تغییر نمی‌کند.

اگر بافر پرس‌وجوی جاری خالی باشد، در عوض پرس‌وجویی که اخیراً ارسال شده بود دوباره اجرا می‌شود.

\gx [ (option=value [...]) ] [ filename ]
\gx [ (option=value [...]) ] [ |command ]

\gx معادل \g است، با این تفاوت که حالت خروجی گسترش‌یافته (expanded) را برای این پرس‌وجو اجباری می‌کند، گویی که expanded=on در فهرست گزینه‌های \pset گنجانده شده باشد. همچنین \x را ببینید.

\h or \help [ command ]

راهنمای نحو (syntax) دستور SQL مشخص‌شده را ارائه می‌دهد. اگر command مشخص نشده باشد، psql تمام دستوراتی را که راهنمای نحو برای آن‌ها موجود است فهرست می‌کند. اگر command یک ستاره (*) باشد، راهنمای نحو تمام دستورات SQL نشان داده می‌شود.

برخلاف بیشتر فرادستورهای دیگر، تمام باقی‌ماندهٔ خط همیشه به عنوان آرگومان(های) \help در نظر گرفته می‌شود، و نه جای‌گذاری متغیرها و نه بسط بک‌تیک در آرگومان‌ها انجام نمی‌شوند.


نکته
برای ساده‌تر کردن تایپ، نیازی نیست دستوراتی که از چند کلمه تشکیل شده‌اند درون نقل‌قول قرار گیرند. بنابراین نوشتن \help alter table کاملاً مجاز است.

\H or \html

قالب خروجی پرس‌وجوی HTML را فعال می‌کند. اگر قالب HTML از قبل فعال باشد، به قالب متنی تراز‌شدهٔ پیش‌فرض برگردانده می‌شود. این دستور برای سازگاری و سهولت کار است، اما برای تنظیم سایر گزینه‌های خروجی، \pset را ببینید.

\i or \include filename

ورودی را از فایل filename می‌خواند و آن را طوری اجرا می‌کند که گویی روی صفحه‌کلید تایپ شده است.

اگر filename برابر با - (خط پیوند) باشد، ورودی استاندارد تا رسیدن به نشانگر EOF یا فرادستور \q خوانده می‌شود. از این قابلیت می‌توان برای آمیختن ورودی تعاملی با ورودی فایل‌ها استفاده کرد. توجه داشته باشید که رفتار Readline تنها در صورتی استفاده خواهد شد که در بیرونی‌ترین سطح فعال باشد.


نکته
اگر می‌خواهید خطوط را هنگام خوانده شدن روی صفحه مشاهده کنید، باید متغیر ECHO را روی all تنظیم کنید.

\if expression
\elif expression
\else
\endif

این گروه از دستورات، بلوک‌های شرطی تودرتو را پیاده‌سازی می‌کنند. یک بلوک شرطی باید با یک \if شروع شده و با یک \endif پایان یابد. در این بین می‌تواند هر تعداد بند \elif وجود داشته باشد، که می‌تواند به‌صورت اختیاری با یک بند تکی \else دنبال شود. پرس‌وجوهای عادی و انواع دیگر دستورات بک‌اسلش می‌توانند (و معمولاً همین‌گونه است) بین دستوراتی که یک بلوک شرطی را تشکیل می‌دهند ظاهر شوند.

دستورات \if و \elif آرگومان(های) خود را خوانده و آن‌ها را به عنوان یک عبارت بولی ارزیابی می‌کنند. اگر عبارت مقدار true به دست دهد، پردازش به‌طور عادی ادامه می‌یابد؛ در غیر این صورت، خطوط نادیده گرفته می‌شوند تا زمانی که یک \elif، \else یا \endif مطابق پیدا شود. هنگامی که یک بررسی \if یا \elif موفق شد، آرگومان‌های دستورات \elif بعدی در همان بلوک ارزیابی نمی‌شوند بلکه به عنوان false در نظر گرفته می‌شوند. خطوط پس از یک \else تنها در صورتی پردازش می‌شوند که هیچ \if یا \elif مطابق قبلی موفق نشده باشد.

آرگومان expression یک دستور \if یا \elif درست مانند هر آرگومان دستور بک‌اسلش دیگری، مشمول جای‌گذاری متغیرها و بسط بک‌تیک می‌شود. پس از آن، مانند مقدار یک متغیر گزینهٔ روشن/خاموش (on/off) ارزیابی می‌شود. بنابراین مقدار معتبر، هر تطابق بدون ابهام و غیرحساس به بزرگی و کوچکی حروف برای یکی از این موارد است: true، false، 1، 0، on، off، yes، no. برای نمونه، t، T و tR همگی به عنوان true در نظر گرفته خواهند شد.

عبارت‌هایی که به‌درستی به true یا false ارزیابی نشوند، یک هشدار تولید کرده و با آن‌ها مانند false برخورد می‌شود.

خطوطی که رد می‌شوند، برای شناسایی پرس‌وجوها و دستورات بک‌اسلش به‌طور عادی تجزیه می‌شوند، اما پرس‌وجوها به سرور فرستاده نمی‌شوند و دستورات بک‌اسلش به جز دستورات شرطی (\if، \elif، \else، \endif) نادیده گرفته می‌شوند. دستورات شرطی فقط برای تودرتویی معتبر بررسی می‌شوند. ارجاعات به متغیرها در خطوط ردشده بسط داده نمی‌شوند و بسط بک‌تیک نیز انجام نمی‌شود.

همهٔ دستورات بک‌اسلش یک بلوک شرطی داده‌شده باید در همان فایل منبع قرار گیرند. اگر در فایل ورودی اصلی یا یک فایل واردشده با \include پیش از بسته شدن تمام بلوک‌های \if محلی، به EOF برسد، آنگاه psql یک خطا صادر خواهد کرد.

در اینجا یک مثال آمده است:

-- check for the existence of two separate records in the database and store
-- the results in separate psql variables
SELECT
    EXISTS(SELECT 1 FROM customer WHERE customer_id = 123) as is_customer,
    EXISTS(SELECT 1 FROM employee WHERE employee_id = 456) as is_employee
\gset
\if :is_customer
    SELECT * FROM customer WHERE customer_id = 123;
\elif :is_employee
    \echo 'is not a customer but is an employee'
    SELECT * FROM employee WHERE employee_id = 456;
\else
    \if yes
        \echo 'not a customer or employee'
    \else
        \echo 'this will never print'
    \endif
\endif
\ir یا \include_relative filename
دستور \ir مشابه \i است، اما نام فایل‌های نسبی را به شیوه متفاوتی برطرف می‌کند. هنگام اجرا در حالت تعاملی، هر دو دستور رفتار یکسانی دارند. با این حال، هنگامی که از درون یک اسکریپت فراخوانی شود، \ir نام فایل‌ها را نسبت به دایرکتوری محل قرارگیری اسکریپت تفسیر می‌کند، نه دایرکتوری کاری جاری.

\l[x+] یا \list[x+] [ pattern ]

پایگاه‌های داده موجود در سرور را فهرست کرده و نام‌ها، مالکان، کدبندی‌های مجموعه نویسه و امتیازات دسترسی آن‌ها را نشان می‌دهد. اگر pattern مشخص شده باشد، تنها پایگاه‌های داده‌ای که نام آن‌ها با الگو مطابقت دارد فهرست می‌شوند. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور اضافه شود، اندازه پایگاه‌های داده، tablespaceهای پیش‌فرض و توضیحات نیز نمایش داده می‌شوند. اطلاعات اندازه برای پایگاه‌های داده‌ای در دسترس است که کاربر جاری روی آن‌ها امتیاز CONNECT داشته باشد، یا اینکه کاربر جاری یک مدیر سیستم (superuser) بوده یا دارای امتیازات نقش pg_read_all_stats باشد.

\lo_export loid filename

شیء بزرگ با OID loid را از پایگاه داده خوانده و آن را در filename می‌نویسد. توجه داشته باشید که این دستور تفاوت ظریفی با تابع سمت سرور lo_export دارد، چرا که آن تابع با مجوزهای کاربری که سرور پایگاه داده با آن اجرا می‌شود و روی سیستم‌فایل سرور عمل می‌کند.

نکته
برای یافتن OID شیء بزرگ، از \lo_list استفاده کنید.

\lo_import filename [ comment ]

فایل را در یک شیء بزرگ PostgreSQL ذخیره می‌کند. در صورت تمایل، یادداشت داده‌شده را به شیء اختصاص می‌دهد. مثال:
foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801

پاسخ نشان می‌دهد که شیء بزرگ شناسه شیء 152801 را دریافت کرده است، که می‌تواند در آینده برای دسترسی به شیء بزرگ تازه ایجادشده استفاده شود. برای خوانایی بهتر، توصیه می‌شود همیشه یک یادداشت خوانا برای انسان به هر شیء اختصاص دهید. هم OIDها و هم یادداشت‌ها با دستور \lo_list قابل مشاهده هستند.

توجه داشته باشید که این دستور تفاوت ظریفی با دستور سمت سرور lo_import دارد زیرا به عنوان کاربر محلی روی سیستم‌فایل محلی عمل می‌کند، نه به عنوان کاربر و روی سیستم‌فایل سرور.

\lo_list[x+]

فهرستی از تمام اشیاء بزرگ PostgreSQL که در حال حاضر در پایگاه داده ذخیره شده‌اند را به همراه هرگونه یادداشت ارائه‌شده برای آن‌ها نمایش می‌دهد. اگر x به انتهای نام دستور اضافه شود، نتایج در حالت گسترده نمایش داده می‌شوند. اگر + به انتهای نام دستور اضافه شود، هر شیء بزرگ به همراه مجوزهای مرتبط با آن (در صورت وجود) فهرست می‌شود.

\lo_unlink loid

شیء بزرگ با OID loid را از پایگاه داده حذف می‌کند.

نکته
برای یافتن OID شیء بزرگ، از \lo_list استفاده کنید.

\o یا \out [ filename ]
\o یا \out [ |command ]

ترتیبی می‌دهد که نتایج پرس‌وجوهای آینده در فایل filename ذخیره شوند یا از طریق لوله به دستور شل command هدایت شوند. اگر هیچ آرگومانی مشخص نشود، خروجی پرس‌وجو به خروجی استاندارد بازنشانی می‌شود.

اگر آرگومان با | آغاز شود، تمام باقیمانده خط به عنوان command جهت اجرا در نظر گرفته می‌شود و هیچ‌یک از فرایندهای جایگزینی متغیر یا بسط بک‌تیک در آن صورت نمی‌گیرد. باقیمانده خط صرفاً به صورت لفظی به شل ارسال می‌شود.

“نتایج پرس‌وجو” شامل همه جدول‌ها، پاسخ‌های دستور و اعلان‌های دریافت‌شده از سرور پایگاه داده، و همچنین خروجی دستورهای مختلف بک‌اسلش است که پایگاه داده را پرس‌وجو می‌کنند (مانند \d)؛ اما پیام‌های خطا را در بر نمی‌گیرد.


نکته
برای قرار دادن خروجی متنی در میان نتایج پرس‌وجو، از \qecho استفاده کنید.

\p یا \print

بافر پرس‌وجوی جاری را در خروجی استاندارد چاپ می‌کند. اگر بافر پرس‌وجوی جاری خالی باشد، آخرین پرس‌وجوی اجراشده به جای آن چاپ می‌شود.

\parse statement_name

یک عبارت آماده (prepared statement) را از روی بافر پرس‌وجوی جاری، بر اساس نام شیء عبارت آماده مقصد ایجاد می‌کند. یک رشته خالی نشان‌دهنده عبارت آماده بدون نام است.

مثال:

SELECT $1 \parse stmt1

این دستور موجب می‌شود پروتکل پرس‌وجوی گسترده (extended query protocol) مورد استفاده قرار گیرد، برخلاف عملکرد عادی psql که از پروتکل پرس‌وجوی ساده استفاده می‌کند. یک پیام Parse (F) توسط این دستور صادر خواهد شد، بنابراین می‌تواند برای آزمایش پروتکل پرس‌وجوی گسترده از طریق psql مفید باشد. این دستور تنها روی پرس‌وجوی بعدی که اجرا می‌شود تأثیر می‌گذارد؛ همه پرس‌وجوهای بعدی به طور پیش‌فرض از پروتکل پرس‌وجوی ساده استفاده خواهند کرد.

\password [ username ]

رمز عبور کاربر مشخص‌شده را تغییر می‌دهد (به‌طور پیش‌فرض، کاربر جاری). این دستور رمز عبور جدید را درخواست می‌کند، آن را رمزنگاری کرده و به عنوان دستور ALTER ROLE به سرور ارسال می‌کند. این امر تضمین می‌کند که رمز عبور جدید به صورت متن خام در تاریخچه دستورها، لاگ سرور یا جاهای دیگر ظاهر نشود.

\prompt [ text ] name

از کاربر می‌خواهد متنی را وارد کند، که به متغیر name اختصاص می‌یابد. یک رشته اعلان اختیاری، text، می‌تواند مشخص شود. (برای اعلان‌های چندکلمه‌ای، متن را میان علامت‌های نقل‌قول تکی قرار دهید.)

به صورت پیش‌فرض، \prompt از ترمینال برای ورودی و خروجی استفاده می‌کند. با این حال، اگر گزینه خط فرمان -f استفاده شده باشد، \prompt از ورودی استاندارد و خروجی استاندارد استفاده می‌کند. \pset [ option [ value ] ]

این دستور گزینه‌های اثرگذار بر خروجی جدول‌های نتایج پرسمان را تنظیم می‌کند. option مشخص می‌کند کدام گزینه باید تنظیم شود. معنای value بسته به گزینهٔ انتخاب‌شده متغیر است. برای برخی گزینه‌ها، حذف value باعث تغییر وضعیت (toggle) یا لغو تنظیم آن گزینه می‌شود، همان‌گونه که ذیل آن گزینه توضیح داده شده است. اگر چنین رفتاری ذکر نشده باشد، حذف value تنها منجر به نمایش تنظیمات فعلی خواهد شد.

\pset بدون هیچ آرگومانی، وضعیت فعلی تمام گزینه‌های چاپ را نمایش می‌دهد.

گزینه‌های چاپ قابل تنظیم عبارتند از:

border

مقدار value باید یک عدد باشد. به‌طور کلی، هرچه این عدد بزرگ‌تر باشد، جدول حاشیه‌ها و خطوط بیشتری خواهد داشت، اما جزئیات آن به قالب خاص بستگی دارد. در قالب HTML، این مقدار مستقیماً به صفت border=... ترجمه می‌شود. در اکثر قالب‌های دیگر تنها مقادیر 0 (بدون حاشیه)، 1 (خطوط جداکننده داخلی)، و 2 (کادر دور جدول) معنادار هستند، و مقادیر بزرگ‌تر از 2 مشابه با border = 2 در نظر گرفته می‌شوند. قالب‌های latex و latex-longtable علاوه بر این، مقدار 3 را نیز برای افزودن خطوط جداکننده میان سطرهای داده مجاز می‌دانند.

columns

عرض هدف را برای قالب wrapped و همچنین حد عرض را برای تعیین اینکه آیا خروجی به اندازهٔ کافی عریض است که به صفحه‌بند (pager) نیاز داشته باشد یا به نمایش عمودی در حالت expanded خودکار جابه‌جا شود، تنظیم می‌کند. مقدار صفر (پیش‌فرض) باعث می‌شود عرض هدف توسط متغیر محیطی COLUMNS یا در صورت تنظیم نبودن COLUMNS، توسط عرض شناسایی‌شده برای صفحه نمایش کنترل شود. افزون بر این، اگر columns صفر باشد، قالب wrapped تنها بر خروجی صفحه نمایش تأثیر می‌گذارد. اگر columns غیرصفر باشد، خروجی فایل و لوله (pipe) نیز به همان عرض پیچیده (wrap) می‌شود.

csv_fieldsep

جداکنندهٔ فیلد را برای استفاده در قالب خروجی CSV مشخص می‌کند. اگر نویسهٔ جداکننده در مقدار یک فیلد ظاهر شود، طبق قواعد استاندارد CSV، آن فیلد درون گیومه مضاعف در خروجی قرار می‌گیرد. پیش‌فرض کاما است.

expanded (یا x)

در صورت مشخص شدن value، باید on یا off (که حالت گسترش‌یافته را فعال یا غیرفعال می‌کند) یا auto باشد. اگر value حذف شود، دستور میان حالت‌های on و off جابه‌جا می‌شود. هنگامی که حالت گسترش‌یافته فعال است، نتایج پرسمان در دو ستون نمایش داده می‌شوند؛ با نام ستون در سمت چپ و داده در سمت راست. این حالت زمانی مفید است که داده‌ها در حالت عادی “افقی” در صفحه جا نشوند. در تنظیم auto، هر زمان خروجی پرسمان بیش از یک ستون داشته و عریض‌تر از صفحه نمایش باشد، حالت گسترش‌یافته به کار گرفته می‌شود؛ در غیر این صورت، از حالت عادی استفاده می‌شود. تنظیم auto تنها در قالب‌های aligned و wrapped مؤثر است. در سایر قالب‌ها، همواره رفتاری مشابه با غیرفعال (off) بودن حالت گسترش‌یافته دارد.

fieldsep

جداکنندهٔ فیلد را برای استفاده در قالب خروجی unaligned مشخص می‌کند. از این طریق می‌توان برای نمونه، خروجی جداشده با تب (tab-separated) ایجاد کرد که ممکن است برنامه‌های دیگر آن را ترجیح دهند. برای تنظیم تب به عنوان جداکننده فیلد، بنویسید: \pset fieldsep '\t'. جداکنندهٔ فیلد پیش‌فرض '|' (خط عمودی) است.

fieldsep_zero

جداکنندهٔ فیلد مورد استفاده در قالب خروجی unaligned را روی یک بایت صفر (zero byte) تنظیم می‌کند.

footer

اگر value مشخص شده باشد، باید on یا off باشد که نمایش پاورقی جدول (شمارش (n rows)) را فعال یا غیرفعال می‌کند. در صورت حذف value، دستور نمایش پاورقی را بین روشن (on) یا خاموش (off) تغییر می‌دهد.

format

قالب خروجی را روی یکی از موارد aligned، asciidoc، csv، html، latex، latex-longtable، troff-ms، unaligned یا wrapped تنظیم می‌کند. اختصارهای یکتا مجاز هستند.

قالب aligned خروجی متنی استاندارد، خوانا برای انسان و با قالب‌بندی مرتب است؛ این حالت پیش‌فرض است.

قالب unaligned تمام ستون‌های یک سطر را در یک خط می‌نویسد که با جداکننده فیلد فعال فعلی جدا می‌شوند. این ویژگی برای ایجاد خروجی‌هایی که قرار است توسط برنامه‌های دیگر خوانده شوند، برای مثال قالب‌های جداشده با تب یا ویرگول، مفید است. با این حال، اگر نویسهٔ جداکنندهٔ فیلد در مقدار یک ستون ظاهر شود، رفتار خاصی با آن صورت نمی‌گیرد؛ بنابراین قالب CSV ممکن است برای چنین مقاصدی مناسب‌تر باشد.

قالب csv مقادیر ستون‌ها را با کاما جدا کرده و قواعد نقل‌قول شرح‌داده‌شده در RFC 4180 را اعمال می‌کند. این خروجی با قالب CSV دستور COPY سرور سازگار است. یک خط سرایند با نام ستون‌ها تولید می‌شود مگر اینکه پارامتر tuples_only روی on باشد. عناوین و پاورقی‌ها چاپ نمی‌شوند. هر سطر به نویسهٔ پایان خط وابسته به سیستم ختم می‌شود، که معمولاً برای سیستم‌های شبه یونیکس یک خط‌جدید یکتا (\n) یا برای Microsoft Windows توالی بازگشت به سطر و خط‌جدید (\r\n) است. نویسه‌های جداکننده فیلد غیر از ویرگول را می‌توان با \pset csv_fieldsep انتخاب کرد.

قالب wrapped مانند aligned است اما مقادیر داده‌های عریض را بین خطوط می‌پیچد تا خروجی در عرض ستون هدف بگنجد. عرض هدف همان‌طور که ذیل گزینهٔ columns شرح داده شد تعیین می‌شود. توجه داشته باشید که psql برای شکستن و پیچیدن عناوین سرایند ستون تلاشی نمی‌کند؛ بنابراین اگر کل عرض مورد نیاز برای سرایند ستون‌ها از مقدار هدف فراتر رود، قالب wrapped مشابه aligned رفتار می‌کند.

قالب‌های asciidoc، html، latex، latex-longtable و troff-ms جدول‌هایی را تولید می‌کنند که برای گنجانده شدن در اسناد با استفاده از زبان نشانه‌گذاری مربوطه طراحی شده‌اند. این‌ها اسناد کامل نیستند! ممکن است این موضوع در HTML ضروری نباشد، اما در LaTeX باید یک پوشش سند کامل داشته باشید. قالب latex از محیط tabular در LaTeX استفاده می‌کند. قالب latex-longtable به بسته‌های longtable و booktabs در LaTeX نیاز دارد.

linestyle

سبک رسم خطوط حاشیه را روی یکی از گزینه‌های ascii، old-ascii یا unicode تنظیم می‌کند. اختصارهای یکتا مجاز هستند. (به این معنی که یک حرف کافی خواهد بود.) تنظیم پیش‌فرض ascii است. این گزینه تنها بر قالب‌های خروجی aligned و wrapped تأثیر می‌گذارد.

سبک ascii از نویسه‌های سادهٔ ASCII استفاده می‌کند. خطوط جدید درون داده‌ها با یک نماد + در حاشیه سمت راست نمایش داده می‌شوند. هنگامی که قالب wrapped داده‌ها را از یک خط به خط بعدی بدون نویسهٔ خط‌جدید می‌پیچد، یک نقطه (.) در حاشیه سمت راست خط اول و مجدداً در حاشیه سمت چپ خط بعدی نشان داده می‌شود.

سبک old-ascii از نویسه‌های سادهٔ ASCII با سبک قالب‌بندی مورد استفاده در PostgreSQL نسخهٔ 8.4 و پیش از آن استفاده می‌کند. خطوط جدید در داده‌ها با استفاده از نماد : به جای جداکنندهٔ ستون در سمت چپ نمایش داده می‌شوند. وقتی داده‌ها بدون نویسهٔ خط‌جدید از یک خط به خط بعدی پیچیده می‌شوند، یک نماد ; به جای جداکننده ستون سمت چپ به کار می‌رود.

سبک unicode از نویسه‌های رسم جعبه (box-drawing) یونیکد بهره می‌برد. خطوط جدید در داده‌ها با نماد بازگشت به ابتدای سطر (carriage return) در حاشیه سمت راست نمایش داده می‌شوند. هنگامی که داده‌ها بدون نویسهٔ خط‌جدید از یک خط به خط بعدی می‌پیچند، یک نماد سه‌نقطه در حاشیه سمت راست خط اول و مجدداً در حاشیه سمت چپ خط بعدی نمایش داده می‌شود.

هنگامی که مقدار تنظیم border بزرگ‌تر از صفر باشد، گزینهٔ linestyle نویسه‌هایی را که خطوط حاشیه با آن‌ها رسم می‌شوند نیز تعیین می‌کند. نویسه‌های سادهٔ ASCII در همه جا کار می‌کنند، اما نویسه‌های یونیکد در نمایشگرهایی که آن‌ها را پشتیبانی می‌کنند زیباتر دیده می‌شوند. null

رشته‌ای را تعیین می‌کند که به جای یک مقدار null چاپ می‌شود. حالت پیش‌فرض این است که چیزی چاپ نشود، که می‌تواند به سادگی با یک رشته خالی اشتباه گرفته شود. برای نمونه، ممکن است فردی ترجیح دهد از \pset null '(null)' استفاده کند.

numericlocale

اگر value مشخص شده باشد باید یا on یا off باشد که نمایش نویسه مختص محلی‌سازی را برای جداسازی گروه‌های ارقام در سمت چپ ممیز اعشاری فعال یا غیرفعال می‌کند. اگر value حذف شود، این دستور خروجی عددی را بین حالت معمولی و مختص محلی‌سازی تغییر وضعیت می‌دهد.

pager

استفاده از یک برنامه صفحه‌بند (pager) را برای خروجی پرس‌وجو و راهنمای psql کنترل می‌کند. هنگامی که گزینه pager بر روی off باشد، از برنامه صفحه‌بند استفاده نمی‌شود. زمانی که گزینه pager بر روی on باشد، صفحه‌بند در صورت نیاز استفاده می‌شود؛ یعنی زمانی که خروجی به یک ترمینال ارسال می‌شود و در صفحه جا نمی‌شود. گزینه pager همچنین می‌تواند روی always تنظیم شود، که باعث می‌شود صفحه‌بند برای تمام خروجی‌های ترمینال، صرف نظر از اینکه در صفحه جا می‌شوند یا خیر، استفاده گردد. \pset pager بدون value استفاده از صفحه‌بند را بین روشن و خاموش تغییر وضعیت می‌دهد.

اگر متغیر محیطی PSQL_PAGER یا PAGER تنظیم شده باشد، خروجی مورد نظر برای صفحه‌بندی به برنامه مشخص‌شده هدایت (pipe) می‌شود. در غیر این صورت، از یک برنامه پیش‌فرض وابسته به پلتفرم (مانند more) استفاده می‌شود.

هنگام استفاده از دستور \watch برای اجرای مکرر یک پرس‌وجو در سیستم‌های یونیکس، متغیر محیطی PSQL_WATCH_PAGER به جای آن برای یافتن برنامه صفحه‌بند استفاده می‌شود. این متغیر به طور جداگانه پیکربندی می‌شود زیرا ممکن است صفحه‌بندهای سنتی را دچار سردرگمی کند، اما می‌تواند برای ارسال خروجی به ابزارهایی که قالب خروجی psql را می‌فهمند (مانند pspg --stream) استفاده شود.

pager_min_lines

اگر pager_min_lines روی عددی بزرگتر از ارتفاع صفحه تنظیم شده باشد، برنامه صفحه‌بند فراخوانی نخواهد شد مگر اینکه دست‌کم این تعداد خط خروجی برای نمایش وجود داشته باشد. مقدار پیش‌فرض 0 است.

recordsep

جداکننده رکورد (خط) را برای استفاده در قالب خروجی ترازنشده (unaligned) مشخص می‌کند. مقدار پیش‌فرض یک نویسه خط جدید (newline) است.

recordsep_zero

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

tableattr (یا T)

در قالب HTML، این گزینه مشخصه‌هایی را تعیین می‌کند که باید درون برچسب table قرار گیرند. این می‌تواند به عنوان مثال cellpadding یا bgcolor باشد. توجه داشته باشید که احتمالاً نیازی نیست border را در اینجا مشخص کنید، زیرا این مورد از قبل توسط \pset border مدیریت شده است. اگر هیچ value داده نشود، مشخصه‌های جدول لغو می‌شوند.

در قالب latex-longtable، این گزینه عرض متناسب هر ستونی را که شامل نوع داده چپ‌چین است کنترل می‌کند. این ویژگی به عنوان فهرستی از مقادیر جداشده با فاصله مشخص می‌شود، مانند '0.2 0.2 0.6'. ستون‌های خروجی مشخص‌نشده از آخرین مقدار مشخص‌شده استفاده می‌کنند.

title (یا C)

عنوان جدول را برای تمامی جدول‌هایی که پس از این چاپ می‌شوند تنظیم می‌کند. از این گزینه می‌توان برای دادن برچسب‌های توصیفی به خروجی استفاده کرد. اگر هیچ value ارائه نشود، عنوان حذف می‌شود.

tuples_only (یا t)

اگر value مشخص شده باشد باید یا on یا off باشد که حالت فقط-تاپل (tuples-only) را فعال یا غیرفعال می‌کند. اگر value حذف شود، این دستور وضعیت خروجی را بین حالت عادی و فقط-تاپل تغییر می‌دهد. خروجی عادی شامل اطلاعات اضافی مانند سرستون‌ها، عناوین و پاورقی‌های مختلف است. در حالت فقط-تاپل، تنها داده‌های واقعی جدول نمایش داده می‌شوند.

unicode_border_linestyle

سبک رسم حاشیه را برای سبک خطوط unicode روی یکی از مقادیر single یا double تنظیم می‌کند.

unicode_column_linestyle

سبک رسم ستون را برای سبک خطوط unicode روی یکی از مقادیر single یا double تنظیم می‌کند.

unicode_header_linestyle

سبک رسم سرستون را برای سبک خطوط unicode روی یکی از مقادیر single یا double تنظیم می‌کند.

xheader_width

حداکثر عرض سرستون را برای خروجی گسترش‌یافته روی یکی از گزینه‌های full (مقدار پیش‌فرض)، column، page یا یک integer value تنظیم می‌کند.

full: سرستون گسترش‌یافته کوتاه (قطع) نمی‌شود و به پهنای عریض‌ترین خط خروجی خواهد بود.

column: خط سرستون را تا پهنای ستون اول کوتاه می‌کند.

page: خط سرستون را تا پهنای ترمینال کوتاه می‌کند.

integer value: حداکثر پهنای دقیق خط سرستون را مشخص می‌کند.

نمونه‌هایی از چگونگی ظاهر این قالب‌های مختلف را می‌توان در بخش مثال‌ها، در ادامه مشاهده کرد.


نکته
دستورهای میانبر گوناگونی برای \pset وجود دارند. بخش‌های \a، \C، \f، \H، \t، \T و \x را ببینید.

\q یا \quit

از برنامه psql خارج می‌شود. در یک فایل اسکریپت، تنها اجرای آن اسکریپت خاتمه می‌یابد.

\qecho text [ ... ]

این دستور همسان با \echo است، به جز اینکه خروجی در کانال خروجی پرس‌وجو، طبق آنچه با \o تنظیم شده، نوشته خواهد شد. \r or \reset
بافر پرس‌وجو را بازنشانی (پاک) می‌کند.

\restrict restrict_key

با کلید ارائه‌شده وارد حالت «محدودشده» (restricted) می‌شود. در این حالت، تنها متادستور مجاز برای خروج از حالت محدودشده، \unrestrict است. کلید فقط می‌تواند شامل نویسه‌های الفبایی-عددی باشد.

این دستور در درجه اول برای استفاده در نسخه‌های پشتیبان متنی (plain-text dumps) ایجاد شده توسط pg_dump، pg_dumpall و pg_restore در نظر گرفته شده است، اما ممکن است در جاهای دیگر نیز مفید باشد.

\s [ filename ]

تاریخچه خط فرمان psql را در filename چاپ می‌کند. اگر filename ذکر نشود، تاریخچه در خروجی استاندارد نوشته می‌شود (در صورت لزوم با استفاده از پیجر). اگر psql بدون پشتیبانی از Readline ساخته شده باشد، این دستور در دسترس نیست.

\set [ name [ value [ ... ] ] ]

متغیر psql با نام name را با مقدار value تنظیم می‌کند، یا اگر بیش از یک مقدار داده شود، آن را به الحاق تمام آن‌ها تنظیم می‌کند. اگر تنها یک آرگومان داده شود، متغیر با یک مقدار رشته‌ای خالی تنظیم می‌شود. برای لغو تنظیم یک متغیر، از دستور \unset استفاده کنید.

\set بدون هیچ آرگومانی، نام و مقدار تمام متغیرهای تنظیم‌شده کنونی psql را نمایش می‌دهد.

نام‌های معتبر متغیرها می‌توانند شامل حروف، ارقام و زیرخط باشند. برای جزئیات به Variables در زیر مراجعه کنید. نام متغیرها به حروف بزرگ و کوچک حساس هستند.

برخی از متغیرها خاص هستند، به این صورت که رفتار psql را کنترل می‌کنند یا به‌طور خودکار برای بازتاب وضعیت اتصال تنظیم می‌شوند. این متغیرها در Variables در زیر مستند شده‌اند.


نکته
این دستور ارتباطی با دستور SQL یعنی SET ندارد.

\setenv name [ value ]

متغیر محیطی name را به value تنظیم می‌کند، یا اگر value ارائه نشود، متغیر محیطی را لغو تنظیم می‌کند. مثال:
testdb=> \setenv PAGER less
testdb=> \setenv LESS -imx4F

\sf[+] function_description

این دستور، تعریف تابع یا رویهٔ (procedure) نام‌برده‌شده را در قالب یک دستور CREATE OR REPLACE FUNCTION یا CREATE OR REPLACE PROCEDURE واکشی کرده و نشان می‌دهد. تعریف در کانال خروجی پرس‌وجوی جاری، مطابق با تنظیمات \o چاپ می‌شود.

تابع هدف را می‌توان تنها با نام، یا با نام و آرگومان‌ها مشخص کرد، به عنوان مثال foo(integer, text). در صورتی که بیش از یک تابع با همین نام وجود داشته باشد، انواع آرگومان‌ها حتماً باید مشخص شوند.

اگر + به انتهای نام دستور اضافه شود، خطوط خروجی شماره‌گذاری می‌شوند و اولین خط از بدنه تابع، خط شماره ۱ خواهد بود.

برخلاف اکثر متادستورهای دیگر، کل ادامه خط همیشه به عنوان آرگومان(های) \sf در نظر گرفته می‌شود، و نه درون‌یابی متغیرها و نه بسط علامت نقل‌قول وارون روی آرگومان‌ها اعمال نمی‌شود.

\sv[+] view_name

این دستور، تعریف نمای (view) نام‌برده‌شده را در قالب یک دستور CREATE OR REPLACE VIEW واکشی کرده و نشان می‌دهد. تعریف در کانال خروجی پرس‌وجوی جاری، مطابق با تنظیمات \o چاپ می‌شود.

اگر + به انتهای نام دستور اضافه شود، خطوط خروجی از ۱ شماره‌گذاری می‌شوند.

برخلاف اکثر متادستورهای دیگر، کل ادامه خط همیشه به عنوان آرگومان(های) \sv در نظر گرفته می‌شود، و نه درون‌یابی متغیرها و نه بسط علامت نقل‌قول وارون روی آرگومان‌ها اعمال نمی‌شود.

\startpipeline
\sendpipeline
\syncpipeline
\endpipeline
\flushrequest
\flush
\getresults [ number_results ]

این گروه از دستورها قابلیت خط‌لوله‌سازی (pipelining) دستورهای SQL را پیاده‌سازی می‌کند. یک خط‌لوله (pipeline) باید با \startpipeline آغاز شده و با \endpipeline پایان یابد. در این میان می‌تواند هر تعداد دستور \syncpipeline وجود داشته باشد که یک پیام همگام‌سازی (sync message) را بدون پایان دادن به خط‌لوله در حال اجرا و با تخلیه بافر ارسال، می‌فرستد. در حالت خط‌لوله، دستورها بدون منتظر ماندن برای نتایج دستورهای قبلی به سرور ارسال می‌شوند. برای جزئیات بیشتر به Section 32.5 مراجعه کنید.

تمام پرس‌وجوهایی که در حین اجرای خط‌لوله اجرا می‌شوند از پروتکل پرس‌وجوی توسعه‌یافته (extended query protocol) استفاده می‌کنند. پرس‌وجوها در صورتی که با یک نقطه‌ویرگول (semicolon) پایان یابند، به خط‌لوله الحاق می‌شوند. متادستورهای \bind، \bind_named، \close_prepared یا \parse می‌توانند در یک خط‌لوله در حال اجرا استفاده شوند. در زمان فعال بودن خط‌لوله، \sendpipeline بافر پرس‌وجوی جاری را به خط‌لوله الحاق می‌کند. سایر متادستورها مانند \g، \gx یا \gdesc در حالت خط‌لوله مجاز نیستند.

دستور \flushrequest یک دستور تخلیه (flush) را به خط‌لوله الحاق می‌کند که امکان خواندن نتایج با \getresults را بدون صدور همگام‌سازی (sync) یا پایان دادن به خط‌لوله فراهم می‌آورد. دستور \getresults به‌طور خودکار داده‌های ارسال‌نشده را به سرور منتقل (push) می‌کند. برای انتقال دستی داده‌های ارسال‌نشده می‌توان از \flush استفاده کرد.

دستور \getresults یک پارامتر اختیاری number_results را می‌پذیرد. در صورت ارائه، تنها تعداد number_results نتیجهٔ اول در انتظار خوانده خواهند شد. در صورت ارائه نشدن یا مقدار 0، تمام نتایج در انتظار خوانده می‌شوند.

هنگامی که حالت خط‌لوله فعال است، یک متغیر اعلان (prompt) اختصاصی برای گزارش وضعیت خط‌لوله در دسترس است. برای جزئیات بیشتر به %P مراجعه کنید.

دستور COPY در هنگام قرار داشتن در حالت خط‌لوله پشتیبانی نمی‌شود.

مثال:

\startpipeline
SELECT * FROM pg_class;
SELECT 1 \bind \sendpipeline
\flushrequest
\getresults
\endpipeline

\t

نمایش سرستون‌های نام ستون‌های خروجی و پانویس تعداد سطرها را تغییر وضعیت می‌دهد (روشن/خاموش می‌کند). این دستور معادل با \pset tuples_only بوده و برای راحتی بیشتر فراهم شده است.

\T table_options

ویژگی‌هایی را مشخص می‌کند که در قالب خروجی HTML درون تگ table قرار می‌گیرند. این دستور معادل با \pset tableattr table_options است.

\timing [ on | off ]

با یک پارامتر، نمایش مدت‌زمان اجرای هر عبارت SQL را روشن یا خاموش می‌کند. بدون پارامتر، نمایش را بین روشن و خاموش تغییر وضعیت می‌دهد. این زمان بر حسب میلی‌ثانیه نمایش داده می‌شود؛ بازه‌های طولانی‌تر از ۱ ثانیه در قالب minutes:seconds نیز نشان داده می‌شوند و در صورت نیاز فیلدهای ساعت و روز نیز اضافه خواهند شد.

\unrestrict restrict_key

از حالت «محدودشده» (restricted - یعنی حالتی که در آن تمام فرادستورهای دیگر مسدود می‌شوند) خارج می‌شود، مشروط بر آنکه کلید مشخص‌شده با کلیدی که هنگام ورود به حالت محدودشده به \restrict داده شده بود، مطابقت داشته باشد.

این دستور در درجهٔ اول برای استفاده در رونوشت‌های متن‌ساده (plain-text dumps) تولیدشده توسط pg_dump، pg_dumpall و pg_restore در نظر گرفته شده است، اما ممکن است در جاهای دیگر نیز سودمند باشد.

برخلاف اغلب فرادستورهای دیگر، کل باقی‌ماندهٔ سطر همیشه به عنوان آرگومانِ \unrestrict در نظر گرفته می‌شود، و نه درون‌یابی متغیرها و نه بسط بک‌تیک در آن انجام نمی‌گیرد.

\unset name

متغیرِ psql با نام name را حذف (تنظیم‌نشده) می‌کند.

بیشتر متغیرهایی که رفتار psql را کنترل می‌کنند نمی‌توانند حذف شوند؛ در عوض، دستور \unset به صورت بازگرداندن آن‌ها به مقادیر پیش‌فرضشان تفسیر می‌شود. بخش Variables در زیر را ببینید.

\w یا \write filename
\w یا \write |command

بافر پرس‌وجوی جاری را در فایل filename می‌نویسد یا آن را به دستور پوستهٔ command پایپ می‌کند. اگر بافر پرس‌وجوی جاری خالی باشد، آخرین پرس‌وجوی اجراشده به جای آن نوشته می‌شود.

اگر آرگومان با | آغاز شود، آنگاه کل باقی‌ماندهٔ سطر به عنوان command برای اجرا در نظر گرفته می‌شود و نه درون‌یابی متغیرها و نه بسط بک‌تیک در آن انجام نمی‌گیرد. بقیه سطر صرفاً به صورت لفظی و بدون تغییر به پوسته ارسال می‌شود.

\warn text [ ... ]

این دستور مشابه با \echo است، به جز اینکه خروجی به جای خروجی استاندارد، در کانال خطای استاندارد psql نوشته خواهد شد.

\watch [ i[nterval]=seconds ] [ c[ount]=times ] [ m[in_rows]=rows ] [ seconds ]

بافر پرس‌وجوی جاری را به‌طور مکرر اجرا می‌کند (مشابه با کاری که \g انجام می‌دهد) تا زمانی که متوقف شود، یا پرس‌وجو با خطا مواجه گردد، یا به محدودیت تعداد اجرا (در صورت تعیین) برسد، یا پرس‌وجو دیگر حداقل تعداد ردیف‌ها را برنگرداند. بین اجراها به تعداد ثانیه‌های مشخص‌شده (پیش‌فرض ۲) درنگ می‌کند. زمان درنگ پیش‌فرض را می‌توان با متغیر WATCH_INTERVAL تغییر داد. جهت سازگاری با نسخه‌های پیشین، seconds می‌تواند همراه با پیشوند interval= یا بدون آن مشخص شود. هر نتیجهٔ پرس‌وجو همراه با یک سربرگ نمایش داده می‌شود که شامل رشتهٔ \pset title (در صورت وجود)، زمان شروع پرس‌وجو، و بازهٔ زمانی تأخیر است.

اگر بافر پرس‌وجوی جاری خالی باشد، آخرین پرس‌وجوی ارسال‌شده به جای آن دوباره اجرا می‌شود.

\x [ on | off | auto ]

حالت قالب‌بندی گسترش‌یافتهٔ جدول (expanded table formatting) را تنظیم کرده یا تغییر وضعیت می‌دهد. از این حیث، معادل با \pset expanded است.

\z[Sx] [ pattern ]

جدول‌ها، نماها و دنباله‌ها را به همراه امتیازات دسترسی مربوط به آنها فهرست می‌کند. اگر یک pattern مشخص شود، تنها جدول‌ها، نماها و دنباله‌هایی که نامشان با الگو مطابقت داشته باشد فهرست می‌شوند. به‌طور پیش‌فرض تنها اشیاء ساخته‌شده توسط کاربر نمایش داده می‌شوند؛ برای گنجاندن اشیاء سیستمی، یک الگو یا اصلاح‌کنندهٔ S را ارائه دهید. اگر x به نام دستور ضمیمه شود، نتایج در حالت گسترش‌یافته نمایش داده می‌شوند.

این یک نام مستعار (alias) برای \dp (“display privileges”) است.

\! [ command ]

بدون هیچ آرگومانی، به یک زیرپوسته (sub-shell) منتقل می‌شود؛ با خروج از زیرپوسته، اجرای psql از سر گرفته می‌شود. همراه با یک آرگومان، دستور پوستهٔ command را اجرا می‌کند.

برخلاف بیشتر فرادستورهای دیگر، کل باقی‌ماندهٔ سطر همیشه به عنوان آرگومان(های) \! در نظر گرفته می‌شود، و در آرگومان‌ها نه درون‌یابی متغیر و نه بسط بک‌تیک انجام نمی‌گیرد. بقیه سطر صرفاً به صورت لفظی به پوسته ارسال می‌شود.

\? [ topic ]

اطلاعات راهنما را نمایش می‌دهد. پارامتر اختیاری topic (با مقدار پیش‌فرض commands) مشخص می‌کند که کدام بخش از psql توضیح داده شود: commands دستورهای بک‌اسلشِ psql را شرح می‌دهد؛ options گزینه‌های خط فرمانی را که می‌توان به psql ارسال کرد توضیح می‌دهد؛ و variables راهنمای مربوط به متغیرهای پیکربندی psql را نمایش می‌دهد.

\;

بک‌اسلش-نقطه‌ویرگول مانند دستورات قبلی یک فرادستور نیست؛ بلکه صرفاً باعث می‌شود بدون هیچ‌گونه پردازش دیگری، یک نقطه‌ویرگول به بافر پرس‌وجو افزوده شود.

به‌طور معمول، psql به محض رسیدن به نقطه‌ویرگولِ پایان‌دهندهٔ دستور، حتی اگر ورودی بیشتری در سطر جاری باقی مانده باشد، دستور SQL را به سرور ارسال می‌کند. بنابراین برای مثال وارد کردن:

select 1; select 2; select 3;

منجر به ارسال جداگانهٔ این سه دستور SQL به سرور می‌شود، به‌طوری که نتایج هر یک پیش از ادامه به دستور بعدی نمایش داده خواهد شد. با این حال، نقطه‌ویرگولی که به صورت \; وارد شود، پردازش دستور را آغاز نمی‌کند؛ در نتیجه دستورِ پیش از آن و دستورِ پس از آن عملاً با یکدیگر ترکیب شده و در قالب یک درخواست به سرور ارسال می‌شوند. بنابراین برای مثال:

select 1\; select 2\; select 3;

منجر به ارسال هر سه دستور SQL به سرور در یک درخواست واحد می‌شود، زمانی که به نقطه‌ویرگولِ بدون بک‌اسلش رسیده شود. سرور چنین درخواستی را به عنوان یک تراکنش واحد اجرا می‌کند، مگر آنکه دستورهای صریح BEGIN/COMMIT در رشته گنجانده شده باشند تا آن را به چندین تراکنش تقسیم کنند. (برای جزئیات بیشتر دربارهٔ نحوهٔ مدیریت رشته‌های چندپرس‌وجویی توسط سرور، Section 54.2.2.1 را ببینید.)

الگوها (Patterns)

دستورهای مختلف \d یک پارامتر pattern را برای تعیین نام شیء (یا اشیاء) برای نمایش می‌پذیرند. در ساده‌ترین حالت، یک الگو صرفاً همان نام دقیق شیء است. نویسه‌های درون یک الگو معمولاً مانند نام‌ها در SQL به حروف کوچک تبدیل می‌شوند؛ برای مثال، \dt FOO جدولی به نام foo را نمایش می‌دهد. همانند نام‌های SQL، قرار دادن علامت نقل‌قول دوتایی (double quotes) در دو طرف یک الگو، مانع از تبدیل آن به حروف کوچک می‌شود. در صورتی که نیاز به گنجاندن یک نویسهٔ نقل‌قول دوتایی واقعی درون یک الگو داشته باشید، آن را به صورت یک جفت نقل‌قول دوتایی در یک توالی نقل‌قول دوتایی بنویسید؛ این موضوع نیز مطابق با قواعد شناسه‌های نقل‌قول‌شدهٔ SQL است. برای نمونه، \dt "FOO""BAR" جدولی به نام FOO"BAR (نه foo"bar) را نمایش می‌دهد. برخلاف قواعد معمول نام‌های SQL، می‌توانید علامت نقل‌قول دوتایی را تنها در اطراف بخشی از یک الگو قرار دهید، برای مثال \dt FOO"FOO"BAR جدولی به نام fooFOObar را نمایش خواهد داد..PP هر زمان که پارامتر pattern به‌طور کامل حذف شود، دستورهای \d تمام اشیائی را که در مسیر جستجوی شِمای جاری قابل رؤیت هستند نمایش می‌دهند — این معادل استفاده از * به عنوان الگو است. (گفته می‌شود یک شیء قابل رؤیت است اگر شِمای دربردارنده آن در مسیر جستجو قرار داشته باشد و هیچ شیء دیگری از همان نوع و با همان نام جلوتر در مسیر جستجو ظاهر نشده باشد. این بدان معناست که شیء می‌تواند با نام خود و بدون قید صریح شِما مورد ارجاع قرار گیرد.) برای مشاهده همه اشیاء پایگاه داده بدون در نظر گرفتن قابلیت رؤیت، از *.* به عنوان الگو استفاده کنید.

درون یک الگو، * با هر توالی از نویسه‌ها (شامل هیچ نویسه‌ای هم) تطابق می‌یابد و ? با هر تک‌نویسه‌ای مطابقت می‌کند. (این نشانه‌گذاری با الگوهای نام فایل در پوسته Unix قابل مقایسه است.) برای مثال، \dt int* جدول‌هایی را که نام آن‌ها با int آغاز می‌شود نمایش می‌دهد. اما درون نقل‌قول‌های دوتایی، * و ? این معانی خاص را از دست می‌دهند و صرفاً به صورت لفظی مطابقت داده می‌شوند.

الگوی رابطه‌ای که شامل یک نقطه (.) باشد، به عنوان یک الگوی نام شِما که به دنبال آن یک الگوی نام شیء آمده تفسیر می‌شود. برای مثال، \dt foo*.*bar* تمام جدول‌هایی را نمایش می‌دهد که نام جدول شامل bar بوده و در شِماهایی قرار دارند که نام شِمای آن‌ها با foo آغاز می‌شود. هنگامی که نقطه‌ای وجود نداشته باشد، الگو تنها با اشیائی مطابقت پیدا می‌کند که در مسیر جستجوی شِمای جاری قابل رؤیت باشند. باز هم، یک نقطه درون نقل‌قول‌های دوتایی معنای خاص خود را از دست می‌دهد و به صورت لفظی تطبیق داده می‌شود. الگوی رابطه‌ای که شامل دو نقطه (.) باشد، به عنوان یک نام پایگاه داده که پس از آن الگوی نام شِما و به دنبال آن الگوی نام شیء قرار گرفته تفسیر می‌گردد. با بخش نام پایگاه داده به عنوان الگو رفتار نمی‌شود و باید دقیقاً با نام پایگاه داده‌ای که هم‌اکنون به آن متصل هستید مطابقت داشته باشد، در غیر این صورت خطایی رخ خواهد داد.

الگوی شِمایی که شامل یک نقطه (.) باشد، به عنوان نام پایگاه داده که به دنبال آن الگوی نام شِما آمده است تفسیر می‌شود. برای مثال، \dn mydb.*foo* همه شِماهایی را نمایش می‌دهد که نام شِمای آن‌ها شامل foo است. با بخش نام پایگاه داده به عنوان الگو برخورد نخواهد شد و باید با نام پایگاه داده‌ای که در حال حاضر به آن متصل هستید مطابقت داشته باشد، در غیر این صورت خطا صادر می‌شود.

کاربران پیشرفته می‌توانند از نشانه‌گذاری‌های عبارت باقاعده (regular-expression) مانند رده‌های نویسه، برای مثال [0-9] جهت مطابقت با هر رقمی استفاده کنند. تمام نویسه‌های خاص عبارت‌های باقاعده همان‌طور که در بخش 9.7.3 مشخص شده عمل می‌کنند، به جز . که همان‌طور که در بالا ذکر شد به عنوان جداکننده در نظر گرفته می‌شود، * که به نشانه‌گذاری عبارت باقاعده .* ترجمه می‌شود، ? که به . ترجمه می‌شود، و $ که به صورت لفظی مطابقت می‌یابد. شما می‌توانید در صورت نیاز این نویسه‌های الگو را با نوشتن ? به جای .، (R+|) به جای R*، یا (R|) به جای R? شبیه‌سازی کنید. به $ به عنوان یک نویسه عبارت باقاعده نیازی نیست، چرا که بر خلاف تفسیر معمول از عبارت‌های باقاعده، الگو باید با کل نام مطابقت داشته باشد (به عبارت دیگر، $ به طور خودکار به انتهای الگوی شما پیوست می‌شود). اگر نمی‌خواهید الگو لنگراندازی (anchored) شود، * را در ابتدا و/یا انتهای آن قرار دهید. توجه داشته باشید که درون نقل‌قول دوتایی، همه نویسه‌های خاص عبارت باقاعده معانی خاص خود را از دست می‌دهند و به صورت لفظی مطابقت می‌یابند. همچنین، نویسه‌های خاص عبارت باقاعده در الگوهای نام عملگر (یعنی آرگومانِ \do) به صورت لفظی مطابقت داده می‌شوند.

متغیرها (Variables)

دستور psql قابلیت‌های جایگزینی متغیر را مشابه پوسته‌های خط فرمان متداول Unix فراهم می‌کند. متغیرها صرفاً جفت‌های نام/مقدار هستند که در آن‌ها مقدار می‌تواند هر رشته‌ای با هر طولی باشد. نام متغیر باید از حروف (شامل حروف غیرلاتین)، ارقام، و زیرخط‌ها تشکیل شده باشد.

برای تنظیم یک متغیر، از فرافرمان psql با نام \set استفاده کنید. برای مثال،

testdb=> \set foo bar

متغیر foo را روی مقدار bar تنظیم می‌کند. برای بازیابی محتوای متغیر، یک دو‌نقطه پیش از نام آن قرار دهید، برای مثال:

testdb=> \echo :foo
bar

این قابلیت هم در دستورهای عادی SQL و هم در فرافرمان‌ها کار می‌کند؛ جزئیات بیشتر در بخش «درون‌یابی SQL» (SQL Interpolation) در زیر آمده است.

اگر \set را بدون آرگومان دوم فراخوانی کنید، متغیر روی یک مقدار رشته تهی تنظیم می‌شود. برای لغو تنظیم (یعنی حذف) یک متغیر، از دستور \unset استفاده کنید. برای نمایش مقادیر تمام متغیرها، \set را بدون هیچ آرگومانی فراخوانی کنید.


نکته (Note)

آرگومان‌های \set مشمول همان قواعد جایگزینی سایر دستورها هستند. بدین ترتیب می‌توانید ارجاع‌های جالبی مانند \set :foo 'something' بسازید و به ترتیب به “پیوندهای نرم” یا “متغیرهای متغیری” معروف در Perl یا PHP دست یابید. متأسفانه (یا خوشبختانه؟)، هیچ راهی برای انجام کار مفیدی با این ساختارها وجود ندارد. از سوی دیگر، \set bar :foo روشی کاملاً معتبر برای رونوشت برداشتن از یک متغیر است.

تعدادی از این متغیرها توسط psql به شکلی ویژه مدیریت می‌شوند. آن‌ها تنظیمات گزینه‌ای خاصی را نشان می‌دهند که می‌توانند در زمان اجرا با تغییر دادن مقدار متغیر دگرگون شوند، یا در برخی موارد نمایانگر وضعیت قابل تغییر psql هستند. طبق قرارداد، نام تمام متغیرهایی که با آن‌ها به‌طور خاص رفتار می‌شود، همگی از حروف بزرگ ASCII (و احتمالاً ارقام و زیرخط‌ها) تشکیل شده‌اند. برای اطمینان از حداکثر سازگاری در آینده، از استفاده از چنین نام‌هایی برای مقاصد شخصی خود خودداری کنید.

متغیرهایی که رفتار psql را کنترل می‌کنند عموماً نمی‌توانند لغو تنظیم (unset) شوند یا روی مقادیر نامعتبر تنظیم گردند. اجرای دستور \unset مجاز است اما به عنوان تنظیم متغیر روی مقدار پیش‌فرض آن تفسیر می‌شود. دستور \set بدون آرگومان دوم، برای متغیرهای کنترلی که مقدار on را می‌پذیرند، به عنوان تنظیم متغیر روی on تفسیر می‌شود و برای بقیه متغیرها رد خواهد شد. همچنین، متغیرهای کنترلی که مقادیر on و off را می‌پذیرند، سایر نگارش‌های متداول مقادیر بولی مانند true و false را نیز خواهند پذیرفت.

متغیرهایی که به‌طور ویژه مدیریت می‌شوند عبارتند از:

AUTOCOMMIT

هنگامی که روی on (پیش‌فرض) باشد، هر دستور SQL به محض تکمیل موفقیت‌آمیز به طور خودکار تثبیت (commit) می‌شود. برای به تعویق انداختن تثبیت در این حالت، باید دستور SQL با نام BEGIN یا START TRANSACTION را وارد کنید. هنگامی که روی off باشد یا لغو تنظیم شده باشد، دستورهای SQL تا زمانی که صراحتاً COMMIT یا END را صادر نکنید تثبیت نمی‌شوند. حالت autocommit-off با صادر کردن یک BEGIN ضمنی برای شما کار می‌کند؛ این کار درست قبل از هر دستوری صورت می‌گیرد که پیش‌تر درون یک بلوک تراکنش قرار نداشته و خودش دستور BEGIN یا سایر دستورهای کنترل تراکنش نبوده و همچنین از دستورهایی نباشد که نمی‌توان آن‌ها را درون یک بلوک تراکنش اجرا کرد (مانند VACUUM).

نکته (Note)
در حالت autocommit-off، باید هر تراکنش ناموفق را با وارد کردن ABORT یا ROLLBACK صراحتاً رها کنید. همچنین به یاد داشته باشید که اگر بدون تثبیت کردن از نشست خارج شوید، کارهای شما از بین خواهد رفت.

نکته (Note)
حالت autocommit-on رفتار سنتی PostgreSQL است، اما حالت autocommit-off به مشخصات استاندارد SQL نزدیک‌تر است. اگر autocommit-off را ترجیح می‌دهید، ممکن است بخواهید آن را در فایل سراسری psqlrc سیستم یا فایل شخصی ~/.psqlrc خود تنظیم کنید.
COMP_KEYWORD_CASE
مشخص می‌کند که هنگام تکمیل خودکار یک کلمه کلیدی SQL، از کدام حالت حروف بزرگ یا کوچک (letter case) استفاده شود. اگر روی lower یا upper تنظیم شود، کلمه تکمیل‌شده به‌ترتیب با حروف کوچک یا بزرگ خواهد بود. اگر روی preserve-lower یا preserve-upper (پیش‌فرض) تنظیم شود، کلمه تکمیل‌شده حالت حروفی را که تا کنون وارد شده است حفظ می‌کند، اما کلماتی که بدون وارد کردن نویسه‌ای تکمیل شوند، به‌ترتیب با حروف کوچک یا بزرگ خواهند بود.

DBNAME

نام پایگاه داده‌ای که در حال حاضر به آن متصل هستید. این متغیر هر بار که به یک پایگاه داده متصل می‌شوید (از جمله هنگام راه‌اندازی برنامه) مقداردهی می‌شود، اما می‌توان آن را تغییر داد یا لغو کرد.

ECHO

اگر روی all تنظیم شود، تمام خطوط ورودی غیرخالی به محض خوانده شدن در خروجی استاندارد چاپ می‌شوند. (این امر بر خطوطی که به صورت تعاملی خوانده می‌شوند اعمال نمی‌گردد.) برای انتخاب این رفتار در هنگام راه‌اندازی برنامه، از سوئیچ -a استفاده کنید. اگر روی queries تنظیم شود، psql هر پرس‌وجو را در هنگام ارسال به سرور، در خروجی استاندارد چاپ می‌کند. سوئیچ برای انتخاب این رفتار -e است. اگر روی errors تنظیم شود، تنها پرس‌وجوهای ناموفق در خروجی خطای استاندارد نمایش داده می‌شوند. سوئیچ این رفتار -b است. اگر روی none (پیش‌فرض) تنظیم شود، هیچ پرس‌وجویی نمایش داده نمی‌شود.

ECHO_HIDDEN

هنگامی که این متغیر روی on تنظیم شده باشد و یک دستور ممیز وارونه (backslash command) از پایگاه داده پرس‌وجو کند، ابتدا آن پرس‌وجو نشان داده می‌شود. این ویژگی به شما در مطالعه سازوکارهای درونی PostgreSQL و ارائه قابلیت‌های مشابه در برنامه‌های خودتان کمک می‌کند. (برای انتخاب این رفتار هنگام راه‌اندازی برنامه، از سوئیچ -E استفاده کنید.) اگر این متغیر را روی مقدار noexec تنظیم کنید، پرس‌وجوها فقط نمایش داده می‌شوند اما در عمل به سرور ارسال و اجرا نمی‌شوند. مقدار پیش‌فرض off است.

ENCODING

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

ERROR

در صورت شکست آخرین پرس‌وجوی SQL مقدار true و در صورت موفقیت آن مقدار false است. همچنین SQLSTATE را ببینید.

FETCH_COUNT

اگر این متغیر روی یک مقدار عددی صحیح بزرگ‌تر از صفر تنظیم شود، نتایج پرس‌وجوهای SELECT به جای رفتار پیش‌فرضِ جمع‌آوری کل مجموعه نتایج پیش از نمایش، در گروه‌هایی به همان تعداد سطر واکشی و نمایش داده می‌شوند. بنابراین، فارغ از اندازه مجموعه نتایج، تنها مقدار محدودی از حافظه مصرف می‌شود. هنگام فعال‌سازی این ویژگی، معمولاً مقادیر ۱۰۰ تا ۱۰۰۰ استفاده می‌شوند. به یاد داشته باشید که هنگام استفاده از این ویژگی، ممکن است یک پرس‌وجو پس از نمایش چند سطر با شکست مواجه شود.

نکته
اگرچه می‌توانید از هر قالب خروجی با این ویژگی استفاده کنید، قالب پیش‌فرض aligned معمولاً ظاهر مناسبی پیدا نمی‌کند زیرا هر گروه از سطرهای FETCH_COUNT به صورت جداگانه قالب‌بندی می‌شوند، که باعث ایجاد عرض‌های متغیر برای ستون‌ها در بین گروه‌های سطر خواهد شد. سایر قالب‌های خروجی عملکرد بهتری دارند.

HIDE_TABLEAM

اگر این متغیر روی true تنظیم شود، جزئیات روش دسترسی جدول (access method) نمایش داده نمی‌شود. این متغیر عمدتاً برای آزمون‌های رگرسیون مفید است.

HIDE_TOAST_COMPRESSION

اگر این متغیر روی true تنظیم شود، جزئیات روش فشرده‌سازی ستون نمایش داده نمی‌شود. این متغیر عمدتاً برای آزمون‌های رگرسیون مفید است.

HISTCONTROL

اگر این متغیر روی ignorespace تنظیم شود، خطوطی که با فاصله (space) آغاز می‌شوند در فهرست تاریخچه ثبت نمی‌شوند. اگر روی مقدار ignoredups تنظیم شود، خطوطی که با خط قبلی تاریخچه یکسان باشند وارد نمی‌شوند. مقدار ignoreboth ترکیبی از هر دو گزینه است. اگر روی none (پیش‌فرض) تنظیم شود، تمامی خطوط خوانده‌شده در حالت تعاملی در فهرست تاریخچه ذخیره می‌شوند.

یادداشت
این ویژگی بی‌شرمانه از Bash کپی‌برداری شده است.

HISTFILE

نام فایلی که برای ذخیره فهرست تاریخچه استفاده خواهد شد. در صورت عدم تنظیم، نام فایل از متغیر محیطی PSQL_HISTORY گرفته می‌شود. اگر آن هم تنظیم نشده باشد، مقدار پیش‌فرض ~/.psql_history، یا در Windows برابر با %APPDATA%\postgresql\psql_history است. برای مثال، قرار دادن:
\set HISTFILE ~/.psql_history-:DBNAME

در ~/.psqlrc باعث خواهد شد psql یک تاریخچه جداگانه برای هر پایگاه داده نگهداری کند.


یادداشت
این ویژگی بی‌شرمانه از Bash کپی‌برداری شده است.

HISTSIZE

حداکثر تعداد دستوراتی که در تاریخچه دستورات ذخیره می‌شوند (پیش‌فرض ۵۰۰). اگر روی یک مقدار منفی تنظیم شود، هیچ محدودیتی اعمال نمی‌گردد.

یادداشت
این ویژگی بی‌شرمانه از Bash کپی‌برداری شده است.

HOST

میزبان سرور پایگاه داده‌ای که در حال حاضر به آن متصل هستید. این متغیر هر بار که به یک پایگاه داده متصل می‌شوید (از جمله هنگام راه‌اندازی برنامه) مقداردهی می‌شود، اما می‌توان آن را تغییر داد یا مقدارش را لغو کرد.

IGNOREEOF

اگر روی ۱ یا کمتر تنظیم شود، ارسال یک نویسهٔ EOF (معمولاً Control+D) به یک نشست تعاملی psql باعث خروج از برنامه می‌شود. اگر روی یک مقدار عددی بزرگ‌تر تنظیم شود، باید همان تعداد نویسهٔ EOF متوالی وارد شود تا نشست تعاملی خاتمه یابد. اگر متغیر روی یک مقدار غیرعددی تنظیم شود، به عنوان ۱۰ تفسیر می‌گردد. مقدار پیش‌فرض ۰ است.

یادداشت
این ویژگی بی‌شرمانه از Bash کپی‌برداری شده است.
LASTOID
مقدار آخرین OID تأثیرپذیرفته، همان‌گونه که از یک دستور INSERT یا \lo_import بازگردانده شده است. معتبر بودن این متغیر تنها تا پیش از نمایش نتیجهٔ دستور SQL بعدی تضمین می‌شود. سرورهای PostgreSQL از نسخهٔ 12 به بعد دیگر از ستون‌های سیستمی OID پشتیبانی نمی‌کنند، بنابراین هنگام کار با این سرورها، مقدار LASTOID پس از INSERT همواره 0 خواهد بود.

LAST_ERROR_MESSAGE
LAST_ERROR_SQLSTATE

پیام خطای اصلی و کد SQLSTATE مرتبط برای تازه‌ترین پرس‌وجوی شکست‌خورده در نشست کنونی psql، یا یک رشتهٔ خالی و 00000 در صورتی که هیچ خطایی در نشست فعلی رخ نداده باشد.

ON_ERROR_ROLLBACK

هنگامی که روی on تنظیم شود، اگر دستوری در یک بلوک تراکنش خطایی ایجاد کند، خطا نادیده گرفته شده و تراکنش ادامه می‌یابد. هنگامی که روی interactive تنظیم شود، چنین خطاهایی فقط در نشست‌های تعاملی نادیده گرفته می‌شوند، و نه هنگام خواندن فایل‌های اسکریپت. هنگامی که روی off (پیش‌فرض) تنظیم شود، دستوری در یک بلوک تراکنش که خطایی تولید کند، کل تراکنش را لغو (abort) می‌کند. حالت بازگردانی خطا با اجرای یک SAVEPOINT ضمنی درست پیش از هر دستور درون یک بلوک تراکنش کار می‌کند، و در صورت شکست دستور، به آن نقطهٔ ذخیره (savepoint) بازمی‌گردد.

ON_ERROR_STOP

به‌طور پیش‌فرض، پردازش دستورها پس از بروز خطا ادامه می‌یابد. هنگامی که این متغیر روی on تنظیم شود، پردازش بلافاصله متوقف خواهد شد. در حالت تعاملی، psql به اعلان خط فرمان بازخواهد گشت؛ در غیر این صورت، psql خارج شده و کد خطای 3 را بازمی‌گرداند تا این حالت از شرایط خطای مهلک (fatal) که با کد خطای 1 گزارش می‌شوند متمایز گردد. در هر دو حالت، هر اسکریپت در حال اجرا (اسکریپت سطح بالا، در صورت وجود، و هر اسکریپت دیگری که ممکن است فراخوانی کرده باشد) بلافاصله خاتمه خواهد یافت. اگر رشتهٔ دستور سطح بالا شامل چندین دستور SQL باشد، پردازش در دستور فعلی متوقف خواهد شد.

PIPELINE_COMMAND_COUNT

تعداد دستورهای صف‌بندی‌شده در یک پایپ‌لاین در حال اجرا.

PIPELINE_RESULT_COUNT

تعداد دستورهای یک پایپ‌لاینِ در حال اجرا که به دنبال آن‌ها یک \flushrequest یا یک \syncpipeline آمده و سرور را وادار به ارسال نتایج کرده است. این نتایج را می‌توان با \getresults دریافت کرد.

PIPELINE_SYNC_COUNT

تعداد پیام‌های sync صف‌بندی‌شده در یک پایپ‌لاین در حال اجرا.

PORT

پورت سرور پایگاه داده که در حال حاضر به آن متصل هستید. این مقدار هر بار که به یک پایگاه داده متصل می‌شوید (از جمله هنگام راه‌اندازی برنامه) تنظیم می‌شود، اما می‌تواند تغییر داده شده یا لغو (unset) شود.

PROMPT1
PROMPT2
PROMPT3

این متغیرها تعیین می‌کنند اعلان‌هایی (prompts) که psql نمایش می‌دهد چه ظاهری داشته باشند. بخش Prompting را در زیر ببینید.

QUIET

تنظیم این متغیر روی on معادل گزینهٔ خط فرمان -q است. این گزینه احتمالاً در حالت تعاملی کاربرد چندانی ندارد.

ROW_COUNT

تعداد سطرهای بازگردانده شده یا تأثیرپذیرفته از آخرین پرس‌وجوی SQL، یا 0 در صورتی که پرس‌وجو شکست خورده باشد یا تعداد سطرها را گزارش نکرده باشد.

SERVER_VERSION_NAME
SERVER_VERSION_NUM

شمارهٔ نسخهٔ سرور به صورت رشته، برای مثال 9.6.2، 10.1 یا 11beta1، و به شکل عددی، برای مثال 90602 یا 100001. این مقادیر هر بار که به یک پایگاه داده متصل می‌شوید (از جمله هنگام راه‌اندازی برنامه) تنظیم می‌شوند، اما می‌توان آن‌ها را تغییر داد یا لغو (unset) کرد.

SERVICE

نام سرویس، در صورت وجود.

SHELL_ERROR

اگر آخرین دستور پوسته شکست بخورد مقدار true، و اگر با موفقیت انجام شود مقدار false خواهد بود. این متغیر برای دستورهای پوسته‌ای اعمال می‌شود که از طریق فرادستورهای \!، \g، \o، \w و \copy، و همچنین بسط بک‌تیک (`) فراخوانی شده‌اند. توجه داشته باشید که برای \o، این متغیر زمانی به‌روزرسانی می‌شود که پایپ خروجی توسط دستور \o بعدی بسته شود. همچنین ببینید: SHELL_EXIT_CODE.

SHELL_EXIT_CODE

وضعیت خروج بازگردانده شده توسط آخرین دستور پوسته. بازهٔ 0–127 نشان‌دهندهٔ کدهای خروج برنامه است، 128–255 نشان‌دهندهٔ پایان یافتن توسط یک سیگنال است، و -1 نشان‌دهندهٔ عدم موفقیت در اجرای برنامه یا دریافت وضعیت خروج آن است. این متغیر برای دستورهای پوسته‌ای اعمال می‌شود که از طریق فرادستورهای \!، \g، \o، \w و \copy، و همچنین بسط بک‌تیک (`) فراخوانی شده‌اند. توجه داشته باشید که برای \o، این متغیر زمانی به‌روزرسانی می‌شود که پایپ خروجی توسط دستور \o بعدی بسته شود. همچنین ببینید: SHELL_ERROR.

SHOW_ALL_RESULTS

هنگامی که این متغیر روی off تنظیم شود، به جای نمایش همهٔ نتایج، تنها آخرین نتیجهٔ یک پرس‌وجوی ترکیبی (\;) نشان داده می‌شود. مقدار پیش‌فرض on است. رفتار off برای سازگاری با نسخه‌های قدیمی‌تر psql در نظر گرفته شده است.

SHOW_CONTEXT

این متغیر را می‌توان روی مقادیر never، errors یا always تنظیم کرد تا کنترل شود که آیا فیلدهای CONTEXT در پیام‌های دریافتی از سرور نمایش داده شوند یا خیر. پیش‌فرض errors است (به این معنی که context در پیام‌های خطا نمایش داده خواهد شد، اما در پیام‌های notice یا هشدار نمایش داده نمی‌شود). این تنظیم هنگامی که VERBOSITY روی terse یا sqlstate تنظیم شده باشد هیچ اثری ندارد. (همچنین \errverbose را ببینید، برای مواردی که نسخهٔ پرجزئیات‌تری از خطایی که به تازگی دریافت کرده‌اید می‌خواهید.)

SINGLELINE

تنظیم این متغیر روی on معادل گزینهٔ خط فرمان -S است.

SINGLESTEP

تنظیم این متغیر روی on معادل گزینهٔ خط فرمان -s است.

SQLSTATE

کد خطا (پیوست A را ببینید) مرتبط با شکست آخرین پرس‌وجوی SQL، یا 00000 در صورت موفقیت آن. USER
کاربر پایگاه‌داده‌ای که هم‌اکنون با آن متصل هستید. این مقدار هر بار که به پایگاه‌داده متصل می‌شوید (از جمله هنگام آغاز برنامه) مقداردهی می‌شود، اما می‌توان آن را تغییر داد یا لغو کرد (unset).

VERBOSITY

این متغیر می‌تواند روی مقادیر default، verbose، terse، یا sqlstate تنظیم شود تا میزان جزئیات گزارش‌های خطا را کنترل کند. (همچنین ببینید \errverbose، برای مواردی که نسخه مفصل‌تری از خطای تازه دریافت شده را می‌خواهید.)

VERSION
VERSION_NAME
VERSION_NUM

این متغیرها هنگام آغاز برنامه برای نمایش نسخهٔ psql تنظیم می‌شوند؛ به ترتیب به‌صورت یک رشته مفصل، یک رشته کوتاه (مانند 9.6.2، 10.1، یا 11beta1)، و یک عدد (مانند 90602 یا 100001). این متغیرها را می‌توان تغییر داد یا لغو کرد (unset).

WATCH_INTERVAL

این متغیر بازه زمانی پیش‌فرض را برحسب ثانیه تعیین می‌کند که \watch بین اجرای مجدد پرس‌وجوها منتظر می‌ماند. مقدار پیش‌فرض ۲ ثانیه است. تعیین بازه زمانی در خود دستور، این متغیر را نادیده می‌گیرد.

درون‌یابی در SQL (SQL Interpolation)

یکی از ویژگی‌های کلیدی متغیرهای psql این است که می‌توانید آن‌ها را در دستورات عادی SQL و همچنین آرگومان‌های فرادستورها جایگزین («درون‌یابی») کنید. علاوه بر این، psql امکاناتی فراهم می‌کند تا اطمینان حاصل شود مقادیر متغیرهای مورد استفاده به‌عنوان لیترال‌ها و شناسه‌های SQL به‌درستی درون علامت نقل‌قول (quote) قرار می‌گیرند. نحوِ درون‌یابی یک مقدار بدون هیچ‌گونه نقل‌قول، قرار دادن دونقطه (:) قبل از نام متغیر است. برای نمونه،

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;

از جدول my_table پرس‌وجو می‌کند. توجه داشته باشید که این کار ممکن است ناامن باشد: مقدار متغیر به‌صورت لفظی کپی می‌شود، بنابراین می‌تواند حاوی نقل‌قول‌های نامتوازن یا حتی دستورات ممیز وارونه (backslash) باشد. باید مطمئن شوید مقداری که قرار می‌دهید در آن جایگاه معنای درستی دارد.

هنگامی که قرار است مقداری به‌عنوان یک لیترال یا شناسهٔ SQL استفاده شود، ایمن‌ترین روش این است که در نقل‌قول قرار داده شود. برای نقل‌قول کردن مقدار یک متغیر به‌عنوان یک لیترال SQL، یک دونقطه و سپس نام متغیر را درون گیومهٔ تکی (single quote) بنویسید. برای نقل‌قول کردن مقدار به‌عنوان یک شناسهٔ SQL، یک دونقطه و سپس نام متغیر را درون گیومهٔ دوتایی (double quote) بنویسید. این ساختارها به‌درستی با نقل‌قول‌ها و سایر نویسه‌های خاصِ درون مقدار متغیر برخورد می‌کنند. مثال قبلی را می‌توان با ایمنی بیشتر به این شکل نوشت:

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :"foo";

درون‌یابی متغیر در لیترال‌ها و شناسه‌های نقل‌قول‌شدهٔ SQL انجام نخواهد شد. بنابراین، ساختاری مانند ':foo' برای تولید یک لیترال نقل‌قول‌شده از مقدار متغیر کارایی ندارد (و حتی در صورت کارایی نیز ناامن می‌بود، زیرا نمی‌توانست نقل‌قول‌های نهفته در مقدار را به‌درستی مدیریت کند).

یک نمونه کاربرد این سازوکار، کپی کردن محتوای یک فایل درون یک ستون از جدول است. ابتدا فایل را درون یک متغیر بارگذاری کرده و سپس مقدار متغیر را به‌عنوان یک رشتهٔ نقل‌قول‌شده درج کنید:

testdb=> \set content `cat my_file.txt`
testdb=> INSERT INTO my_table VALUES (:'content');

(توجه داشته باشید که اگر my_file.txt حاوی بایت‌های NUL باشد، این روش کار نخواهد کرد. psql از بایت‌های NUL درون مقادیر متغیرها پشتیبانی نمی‌کند.)

از آنجا که علامت دونقطه می‌تواند به‌طور قانونی در دستورات SQL ظاهر شود، تلاشی ظاهری برای درون‌یابی (یعنی :name، :'name'، یا :"name") جایگزین نخواهد شد مگر اینکه متغیرِ نام‌برده در حال حاضر تنظیم شده باشد. در هر صورت، می‌توانید با یک ممیز وارونه (backslash) علامت دونقطه را گریزدهی (escape) کنید تا از جایگزینی محافظت شود.

نحو ویژهٔ :{?name} بسته به وجود یا عدم وجود متغیر، مقدار TRUE یا FALSE برمی‌گرداند و بنابراین همیشه جایگزین می‌شود، مگر اینکه دونقطه با ممیز وارونه گریزدهی شده باشد.

نحو دونقطه برای متغیرها، استاندارد SQL برای زبان‌های پرس‌وجوی تعبیه‌شده (مانند ECPG) است. نحوهای دونقطه برای برش‌های آرایه (array slices) و تبدیل نوع‌ها (type casts) از افزونه‌های PostgreSQL هستند که گاهی ممکن است با کاربرد استاندارد تداخل داشته باشند. نحو دونقطه-گیومه برای گریزدهی مقدار یک متغیر به‌عنوان یک لیترال یا شناسهٔ SQL، از افزونه‌های ویژهٔ psql است.

اعلان‌ها (Prompting)

اعلان‌هایی (prompts) که psql صادر می‌کند را می‌توان مطابق با اولویت‌های خود سفارشی کرد. سه متغیر PROMPT1، PROMPT2، و PROMPT3 شامل رشته‌ها و توالی‌های گریز ویژه‌ای هستند که ظاهر اعلان را توصیف می‌کنند. اعلان ۱، اعلان عادی است که هنگام درخواست یک دستور جدید توسط psql نمایش داده می‌شود. اعلان ۲ زمانی ظاهر می‌شود که در هنگام ورود دستور به ورودی بیشتری نیاز باشد؛ برای نمونه به این دلیل که دستور با نقطه‌ویرگول (semicolon) خاتمه نیافته یا یک گیومه بسته نشده است. اعلان ۳ زمانی نمایش داده می‌شود که در حال اجرای دستور SQL به صورت COPY FROM STDIN هستید و باید مقادیر ردیف را در ترمینال تایپ کنید.

مقدار متغیرِ اعلانِ انتخاب‌شده به‌صورت لفظی چاپ می‌شود، مگر در جایی که علامت درصد (%) وجود داشته باشد. بسته به نویسهٔ بعدی، متن مشخص دیگری به‌جای آن جایگزین می‌شود. جایگزینی‌های تعریف‌شده عبارتند از:

%M

نام کامل میزبان (همراه با نام دامنه) سرور پایگاه‌داده، یا [local] اگر اتصال از طریق یک سوکت دامنه یونیکس (Unix domain socket) باشد، یا [local:/dir/name]، اگر سوکت دامنه یونیکس در مکان پیش‌فرض کامپایل‌شده نباشد.

%m

نام میزبان سرور پایگاه‌داده، که در اولین نقطه کوتاه شده است، یا [local] اگر اتصال از طریق یک سوکت دامنه یونیکس باشد.

%>

شماره پورتی که سرور پایگاه‌داده روی آن به درخواست‌ها گوش می‌دهد.

%n

نام کاربری نشست پایگاه‌داده. (گسترش این مقدار ممکن است در طول نشست پایگاه‌داده در نتیجهٔ اجرای دستور SET SESSION AUTHORIZATION تغییر کند.)

%s

نام سرویس.

%/

نام پایگاه‌دادهٔ فعلی.

%~

مانند %/، اما اگر پایگاه‌داده همان پایگاه‌دادهٔ پیش‌فرض شما باشد، خروجی ~ (تیلدا) خواهد بود.

%#

اگر کاربر نشست، یک مدیر سیستم (superuser) پایگاه‌داده باشد علامت #، و در غیر این صورت >. (گسترش این مقدار ممکن است در طول نشست پایگاه‌داده در نتیجهٔ اجرای دستور SET SESSION AUTHORIZATION تغییر کند.) %p
شناسه فرایند (PID) پس‌زمینه‌ای (backend) که هم‌اکنون به آن متصل است.

%P

وضعیت خط‌لوله (pipeline): off هنگامی که درون یک خط‌لوله نیست، on هنگامی که درون یک خط‌لولهٔ در حال اجرا است، یا abort هنگامی که درون یک خط‌لولهٔ لغوشده (aborted) قرار دارد.

%R

در اعلان ۱ معمولاً =، اما @ اگر نشست در یک شاخهٔ غیرفعال از یک بلوک شرطی باشد، یا ^ اگر در حالت تک‌خطی باشد، یا ! اگر اتصال نشست از پایگاه‌داده قطع شده باشد (که می‌تواند در صورت شکست خوردن \connect رخ دهد). در اعلان ۲ %R با نویسه‌ای جایگزین می‌شود که بستگی دارد به این که چرا psql منتظر ورودی بیشتر است: - اگر دستور صرفاً هنوز پایان نیافته است، اما * اگر یک کامنت ناتمام /* ... */ وجود داشته باشد، یک نقل‌قول تکی (single quote) اگر یک رشتهٔ نقل‌قول‌شدهٔ ناتمام باشد، یک نقل‌قول دوتایی (double quote) اگر یک شناسهٔ نقل‌قول‌شدهٔ ناتمام باشد، یک علامت دلار اگر یک رشتهٔ dollar-quoted ناتمام باشد، یا ( اگر یک پرانتز باز (چپ) بدون جفت وجود داشته باشد. در اعلان ۳ %R هیچ چیزی تولید نمی‌کند.

%x

وضعیت تراکنش: یک رشتهٔ خالی هنگامی که در یک بلوک تراکنش نیست، یا * هنگامی که در یک بلوک تراکنش قرار دارد، یا ! هنگامی که در یک بلوک تراکنش شکست‌خورده است، یا ? هنگامی که وضعیت تراکنش نامشخص است (برای مثال، به این دلیل که اتصالی برقرار نیست).

%l

شمارهٔ خط در عبارت فعلی، با شروع از 1.

%digits

نویسه با کد هشت‌هشتی (octal) مشخص‌شده جایگزین می‌شود.

%:name:

مقدار متغیر name در psql. برای جزئیات بیشتر بخش «متغیرها» در بالا را ببینید.

%`command`

خروجی command، مشابه جایگزینی معمول “بک‌تیک” (back-tick).

%[ ... %]

اعلان‌ها می‌توانند شامل نویسه‌های کنترلی پایانه باشند که برای مثال، رنگ، پس‌زمینه یا سبک متن اعلان را تغییر می‌دهند، یا عنوان پنجرهٔ پایانه را عوض می‌کنند. برای اینکه ویژگی‌های ویرایش خط Readline به‌درستی کار کنند، این نویسه‌های کنترلیِ غیرقابل چاپ باید با قرار گرفتن بین %[ و %] به عنوان نامرئی مشخص شوند. چندین جفت از این‌ها می‌تواند درون اعلان قرار گیرد. برای مثال:
testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '

در پایانه‌های سازگار با VT100 و با قابلیت نمایش رنگ، منجر به یک اعلان پررنگ (1;) با رنگ زرد روی مشکی (33;40) می‌شود.

%w

فاصلهٔ خالی (whitespace) با همان عرض آخرین خروجیِ PROMPT1. می‌توان از این به عنوان تنظیمات PROMPT2 استفاده کرد تا دستورات چندخطی با خط اول تراز شوند، اما اعلان ثانویهٔ قابل‌مشاهده‌ای وجود نداشته باشد.
برای درج یک علامت درصد در اعلان خود، بنویسید %%. اعلان‌های پیش‌فرض عبارتند از '%/%R%x%# ' برای اعلان‌های ۱ و ۲، و '>> ' برای اعلان ۳.

نکته

این قابلیت بی‌شرمانه از tcsh کپی‌برداری شده است.

ویرایش خط فرمان (Command-Line Editing)

psql در صورت در دسترس بودن، از کتابخانهٔ Readline یا libedit برای ویرایش و بازیابی راحت خطوط استفاده می‌کند. تاریخچهٔ دستورها هنگام خروج psql به طور خودکار ذخیره شده و هنگام راه‌اندازی مجدد psql دوباره بارگذاری می‌شود. کلید جهت‌نمای رو به بالا یا control-P را برای بازیابی خطوط پیشین فشار دهید.

شما همچنین می‌توانید از تکمیل خودکار با کلید تب (tab completion) برای پر کردن کلیدواژه‌ها و نام اشیاء SQL که ناتمام تایپ شده‌اند در بسیاری از زمینه‌ها (نه الزاماً همهٔ موارد) استفاده کنید. برای مثال، در ابتدای یک دستور، تایپ کردن ins و فشردن TAB عبارت insert into را تکمیل می‌کند. سپس، با تایپ چند نویسه از نام جدول یا طرحواره (schema) و زدن TAB، نام ناتمام تکمیل می‌شود یا در صورتی که بیش از یک مورد وجود داشته باشد، منویی از گزینه‌های ممکن پیشنهاد می‌گردد. (بسته به کتابخانهٔ مورد استفاده، ممکن است برای دریافت منو نیاز باشد TAB را بیش از یک بار فشار دهید.)

تکمیل با تب برای نام اشیاء SQL نیازمند ارسال پرس‌وجوهایی به سرور جهت یافتن موارد منطبق است. در برخی شرایط این کار می‌تواند با سایر عملیات تداخل پیدا کند. برای مثال، پس از BEGIN، اگر در این میان یک پرس‌وجوی تکمیل تب ارسال شود، صدور SET TRANSACTION ISOLATION LEVEL بسیار دیر خواهد بود. اگر اصلاً مایل به استفاده از تکمیل خودکار با تب نیستید، می‌توانید با قرار دادن این دستورها در فایلی به نام .inputrc در دایرکتوری خانگی خود، آن را برای همیشه غیرفعال کنید:

$if psql
set disable-completion on
$endif

(این ویژگی متعلق به psql نیست بلکه قابلیتی از Readline است. برای جزئیات بیشتر مستندات آن را مطالعه کنید.)

گزینهٔ خط فرمان -n (--no-readline) نیز می‌تواند برای غیرفعال کردن استفاده از Readline تنها برای یک بار اجرای psql مفید باشد. این گزینه مانع از تکمیل با تب، استفاده یا ثبت تاریخچهٔ خط فرمان، و ویرایش دستورهای چندخطی می‌شود. این ویژگی به‌ویژه زمانی سودمند است که نیاز به رونوشت و جای‌گذاری (copy-and-paste) متنی دارید که شامل نویسه‌های TAB است.

COLUMNS

اگر \pset columns صفر باشد، عرض را برای قالب wrapped و همچنین عرض جهت تعیین اینکه آیا خروجی عریض نیازمند صفحه‌بندی‌کننده است یا باید در حالت خودکار گسترش‌یافته به قالب عمودی تغییر وضعیت دهد، کنترل می‌کند.

PGDATABASE
PGHOST
PGPORT
PGUSER

پارامترهای اتصال پیش‌فرض (بخش 32.15 را ببینید).

PG_COLOR

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

PSQL_EDITOR
EDITOR
VISUAL

ویرایشگر مورداستفاده توسط دستورهای \e، \ef و \ev. این متغیرها به ترتیبی که فهرست شده‌اند بررسی می‌شوند؛ نخستین متغیری که تنظیم شده باشد استفاده می‌شود. اگر هیچ‌یک از آن‌ها تنظیم نشده باشند، مقدار پیش‌فرض استفاده از vi در سیستم‌های یونیکس یا notepad.exe در سیستم‌های ویندوز است.

PSQL_EDITOR_LINENUMBER_ARG

هنگامی که \e، \ef یا \ev همراه با یک آرگومان شماره خط استفاده شوند، این متغیر آرگومان خط فرمانی را که برای انتقال شماره خط آغازین به ویرایشگر کاربر استفاده می‌شود، مشخص می‌کند. برای ویرایشگرهایی مانند Emacs یا vi، این مقدار یک علامت مثبت است. چنانچه نیاز است بین نام گزینه و شماره خط فاصله وجود داشته باشد، یک فاصله انتهایی در مقدار متغیر قرار دهید. مثال‌ها:
PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '

مقدار پیش‌فرض در سیستم‌های یونیکس + است (مطابق با ویرایشگر پیش‌فرض vi، و مفید برای بسیاری از ویرایشگرهای رایج دیگر)؛ اما در سیستم‌های ویندوز هیچ مقدار پیش‌فرضی وجود ندارد.

PSQL_HISTORY

مکان جایگزین برای فایل تاریخچه دستورها. بسط تیلدا (~) انجام می‌شود.

PSQL_PAGER
PAGER

اگر نتایج یک پرس‌وجو در صفحه جا نشود، از طریق لوله‌کشی (pipe) به این دستور فرستاده می‌شوند. مقادیر متداول more یا less هستند. استفاده از صفحه‌بندی‌کننده را می‌توان با تنظیم PSQL_PAGER یا PAGER روی یک رشته خالی، یا با تنظیم گزینه‌های مربوط به صفحه‌بندی‌کننده در دستور \pset غیرفعال کرد. این متغیرها به ترتیبی که فهرست شده‌اند بررسی می‌شوند؛ نخستین متغیری که مقداردهی شده باشد استفاده می‌شود. اگر هیچ‌کدام تنظیم نشده باشند، پیش‌فرض استفاده از more در بیشتر پلتفرم‌ها است، اما در Cygwin پیش‌فرض less می‌باشد.

PSQL_WATCH_PAGER

هنگامی که یک پرس‌وجو به‌طور مکرر با دستور \watch اجرا می‌شود، به‌طور پیش‌فرض از صفحه‌بندی‌کننده استفاده نمی‌شود. این رفتار را می‌توان در سیستم‌های یونیکس با تنظیم PSQL_WATCH_PAGER روی یک دستور صفحه‌بندی‌کننده تغییر داد. صفحه‌بندی‌کننده pspg (که بخشی از PostgreSQL نیست اما در بسیاری از توزیع‌های نرم‌افزاری متن‌باز در دسترس است) چنانچه با گزینه --stream اجرا شود، می‌تواند خروجی \watch را نمایش دهد.

PSQLRC

مکان جایگزین فایل .psqlrc کاربر. بسط تیلدا (~) انجام می‌شود.

SHELL

دستور اجراشده توسط دستور \!.

TMPDIR

دایرکتوری برای ذخیره فایل‌های موقت. مقدار پیش‌فرض /tmp است.

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

psqlrc و ~/.psqlrc

مگر اینکه گزینهٔ -X مشخص شده باشد، psql پس از اتصال به پایگاه‌داده اما پیش از پذیرش دستورهای عادی، تلاش می‌کند دستورها را ابتدا از فایل راه‌اندازی سراسری سیستم (psqlrc) و سپس فایل راه‌اندازی شخصی کاربر (~/.psqlrc) بخواند و اجرا کند. این فایل‌ها می‌توانند برای پیکربندی کلاینت و/یا سرور بر اساس نیاز، معمولاً با دستورهای \set و SET مورد استفاده قرار گیرند.

فایل راه‌اندازی سراسری سیستم psqlrc نام دارد. به‌طور پیش‌فرض در دایرکتوری “پیکربندی سیستم” محل نصب جستجو می‌شود که مطمئن‌ترین روش شناسایی آن، اجرای pg_config --sysconfdir است. معمولاً این دایرکتوری نسبت به دایرکتوری حاوی فایل‌های اجرایی PostgreSQL، در مسیر ../etc/ قرار دارد. دایرکتوری مورد نظر برای جستجو را می‌توان صراحتاً از طریق متغیر محیطی PGSYSCONFDIR تعیین کرد.

فایل راه‌اندازی شخصی کاربر .psqlrc نام دارد و در دایرکتوری خانگی کاربر فراخواننده جستجو می‌شود. در Windows، فایل راه‌اندازی شخصی در عوض %APPDATA%\postgresql\psqlrc.conf نام دارد. در هر دو حالت، می‌توان این مسیر پیش‌فرض فایل را با تنظیم متغیر محیطی PSQLRC تغییر داد.

هر دو فایل راه‌اندازی سراسری سیستم و فایل راه‌اندازی شخصی کاربر را می‌توان با الحاق یک خط تیره و شناسهٔ نسخهٔ اصلی یا فرعی PostgreSQL به نام فایل، مختص نسخهٔ psql کرد؛ برای مثال ~/.psqlrc-18 یا ~/.psqlrc-18.6. فایلی که دقیق‌ترین تطابق نسخه را داشته باشد، با اولویت نسبت به فایل بدون نسخه خوانده خواهد شد. این پسوندهای نسخه پس از تعیین مسیر فایل به‌گونه‌ای که در بالا توضیح داده شد، اضافه می‌شوند.

.psql_history

تاریخچهٔ خط فرمان در فایل ~/.psql_history، یا در Windows در %APPDATA%\postgresql\psql_history ذخیره می‌شود.

محل فایل تاریخچه را می‌توان صراحتاً از طریق متغیر psql به نام HISTFILE یا متغیر محیطی PSQL_HISTORY تعیین کرد.

•psql با سرورهایی از همان نسخهٔ اصلی یا نسخه‌های قدیمی‌تر، بهترین کارکرد را دارد. در صورتی که سرور از نسخه‌ای جدیدتر از خودِ psql باشد، دستورهای بک‌اسلش به‌ویژه ممکن است با شکست مواجه شوند. با این وجود، دستورهای بک‌اسلش خانوادهٔ \d باید با سرورهایی تا نسخه‌های قدیمی‌تر مانند 9.2 کار کنند، هرچند نه لزوماً با سرورهای جدیدتر از خودِ psql. قابلیت کلی اجرای دستورهای SQL و نمایش نتایج پرس‌وجو نیز باید با سرورهای دارای نسخهٔ اصلی جدیدتر کار کند، اما این موضوع در همهٔ موارد تضمین‌شده نیست.

اگر می‌خواهید از psql برای اتصال به چندین سرور با نسخه‌های اصلی متفاوت استفاده کنید، توصیه می‌شود از جدیدترین نسخهٔ psql استفاده کنید. متناوباً، می‌توانید نسخه‌ای از psql را برای هر نسخهٔ اصلی نگه دارید و مطمئن شوید که از نسخه‌ای متناسب با سرور مربوطه استفاده می‌کنید. اما در عمل، این پیچیدگی مضاعف نباید لازم باشد.

•پیش از PostgreSQL 9.6، گزینهٔ -c به‌طور ضمنی شامل -X (--no-psqlrc) بود؛ اما دیگر چنین نیست.
•پیش از PostgreSQL 8.4، psql اجازه می‌داد اولین آرگومانِ یک دستور بک‌اسلشِ تک‌حرفی، مستقیماً پس از دستور و بدون هیچ فاصلهٔ خالی (whitespace) آغاز شود. اکنون، وجود فاصله الزامی است.

psql به عنوان یک “برنامهٔ کنسول” ساخته شده است. از آنجا که پنجره‌های کنسول Windows از کدگذاری متفاوتی نسبت به سایر بخش‌های سیستم استفاده می‌کنند، باید هنگام استفاده از نویسه‌های ۸-بیتی درون psql توجه ویژه‌ای داشته باشید. در صورتی که psql یک صفحهٔ کد کنسول مشکل‌ساز را تشخیص دهد، در زمان راه‌اندازی هشدار خواهد داد. برای تغییر صفحهٔ کد کنسول، دو اقدام لازم است:

•تنظیم صفحهٔ کد با وارد کردن cmd.exe /c chcp 1252. (1252 صفحهٔ کدی است که برای زبان آلمانی مناسب است؛ آن را با مقدار مناسب برای خود جایگزین کنید.) اگر از Cygwin استفاده می‌کنید، می‌توانید این دستور را در /etc/profile قرار دهید.
•تنظیم قلم کنسول بر روی Lucida Console، زیرا قلم شطرنجی (raster font) با صفحهٔ کد ANSI کار نمی‌کند.

نخستین مثال نشان می‌دهد چگونه می‌توان یک دستور را در چندین خط ورودی گسترش داد. به تغییر اعلان توجه کنید:

testdb=> CREATE TABLE my_table (
testdb(>  first integer not null default 0,
testdb(>  second text)
testdb-> ;
CREATE TABLE

اکنون دوباره به تعریف جدول نگاه کنید:

testdb=> \d my_table
              Table "public.my_table"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 first  | integer |           | not null | 0
 second | text    |           |          |

اکنون اعلان را به چیزی جالب‌تر تغییر می‌دهیم:

testdb=> \set PROMPT1 '%n@%m %~%R%# '
peter@localhost testdb=>

فرض کنید جدول را با داده‌ها پر کرده‌اید و می‌خواهید نگاهی به آن بیندازید:

peter@localhost testdb=> SELECT * FROM my_table;
 first | second
-------+--------
     1 | one
     2 | two
     3 | three
     4 | four
(4 rows)

می‌توانید با استفاده از دستور \pset جدول‌ها را به روش‌های گوناگونی نمایش دهید:

peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM my_table;
+-------+--------+
| first | second |
+-------+--------+
|     1 | one    |
|     2 | two    |
|     3 | three  |
|     4 | four   |
+-------+--------+
(4 rows)
peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM my_table;
first second
----- ------
    1 one
    2 two
    3 three
    4 four
(4 rows)
peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format csv
Output format is csv.
peter@localhost testdb=> \pset tuples_only
Tuples only is on.
peter@localhost testdb=> SELECT second, first FROM my_table;
one,1
two,2
three,3
four,4
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep '\t'
Field separator is "    ".
peter@localhost testdb=> SELECT second, first FROM my_table;
one     1
two     2
three   3
four    4

به‌عنوان روشی جایگزین، از دستورهای کوتاه استفاده کنید:

peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
peter@localhost testdb=> SELECT * FROM my_table;
-[ RECORD 1 ]-
first  | 1
second | one
-[ RECORD 2 ]-
first  | 2
second | two
-[ RECORD 3 ]-
first  | 3
second | three
-[ RECORD 4 ]-
first  | 4
second | four

همچنین، این گزینه‌های قالب خروجی را می‌توان با استفاده از \g تنها برای یک پرس‌وجو تنظیم کرد:

peter@localhost testdb=> SELECT * FROM my_table
peter@localhost testdb-> \g (format=aligned tuples_only=off expanded=on)
-[ RECORD 1 ]-
first  | 1
second | one
-[ RECORD 2 ]-
first  | 2
second | two
-[ RECORD 3 ]-
first  | 3
second | three
-[ RECORD 4 ]-
first  | 4
second | four

در اینجا مثالی از کاربرد دستور \df برای یافتن توابعی آمده است که نام آن‌ها با int*pl مطابقت دارد و آرگومان دوم آن‌ها از نوع bigint است:

testdb=> \df int*pl * bigint
                          List of functions
   Schema   |  Name   | Result data type | Argument data types | Type
------------+---------+------------------+---------------------+------
 pg_catalog | int28pl | bigint           | smallint, bigint    | func
 pg_catalog | int48pl | bigint           | integer, bigint     | func
 pg_catalog | int8pl  | bigint           | bigint, bigint      | func
(3 rows)
در اینجا، گزینهٔ + برای نمایش اطلاعات تکمیلی دربارهٔ یکی از این توابع و x برای نمایش نتایج در حالت گسترده (expanded mode) استفاده شده است:
testdb=> \df+x int*pl integer bigint
List of functions
-[ RECORD 1 ]-------+-----------------------------
Schema              | pg_catalog
Name                | int48pl
Result data type    | bigint
Argument data types | integer, bigint
Type                | func
Volatility          | immutable
Parallel            | safe
Owner               | postgres
Security            | invoker
Leakproof?          | no
Access privileges   |
Language            | internal
Internal name       | int48pl
Description         | implementation of + operator

در صورت مناسب بودن، نتایج پرس‌وجو را می‌توان با دستور \crosstabview به‌صورت نمای متقاطع (crosstab) نمایش داد:

testdb=> SELECT first, second, first > 2 AS gt2 FROM my_table;
 first | second | gt2
-------+--------+-----
     1 | one    | f
     2 | two    | f
     3 | three  | t
     4 | four   | t
(4 rows)
testdb=> \crosstabview first second
 first | one | two | three | four
-------+-----+-----+-------+------
     1 | f   |     |       |
     2 |     | f   |       |
     3 |     |     | t     |
     4 |     |     |       | t
(4 rows)

این مثال دوم یک جدول ضرب را نشان می‌دهد که در آن سطرها بر اساس ترتیب عددی معکوس مرتب شده‌اند و ستون‌ها دارای ترتیبی عددی، صعودی و مستقل هستند.

testdb=> SELECT t1.first as "A", t2.first+100 AS "B", t1.first*(t2.first+100) as "AxB",
testdb-> row_number() over(order by t2.first) AS ord
testdb-> FROM my_table t1 CROSS JOIN my_table t2 ORDER BY 1 DESC
testdb-> \crosstabview "A" "B" "AxB" ord
 A | 101 | 102 | 103 | 104
---+-----+-----+-----+-----
 4 | 404 | 408 | 412 | 416
 3 | 303 | 306 | 309 | 312
 2 | 202 | 204 | 206 | 208
 1 | 101 | 102 | 103 | 104
(4 rows)
2026 PostgreSQL 18.6