psql؛ ابزاری که روی هر سرور هست
ابزار گرافیکی راحت است، اما روی سرور تولید، در اسکریپتهای بکاپ و در ساعت دو بامداد فقط psql دارید. فرمانهایی که با بکاسلش شروع میشوند را خود psql اجرا میکند (نه سرور) و نقطهویرگول نمیخواهند.
psql -h 127.0.0.1 -p 5432 -U app_user -d carpet
psql "postgresql://app_user@127.0.0.1:5432/carpet?sslmode=require"
psql -d carpet -c "SELECT count(*) FROM orders"
psql -d carpet -f schema.sql -v ON_ERROR_STOP=1
فرمانهای بکاسلشی پرکاربرد
| فرمان | کار |
|---|---|
\l / \c dbname | فهرست دیتابیسها / اتصال به دیتابیس دیگر |
\dn / \dt app.* | schemaها / جدولهای یک schema |
\d+ orders | ساختار کامل جدول: ستونها، ایندکسها، قیدها، triggerها، حجم |
\du / \dp | roleها / مجوزهای جدولها |
\df+ name / \sf name | توابع / نمایش کد یک تابع |
\x auto | نمایش عمودی خودکار وقتی ردیف در عرض صفحه جا نمیشود |
\timing on | نمایش زمان اجرای هر کوئری |
\e / \ef name | باز کردن آخرین کوئری یا یک تابع در ویرایشگر |
\watch 5 | اجرای دوبارهی آخرین کوئری هر ۵ ثانیه |
\gx | اجرای کوئری فعلی با خروجی عمودی (فقط همین یک بار) |
\copy | ورود و خروج CSV از دید کلاینت |
فایل .psqlrc
این فایل در پوشهی خانه (در ویندوز %APPDATA%\postgresql\psqlrc.conf) هر بار اجرا میشود:
\set QUIET 1
\pset null '(null)'
\x auto
\timing on
\set ON_ERROR_ROLLBACK interactive
\set HISTFILE ~/.psql_history- :DBNAME
\set PROMPT1 '%n@%/%R%# '
\unset QUIET
ابزارهای گرافیکی
pgAdmin ابزار رسمی و وبمحور است؛ برای مدیریت roleها، مشاهدهی نشستها و EXPLAIN گرافیکی خوب است. DBeaver چنددیتابیسی است و برای کسی که همزمان با MySQL و SQL Server کار میکند راحتتر است؛ نمودار ER و ویرایش جدولی داده را هم دارد. در هر دو، تنظیم encoding اتصال را روی UTF8 و فونت ویرایشگر را روی فونتی با پشتیبانی فارسی (مثل Vazirmatn Code) بگذارید.
نکتههایی که کمتر کسی میداند
ON_ERROR_ROLLBACK interactiveقبل از هر دستور یک SAVEPOINT مخفی میسازد؛ در حالت تعاملی یک غلط تایپی دیگر کل تراکنش باز را خراب نمیکند (خطای current transaction is aborted).- psql با گزینهی
-Eکوئریهای واقعی پشت فرمانهای بکاسلشی را نشان میدهد؛ بهترین راه برای یاد گرفتن کاتالوگ سیستمی. \copyفایل را روی ماشین کلاینت میخواند، اماCOPY ... FROM '/path'فایل را روی سرور و با مجوز سرور؛ روی سرور راه دور تقریباً همیشه \copy میخواهید.- فایل
~/.pgpass(در ویندوز%APPDATA%\postgresql\pgpass.conf) با قالب host:port:db:user:password رمز را برای اسکریپتها نگه میدارد؛ روی لینوکس مجوزش باید 600 باشد وگرنه نادیده گرفته میشود. - با
\setمتغیر بسازید و با:'name'بهصورت رشتهی امن در کوئری بگذارید:\set city 'کاشان'و سپسWHERE city = :'city'.