سه راه نصب و انتخاب درست
برای یادگیری و توسعه روی ویندوز، نصاب رسمی کافی است؛ برای سرور، لینوکس با مخزن رسمی PGDG؛ و برای محیطهای تکرارپذیر و CI، داکر. نکتهی مشترک هر سه: نسخهی اصلی را آگاهانه انتخاب کنید (در این دوره 17) و بدانید دادهها کجا ذخیره میشوند.
ویندوز
نصاب EDB چهار جزء دارد: سرور، pgAdmin، Stack Builder و ابزارهای خط فرمان. رمز کاربر postgres را که میپرسد جایی امن نگه دارید؛ پورت پیشفرض 5432 است و سرویس با نام postgresql-x64-17 ثبت میشود. بعد از نصب، پوشهی bin را به PATH اضافه کنید تا psql در PowerShell در دسترس باشد:
$env:Path += ";C:\Program Files\PostgreSQL\17\bin"
$env:PGCLIENTENCODING = "UTF8"
chcp 65001
psql -U postgres -h localhost
دو خط وسط برای فارسی است: بدون آنها psql در کنسول ویندوز هشدار code page میدهد و حروف فارسی را خراب نمایش میدهد.
اوبونتو با مخزن PGDG
مخزن پیشفرض اوبونتو فقط یک نسخه (و معمولاً قدیمیتر) دارد. مخزن رسمی پروژه (PGDG) همهی نسخههای پشتیبانیشده و اکستنشنها را بهصورت بستهی آماده میدهد:
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt install -y postgresql-17 postgresql-contrib
pg_lsclusters # Ver Cluster Port Status Owner Data directory
sudo systemctl status postgresql@17-main
sudo -u postgres psql
در دبیان و اوبونتو پیکربندی در /etc/postgresql/17/main/ و داده در /var/lib/postgresql/17/main است. ابزارهای pg_ctlcluster و pg_createcluster اجازه میدهند چند نسخه کنار هم با پورتهای مختلف اجرا شوند.
داکر
docker run -d --name pg17 \
-e POSTGRES_PASSWORD='S3cret!' \
-e POSTGRES_INITDB_ARGS='--locale-provider=icu --icu-locale=fa-IR' \
-e TZ=Asia/Tehran \
-p 127.0.0.1:5432:5432 \
-v pgdata17:/var/lib/postgresql/data \
postgres:17
docker exec -it pg17 psql -U postgres
volume نامدار اجباری است؛ بدون آن با حذف کانتینر همهی داده از بین میرود. متغیرهای POSTGRES_* فقط بار اول (وقتی پوشهی داده خالی است) اثر دارند. اگر Docker Hub در دسترس نیست، image را از میرورهای داخلی (مثلاً میرور آروان) بکشید و در daemon.json بهعنوان registry-mirrors معرفی کنید.
نکتههایی که کمتر کسی میداند
- در image رسمی نسخهی 18 مسیر پیشفرض داده به
/var/lib/postgresql/18/dockerتغییر کرده و volume باید روی/var/lib/postgresqlسوار شود؛ کپی کردن دستور docker run نسخهی 17 برای 18 داده را بیرون volume مینویسد. -p 127.0.0.1:5432:5432پورت را فقط روی localhost باز میکند. با-p 5432:5432داکر قوانین iptables را دور میزند و دیتابیس شما حتی با وجود ufw روی اینترنت باز است.- پوشهی
/docker-entrypoint-initdb.d/در image رسمی فایلهای .sql و .sh را فقط در اولین راهاندازی اجرا میکند؛ برای ساخت خودکار دیتابیس و کاربر برنامه عالی است. - روی ویندوز، سرویس با حساب NETWORK SERVICE اجرا میشود؛ اگر پوشهی داده را جابهجا کردید، مجوز آن حساب را روی پوشهی جدید بدهید وگرنه سرویس بیصدا بالا نمیآید.
- نصب همزمان postgresql از مخزن اوبونتو و PGDG دو کلاستر روی پورتهای 5432 و 5433 میسازد؛ اگر وصل میشوید ولی جدولهایتان را نمیبینید، اول
pg_lsclustersرا نگاه کنید.