انتقل إلى المحتوى الرئيسي

الفصل 1: PostgreSQL - التثبيت والتكوين

مقدمة​

PostgreSQL هو نظام إدارة قواعد بيانات علائقية (SGBDR) مفتوح المصدر، قوي وموثوق، يُستخدم في الإنتاج في جميع أنحاء العالم من قبل شركات مثل Apple وSpotify وInstagram وReddit.

لماذا PostgreSQL؟

حتى الآن، استخدمنا H2، قاعدة بيانات مثالية للتطوير والاختبارات. ولكن لنشر تطبيق في الإنتاج، نحتاج إلى قاعدة بيانات قوية، عالية الأداء وقابلة للتوسع: PostgreSQL.


H2 مقابل PostgreSQL: فهم الفرق​

جدول مقارنة​

الجانبH2PostgreSQL
النوعفي الذاكرة/ملف محليخادم مخصص
الاستخدامتطوير/اختباراتإنتاج
الأداءمحدودأداء عالي
المستخدمون المتزامنونغير مناسبممتاز
الأدواتوحدة تحكم أساسيةpgAdmin, DBeaver, إلخ.
القابلية للتوسعضعيفممتاز
النسخ الاحتياطييدوي/معقدأصلي وآلي
الأمانأساسيمتقدم (أدوار، أذونات)

تشبيه​

H2 = دراجة 🚲

  • مثالي للتعلم والاختبار
  • سهل البدء
  • غير مناسب لنقل 100 شخص

PostgreSQL = حافلة 🚌

  • مصمم للنقل الجماعي
  • موثوق وقوي
  • يتطلب رخصة خاصة (تكوين)

تثبيت PostgreSQL​

Windows​

الخطوة 1: التحميل

توجه إلى: postgresql.org/download/windows

قم بتحميل PostgreSQL 14+ (أو إصدار أحدث).

الخطوة 2: التثبيت

  1. قم بتشغيل المثبت
  2. اتبع معالج التثبيت
  3. مهم: احفظ كلمة مرور المستخدم postgres (ستحتاجها!)
  4. المنفذ الافتراضي: 5432 (اتركه كما هو)
  5. قم بتثبيت Stack Builder (اختياري ولكن موصى به)

الخطوة 3: التحقق

افتح محطة واكتب:

psql --version

يجب أن ترى:

psql (PostgreSQL) 14.x

macOS​

عبر Homebrew:

brew install postgresql@14
brew services start postgresql@14

التحقق:

psql --version

Linux (Ubuntu/Debian)​

sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql

الخطوات الأولى مع PostgreSQL​

الاتصال بـ PostgreSQL​

Windows (عبر psql):

psql -U postgres

أدخل كلمة المرور التي قمت بتعيينها أثناء التثبيت.

macOS/Linux:

sudo -u postgres psql

أوامر SQL الأساسية​

1. سرد قواعد البيانات​

\l

سترى القواعد الافتراضية:

postgres
template0
template1

2. إنشاء قاعدة بيانات​

CREATE DATABASE greeting_db;

النتيجة:

CREATE DATABASE

3. الاتصال بقاعدة​

\c greeting_db

النتيجة:

You are now connected to database "greeting_db" as user "postgres".

4. سرد الجداول​

\dt

في البداية، لن يكون هناك أي جدول.


5. عرض هيكل جدول​

\d nom_table

6. الخروج من psql​

\q

تكوين Spring Boot لـ PostgreSQL​

الخطوة 1: إضافة تبعية Maven​

ملف: pom.xml

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>

ملاحظة: يشير <scope>runtime</scope> إلى أن هذه التبعية مطلوبة فقط أثناء التشغيل، وليس أثناء الترجمة.


الخطوة 2: إنشاء قاعدة البيانات​

قبل تكوين Spring Boot، قم بإنشاء قاعدة البيانات:

psql -U postgres
CREATE DATABASE greeting_db;
\q

الخطوة 3: تكوين application.yml​

ملف: src/main/resources/application.yml

spring:
datasource:
url: jdbc:postgresql://localhost:5432/greeting_db
username: postgres
password: votre_mot_de_passe
driver-class-name: org.postgresql.Driver

jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true

التفسيرات:

الخاصيةالمعنى
urlعنوان القاعدة (localhost:5432/nom_base)
usernameمستخدم PostgreSQL (افتراضي: postgres)
passwordكلمة المرور المعينة أثناء التثبيت
driver-class-nameبرنامج تشغيل JDBC لـ PostgreSQL
ddl-auto: updateيقوم Hibernate بتحديث المخطط تلقائيًا
show-sql: trueيعرض الاستعلامات SQL في وحدة التحكم
dialectلهجة SQL خاصة بـ PostgreSQL
format_sql: trueتنسيق الاستعلامات SQL للقراءة

