Let's Go Further راه‌اندازی و پیکربندی database › راه‌اندازی PostgreSQL
قبلی · فهرست مطالب · بعدی
فصل ۵.۱.

راه‌اندازی PostgreSQL

نصب PostgreSQL

اگر همراه کتاب جلو می‌روید، در این نقطه باید PostgreSQL را روی کامپیوتر خود نصب کنید. مستندات رسمی PostgreSQL شامل دستورالعمل‌های کامل دانلود و نصب برای همه نوع operating system است، اما اگر از macOS استفاده می‌کنید باید بتوانید آخرین نسخه را با این command نصب کنید:

$ brew install postgresql@15 

یا اگر از یک Linux distribution استفاده می‌کنید، باید بتوانید PostgreSQL را از طریق package manager خود نصب کنید. برای مثال، اگر OS شما از package manager مربوط به apt پشتیبانی می‌کند، مثل Debian و Ubuntu، می‌توانید با این command نصبش کنید:

$ sudo apt install postgresql

روی ماشین‌های Windows می‌توانید PostgreSQL را با استفاده از Chocolatey package manager و این command نصب کنید:

> choco install postgresql

اتصال به terminal تعاملی PostgreSQL

وقتی PostgreSQL نصب می‌شود، باید یک binary به نام psql هم روی کامپیوتر شما ایجاد شده باشد. این binary یک front-end مبتنی بر terminal برای کار با PostgreSQL فراهم می‌کند.

می‌توانید با اجرای command مربوط به psql --version از terminal، در دسترس بودن آن را بررسی کنید:

