فصل ۱: شروع — نصب، معماری و ابزارها

نصب روی ویندوز، اوبونتو (مخزن PGDG) و داکر

سه راه نصب و انتخاب درست

برای یادگیری و توسعه روی ویندوز، نصاب رسمی کافی است؛ برای سرور، لینوکس با مخزن رسمی 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 را نگاه کنید.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.