كيفية تجميع وحدات PostgreSQL في ServBay
عند تطوير PostgreSQL ضمن بيئة ServBay المحلية لتطوير الويب، قد تحتاج إلى تجميع وتثبيت وحدات (امتدادات) إضافية لـ PostgreSQL لتعزيز أو توسيع وظائف قاعدة البيانات. توفر هذه الوحدات أنواع بيانات جديدة، دوال، معاملات، طرق وصول للفهرسة والمزيد.
يشرح هذا المقال بالتفصيل كيفية تجميع وتثبيت وحدات PostgreSQL في بيئة ServBay، مع تقديم مثال عملي من خلال تجميع أكثر الوحدات شيوعاً مثل postgis
(دعم نظم المعلومات الجغرافية GIS) و pg_jieba
(تقطيع النصوص الصينية).
لمحة عامة
توفر ServBay بيئة مرنة وغنية بالوظائف، مما يسمح للمطورين بإجراء أعمال تطوير إضافية أو تجميع مكونات أخرى مبنية على برامجها المدمجة. عادة ما تتضمن عملية تجميع وحدات PostgreSQL تحميل كود المصدر، ضبط خيارات التجميع، واستخدام أدوات بناء محددة مثل make
أو cmake
للتجميع والتثبيت، ثم تفعيل الوحدة داخل قاعدة PostgreSQL.
يكمن سر النجاح في تهيئة بيئة التجميع بشكل صحيح بحيث تستطيع الوصول إلى ملفات الترويسة (headers) للمكتبات والاعتمادات المطلوبة لإصدار PostgreSQL المحدد داخل ServBay.
المتطلبات الأساسية
قبل تجميع أي وحدة PostgreSQL، يجب تهيئة بيئة التجميع حسب متطلبات ServBay. هذه الخطوة ضرورية لأنها تضبط سلسلة أدوات البناء (المُجمّع، المقرن وما إلى ذلك)، متغيرات البيئة مثل $PATH
, $CFLAGS
, $LDFLAGS
، ومسارات ضبط البناء الخاصة بـ ServBay.
للحصول على تفاصيل وخطوات تهيئة البيئة، راجع قسم إجراء التجميع الثانوي مع ServBay في الوثائق الرسمية لـ ServBay. تأكد من إكمال جميع التحضيرات المشروحة عادة عن طريق تنفيذ سكريبتة تهيئة البيئة في طرفية (terminal) ServBay.
أهمية تحديد إصدار PostgreSQL
تسمح ServBay بتثبيت وتشغيل عدة إصدارات من PostgreSQL. بما أن تجميع وتشغيل الوحدات مرتبط تماماً بإصدار قاعدة البيانات المستهدف (مثل ترويسات المكتبة ومساراتها وواجهاتها البرمجية API)، يجب دائماً تحديد إصدار PostgreSQL المطلوب والوصول إلى مساره عند استخدام أدوات البناء.
اختيار المسار الصحيح يضمن أن عملية التجميع ستجد كل الاعتمادات الضرورية وسيتم بناء ملفات الوحدة بشكل متوافق تماماً مع إصدار PostgreSQL الهدف، مما يقلل من أخطاء التجميع أو المشكلات الناتجة عند التحميل والتشغيل.
سنستخدم على سبيل المثال إصدار PostgreSQL 15
المثبّت في ServBay (مثل 15.7
). عدّل المسارات حسب إصدارك الفعلي.
تسهل ServBay عملية العثور على المسارات الصحيحة عبر متغيرات البيئة وأداة pg_config
. يوجد أداه مهمة كثيرًا وهي ${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/bin/pg_config
، والتي تعرض معلومات المسارات، إعدادات التجميع، مواقع المكتبات والترويسات. عند تجميع وحدات خارجية، يعتبر pg_config
حجر الأساس لتحديد الاعتمادات.
تجميع وحدة postgis
وحدة postgis
من أشهر وأقوى الامتدادات لـ PostgreSQL، إذ تضيف دعماً حقيقياً للتعامل مع بيانات نظم المعلومات الجغرافية (GIS) داخل قاعدة البيانات. الخطوات التالية توضح تجميع إصدار postgis-3.4.2
:
الخطوة 1: تحميل الكود المصدري
أولاً، قم بتحميل مصدر وحدة postgis-3.4.2
من الموقع الرسمي لمشروع PostGIS. تأكد من تحميل نسخة الكود المصدر، غالباً بامتداد .tar.gz
أو .zip
.
wget https://download.osgeo.org/postgis/source/postgis-3.4.2.tar.gz
wget
أداة شهيرة لتنزيل الملفات من الروابط المباشرة.
الخطوة 2: فك ضغط المصدر
بعد التحميل، قم بفك ضغط الحزمة المصدريّة وانقل الطرفية إلى مجلد الكود الناتج.
tar zxvf postgis-3.4.2.tar.gz
cd postgis-3.4.2
2
أمر tar zxvf
يفك ضغط ملفات .tar.gz
، وأمر cd
ينقلك إلى مجلد المصدر الرئيس.
الخطوة 3: ضبط خيارات التجميع
يستخدم PostGIS نظام البناء GNU Autotools. خلال التهيئة (configure)، سيتم فحص الاعتمادات وتحديد خصائص البناء وإنشاء ملف Makefile
. هنا يجب تحديد مسار التثبيت الصحيح داخل ServBay لإصدار PostgreSQL المستهدف، وكذلك باقي المكتبات الضرورية.
./configure \
--prefix=${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7 \
--bindir=${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/bin \
--datarootdir=${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/share \
--with-protobufdir=${SERVBAY_BIN_PATH} \
--disable-nls \
--without-raster \
--without-topology \
--with-pgconfig=${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/bin/pg_config \
CFLAGS="${CFLAGS} -I${SERVBAY_COMMON_INCLUDE_PATH}/libxml2 -I${SERVBAY_COMMON_INCLUDE_PATH}" \
CXXFLAGS="${CXXFLAGS} -std=c++17 -I${SERVBAY_COMMON_INCLUDE_PATH}/libxml2 -I${SERVBAY_COMMON_INCLUDE_PATH}" \
LDFLAGS="${LDFLAGS} -L${SERVBAY_COMMON_LIB_PATH} -lxml2 -lz -lpthread -liconv -licui18n -licuuc -licudata -lm"
2
3
4
5
6
7
8
9
10
11
12
./configure
: تشغيل سكريبت التهيئة.--prefix
,--bindir
,--datarootdir
: تعيين مسارات التثبيت الداخلي في ServBay لإصدار PostgreSQL المطلوب.${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7
هو المسار الرئيسي وعادة يجري ضبطه تلقائياً أثناء تهيئة البيئة.--with-protobufdir
: تحديد مسار مكتبة Protobuf، وهي من أعمدة الاعتمادات في PostGIS أحياناً.--disable-nls
: تعطيل دعم اللغات الوطنية، غالباً غير ضروري ببيئة التطوير.--without-raster
,--without-topology
: تعطيل دعم عناصر إضافية لتقليل الاعتماديات (يمكن تفعيلها حسب الحاجة).--with-pgconfig
: أهم خيار، تحديد المسار الدقيق لأداةpg_config
الخاصة بالإصدار المستهدف. تمرر هذه الأداة أعلام التجميع والمسارات اللازمة لـ PostGIS.CFLAGS
,CXXFLAGS
,LDFLAGS
: متغيرات قياسية لتمرير أعلام التجميع والربط. القيم${CFLAGS}
،${LDFLAGS}
... تحفظ الإعداد الافتراضي من سكريبت التهيئة.-I${SERVBAY_COMMON_INCLUDE_PATH}/libxml2 ...
: إضافة مسارات الترويسات الخاصة بالمكتبات العامة في ServBay.-L${SERVBAY_COMMON_LIB_PATH} -lxml2 ...
: إضافة رابط المكتبات والاعتمادات المطلوبة مثل libxml2, zlib, pthread وغيرها.-std=c++17
: تحديد معيار C++17 الضروري لبعض المشاريع.
الخطوة 4: التجميع والتثبيت
بعد التهيئة الناجحة، استخدم make
لتجميع الكود ثم make install
لنقل ملفات الوحدة إلى مسارات إصدار PostgreSQL المختار.
make -j ${CPU_NUMBER}
make install
2
make -j ${CPU_NUMBER}
: بدء عملية التجميع باستغلال عدة أنوية لتحسين السرعة (${CPU_NUMBER}
تحدد تلقائياً عدد الأنوية).make install
: نسخ الملفات المجمّعة إلى المسارات المناسبة (عادةlib/postgresql
,share/postgresql/extension
ضمن تثبيت PostgreSQL لـ ServBay).
الخطوة 5: التحقق من تحميل الوحدة
بعد الانتهاء، يجب تفعيل امتداد postgis
من الداخل قاعدة البيانات. يمكنك استخدام أداة psql من ServBay:
# تنفيذ أمر CREATE EXTENSION لتفعيل PostGIS
${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/bin/psql -c "CREATE EXTENSION postgis;"
2
عند التنفيذ الناجح؛ تم إنشاء امتداد PostGIS!. للتحقق من الإصدار:
# استعلام إصدار PostGIS
${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/bin/psql -c "SELECT PostGIS_Version();"
2
إذا ظهر رقم الإصدار فهذا يعني نجاح كل مراحل التجميع والتثبيت والتحميل.
تجميع وحدة pg_jieba
pg_jieba
هو امتداد PostgreSQL مبني على مكتبة C++ cppjieba
ويستخدم لتقطيع النصوص الصينية، مثالي للبحث الكامل عن النصوص وما شابه. يعتمد البناء هنا على CMake. الخطوات كما يلي:
الخطوة 1: الحصول على الكود المصدري
أولًا، استنسخ مستودع pg_jieba من GitHub وشغّل تهيئة للتبعيات الفرعية (Submodules).
git clone https://github.com/jaiminpan/pg_jieba.git
cd pg_jieba
git submodule update --init --recursive
2
3
git clone ...
: استنساخ الريبو.git submodule update --init --recursive
: التأكد من تحميل submodules مثل cppjieba.
الخطوة 2: تهيئة خيارات التجميع (CMake)
يعتمد pg_jieba
على نظام البناء CMake. كـ Autotools، يحتاج إلى معرفة مسار تثبيت PostgreSQL وبعض متغيرات البيئة الخاصة بـ ServBay وmacOS.
cmake -S . -B builddir \
-DCMAKE_PREFIX_PATH=${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7 \
-DCMAKE_OSX_DEPLOYMENT_TARGET=${BUILD_OS_MIN_VERSION} \
-DCMAKE_OSX_ARCHITECTURES=${BUILD_CPU_ARCH_CMAKE}
2
3
4
cmake -S . -B builddir
: توليد ملفات البناء داخل مجلد منفصل معنْون بـbuilddir
.-DCMAKE_PREFIX_PATH
: خيار محوري، يُعرِّف مكان البحث عن الاعتمادات الخاصة بـ PostgreSQL.-DCMAKE_OSX_DEPLOYMENT_TARGET
: تعيين الحد الأدنى لإصدار macOS المطلوب للتوافق.-DCMAKE_OSX_ARCHITECTURES
: تحديد هيكلية المعالج المستهدفة (x86_64 أو arm64...) حسب جهازك.
الخطوة 3: التجميع والتثبيت (CMake)
عند اكتمال التهيئة، استخدم أوامر CMake التالية:
cmake --build builddir -j ${CPU_NUMBER}
cmake --install builddir
2
cmake --build builddir
: تجميع الوحدة.-j ${CPU_NUMBER}
: تشغيل التجميع المتوازي.cmake --install builddir
: نقل الملفات الناتجة إلى المسار الصحيح داخل PostgreSQL.
الخطوة 4: التحقق من تحميل الوحدة
لتفعيل امتداد pg_jieba
:
# تنفيذ CREATE EXTENSION لتفعيل pg_jieba
${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/bin/psql -c "CREATE EXTENSION pg_jieba;"
2
للتحقق من وجود الوحدة ضمن الامتدادات المثبتة:
# استعلام قائمة الامتدادات المتاحة
${SERVBAY_PACKAGE_FULL_PATH}/postgresql/15/15.7/bin/psql -c "SELECT * FROM pg_available_extensions WHERE name = 'pg_jieba';"
2
إذا ظهرت في النتائج: تمت العملية بنجاح.
الأسئلة الشائعة (FAQ)
- فشل في التجميع بسبب فقدان ترويسة/مكتبة؟
- تحقق من أنك هيأت بيئة البناء لـ ServBay بشكل صحيح. يجب تشغيل سكريبت تهيئة البيئة الخاص بـ ServBay، والتأكد من الإعدادات مثل
$CFLAGS
,$LDFLAGS
,${SERVBAY_COMMON_INCLUDE_PATH}
... - تأكد من تحديد مسار إعداد PostgreSQL (
--with-pgconfig
أو-DCMAKE_PREFIX_PATH
) بشكل صحيح، وأن ملفpg_config
موجود وقابل للتنفيذ. - بعض الوحدات تتطلب مكتبات أخرى غير الافتراضية في ServBay (مثلا: دعم Raster/Topology في PostGIS يحتاج إلى GEOS, GDAL...). ثبّت هذه الاعتمادات أو عطّل ميزاتها عند الضرورة.
- تحقق من أنك هيأت بيئة البناء لـ ServBay بشكل صحيح. يجب تشغيل سكريبت تهيئة البيئة الخاص بـ ServBay، والتأكد من الإعدادات مثل
- فشل
CREATE EXTENSION
ولا يعثر على ملف الوحدة؟- تحقق من نجاح تنفيذ
make install
أوcmake --install
، وتفقد سجل التثبيت لتتأكد من نسخ كل الملفات للمكان الصحيح. - تحقق من أن خيارات التثبيت (
--prefix
،-DCMAKE_PREFIX_PATH
) تشير الى مسار إصدار PostgreSQL المستهدف بدقة، حيث يجب نسخ ملفات الوحدات الفرعية في مجلداته (lib/postgresql
). - جرّب إعادة تشغيل خدمة PostgreSQL عبر app ServBay.
- احرص على ضبط إعداد
shared_preload_libraries
إذا تطلبت بعض الوحدات ذلك (نادرًا ما يحتاج الامتداد العادي هذا الضبط).
- تحقق من نجاح تنفيذ
- كيف أجمع وحدة لإصدار PostgreSQL مختلف؟
- كرر الخطوات أعلاه وغيّر مسارات نسخة PostgreSQL المستهدفة عند الضبط بواسطة
./configure
أوcmake
إلى المسار الصحيح (مثل PostgreSQL 14، غير المسار إلى${SERVBAY_PACKAGE_FULL_PATH}/postgresql/14/14.x/...
).
- كرر الخطوات أعلاه وغيّر مسارات نسخة PostgreSQL المستهدفة عند الضبط بواسطة
الخلاصة
باتباع الخطوات السابقة والاستفادة القصوى من أدوات وبيئة البناء التي توفرها ServBay، يمكنك تجميع وتثبيت أي وحدة PostgreSQL ضمن بيئة تطويرك بكل سهولة، وتوسيع قدرات قاعدة بياناتك حسب احتياجك.
النصائح الجوهرية: جهّز بيئة التهيئة الصحيحة، حدد إصدار PostgreSQL المستهدف بدقة، وراجِع خيارات الضبط والمسارات قبل التجميع النهائي لضمان النجاح.
نتمنى أن يساعدك هذا الدليل في تخصيص بيئة PostgreSQL ضمن ServBay بنجاح. في حال واجهتك أي مشاكل إضافية يمكنك العودة إلى مستندات أو مجتمع ServBay لمزيد من المعلومات.