$ psql --version
psql (PostgreSQL) 15.4 (Ubuntu 15.4-1.pgdg22.04+1

اگر از قبل با PostgreSQL آشنا نیستید، فرایند اتصال به آن برای اولین بار با استفاده از psql ممکن است کمی غیرشهودی باشد. پس بیایید لحظه‌ای وقت بگذاریم و آن را مرور کنیم.

وقتی PostgreSQL تازه نصب می‌شود، فقط یک user account دارد: یک superuser به نام postgres. در قدم اول، برای انجام هر کاری باید به عنوان همین superuser به PostgreSQL وصل شویم؛ و از آنجا می‌توانیم هر setup stepای را که لازم داریم انجام دهیم، مثل ساخت database و ایجاد userهای دیگر.

در زمان نصب، باید یک user در operating system به نام postgres هم روی ماشین شما ایجاد شده باشد. در سیستم‌های مبتنی بر Unix می‌توانید فایل /etc/passwd را برای تایید این موضوع بررسی کنید، به این شکل:

$ cat /etc/passwd | grep 'postgres'
postgres:x:127:134:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

این مهم است چون PostgreSQL به صورت پیش‌فرض برای هر connection از ماشین local، از یک authentication scheme به نام peer authentication استفاده می‌کند. peer authentication یعنی اگر username کاربر فعلی operating system با username یک user معتبر PostgreSQL match باشد، آن کاربر می‌تواند بدون authentication بیشتر به عنوان همان user وارد PostgreSQL شود. هیچ passwordای در کار نیست.

پس نتیجه می‌گیریم که اگر به user مربوط به operating system با نام postgres switch کنیم، باید بتوانیم بدون نیاز به authentication بیشتر با استفاده از psql به PostgreSQL وصل شویم. در واقع می‌توانید هر دو کار را در یک مرحله با command زیر انجام دهید:

$ sudo -u postgres psql
psql (15.4 (Ubuntu 15.4-1.pgdg22.04+1))
Type "help" for help.

postgres=#

پس برای تایید، کاری که اینجا انجام دادیم استفاده از command مربوط به sudo یا superuser do بود تا command مربوط به psql را به عنوان operating system user به نام postgres اجرا کنیم. این کار یک session در front-end تعاملی مبتنی بر terminal باز می‌کند، جایی که ما به عنوان superuser مربوط به PostgreSQL یعنی postgres authenticated شده‌ایم.

اگر بخواهید، می‌توانید با اجرای query مربوط به "SELECT current_user" تایید کنید که در حال حاضر کدام user PostgreSQL هستید:

postgres=# SELECT current_user;
 current_user 
--------------
 postgres
(1 row)

ساخت databaseها، userها و extensionها

حالا که به عنوان superuser مربوط به postgres وصل هستیم، یک database جدید برای پروژه با نام greenlight می‌سازیم و بعد با استفاده از command مربوط به \c به آن وصل می‌شویم:

postgres=# CREATE DATABASE greenlight;
CREATE DATABASE
postgres=# \c greenlight
You are now connected to database "greenlight" as user "postgres".
greenlight=#

حالا که database مربوط به greenlight وجود دارد و به آن وصل هستیم، چند کار هست که باید انجام دهیم.

اولین کار ساخت یک user جدید به نام greenlight بدون permissionهای superuser است؛ userای که بتوانیم برای اجرای SQL migrationها و اتصال به database از application Go خودمان استفاده کنیم. می‌خواهیم این user جدید را طوری setup کنیم که به جای peer authentication از authentication مبتنی بر password استفاده کند.

PostgreSQL همچنین مفهومی به نام extension دارد که featureهای اضافه‌ای روی functionality استاندارد اضافه می‌کند. فهرست extensionهایی که همراه PostgreSQL ارائه می‌شوند اینجا قابل مشاهده است، و چند مورد دیگر هم وجود دارد که می‌توانید جداگانه دانلود کنید.

در این پروژه قرار است از extension مربوط به citext استفاده کنیم. این extension یک character string type غیر حساس به بزرگی و کوچکی حروف به PostgreSQL اضافه می‌کند که بعدا در کتاب برای ذخیره email addressهای userها از آن استفاده می‌کنیم.

commandهای زیر را اجرا کنید تا یک user جدید greenlight با password مشخص بسازید و extension مربوط به citext را به database اضافه کنید:

greenlight=# CREATE ROLE greenlight WITH LOGIN PASSWORD 'pa55word';
CREATE ROLE
greenlight=# CREATE EXTENSION IF NOT EXISTS citext;
CREATE EXTENSION

وقتی این کار با موفقیت انجام شد، می‌توانید exit یا \q را تایپ کنید تا front-end مبتنی بر terminal بسته شود و به user عادی operating system خودتان برگردید.

greenlight=# exit

اتصال به عنوان user جدید

قبل از اینکه جلوتر برویم، بیایید مطمئن شویم همه چیز درست setup شده و تلاش کنیم به عنوان user مربوط به greenlight به database مربوط به greenlight وصل شویم. وقتی prompt نمایش داده شد، passwordای را که در step بالا تنظیم کردید وارد کنید.

$ psql --host=localhost --dbname=greenlight --username=greenlight
Password for user greenlight: 
psql (15.4 (Ubuntu 15.4-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

greenlight=> SELECT current_user;
 current_user 
--------------
 greenlight
(1 row)

greenlight=> exit

عالی! این تایید می‌کند که database ما و user جدید greenlight با credentials مبتنی بر password درست کار می‌کنند، و می‌توانیم بدون مشکل به عنوان آن user، SQL statementها را اجرا کنیم.


اطلاعات تکمیلی

بهینه‌سازی settingهای PostgreSQL

settingهای پیش‌فرضی که همراه PostgreSQL ارائه می‌شوند نسبتا محافظه‌کارانه هستند، و معمولا می‌توانید با تنظیم مقدارها در فایل postgresql.conf، performance database خود را بهتر کنید.

می‌توانید با SQL query زیر بررسی کنید فایل postgresql.conf شما کجا قرار دارد:

$ sudo -u postgres psql -c 'SHOW config_file;'
               config_file               
-----------------------------------------
 /etc/postgresql/15/main/postgresql.conf
(1 row)

این مقاله معرفی خوبی از بعضی از مهم‌ترین settingهای PostgreSQL ارائه می‌دهد و راهنمایی می‌کند که چه مقدارهایی برای شروع منطقی هستند. اگر به بهینه‌سازی PostgreSQL علاقه دارید، پیشنهاد می‌کنم آن را بخوانید.

در روش جایگزین، می‌توانید از این ابزار web-based استفاده کنید تا بر اساس سخت‌افزار در دسترس سیستم شما، مقدارهای پیشنهادی تولید کند. یک feature خوب این ابزار این است که SQL statementهای ALTER SYSTEM را هم خروجی می‌دهد؛ statementهایی که می‌توانید روی database اجرا کنید تا به جای تغییر دستی فایل postgresql.conf، settingها را تغییر دهید.