اختبار الاتصال​

إنشاء كيان بسيط​

ملف: model/Product.java

package com.example.demo.model;

import jakarta.persistence.*;

@Entity
@Table(name = "products")
public class Product {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;
private Double price;

// Constructeurs
public Product() {}

public Product(String name, Double price) {
this.name = name;
this.price = price;
}

// Getters et Setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }

public String getName() { return name; }
public void setName(String name) { this.name = name; }

public Double getPrice() { return price; }
public void setPrice(Double price) { this.price = price; }
}

بدء التطبيق​

mvn clean install -DskipTests spring-boot:run

وحدة التحكم:

Hibernate: 
create table products (
id bigserial not null,
name varchar(255),
price float8,
primary key (id)
)

✅ يقوم PostgreSQL بإنشاء الجدول تلقائيًا!


التحقق في PostgreSQL​

psql -U postgres -d greeting_db
\dt

النتيجة:

         List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | products | table | postgres
\d products

النتيجة:

                                      Table "public.products"
Column | Type | Collation | Nullable | Default
--------+------------------------+-----------+----------+--------------------------------------
id | bigint | | not null | nextval('products_id_seq'::regclass)
name | character varying(255) | | |
price | double precision | | |

✅ الجدول موجود في PostgreSQL!


أدوات الإدارة​

pgAdmin​

التثبيت:

قم بالتحميل من: pgadmin.org

الاستخدام:

  1. افتح pgAdmin
  2. أنشئ اتصال خادم جديد
  3. الاسم: Local PostgreSQL
  4. المضيف: localhost
  5. المنفذ: 5432
  6. اسم المستخدم: postgres
  7. كلمة المرور: كلمة المرور الخاصة بك

الميزات:

  • واجهة رسومية بديهية
  • مستكشف قواعد البيانات
  • محرر SQL
  • تصور البيانات
  • إدارة المستخدمين والأذونات

DBeaver​

التثبيت:

قم بالتحميل من: dbeaver.io

المزايا:

  • مجاني ومفتوح المصدر
  • دعم لعدة قواعد بيانات (PostgreSQL, MySQL, Oracle, إلخ.)
  • واجهة حديثة
  • إكمال تلقائي لـ SQL
  • تصور البيانات

الأمان وأفضل الممارسات​

1. لا تقم أبدًا بتضمين كلمات المرور بشكل صريح​

❌ سيء:

spring:
datasource:
password: monMotDePasse123

✅ جيد:

spring:
datasource:
password: ${DB_PASSWORD}

متغير البيئة (Windows):

$env:DB_PASSWORD = "monMotDePasse123"
mvn spring-boot:run

متغير البيئة (Linux/macOS):

export DB_PASSWORD="monMotDePasse123"
mvn spring-boot:run

2. إنشاء مستخدم مخصص (إنتاج)​

لا تستخدم postgres في الإنتاج!

-- إنشاء مستخدم
CREATE USER myapp_user WITH PASSWORD 'secure_password';

-- إنشاء قاعدة
CREATE DATABASE myapp_db OWNER myapp_user;

-- منح الأذونات
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;

تكوين Spring Boot:

spring:
datasource:
url: jdbc:postgresql://localhost:5432/myapp_db
username: myapp_user
password: ${DB_PASSWORD}

3. تقييد الأذونات​

-- منح الأذونات الضرورية فقط
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO myapp_user;

ملخص​

ما تعلمته​

✅ تثبيت PostgreSQL على Windows/Mac/Linux
✅ إنشاء قواعد بيانات ومستخدمين
✅ تكوين Spring Boot لـ PostgreSQL
✅ استخدام pgAdmin وDBeaver
✅ تأمين الاتصالات باستخدام متغيرات البيئة
✅ فهم الفروق بين H2 وPostgreSQL


النقاط الرئيسية​

PostgreSQL = جاهز للإنتاج

  • قوي وموثوق
  • أداء عالي مع العديد من المستخدمين
  • أدوات إدارة احترافية
  • أمان متقدم

تكوين Spring Boot = بسيط

  • تبعية Maven واحدة
  • ملف application.yml واحد
  • Hibernate يدير المخطط تلقائيًا

الخطوة التالية​

الآن بعد أن تم تكوين PostgreSQL، دعونا ننتقل إلى الفصل 2 لفهم Jakarta مقابل Javax Persistence.

➡️ الفصل 2: Jakarta مقابل Javax

⬅️ العودة إلى الوحدة 4