
دیتابیس PostgreSQL یکی از قدرتمندترین و پرکاربردترین سیستمهای مدیریت پایگاه داده رابطهای متنباز است. با اضافه شدن افزونه pgvector، قابلیتهای آن برای کار با بردارهای عددی (Vector Embeddings) و جستجوی شباهت معنایی نیز گسترش یافته است، که آن را به ابزاری بینظیر برای کاربردهای هوش مصنوعی و یادگیری ماشین تبدیل میکند.
در این راهنما، به طور کامل مراحل نصب و پیکربندی PostgreSQL و افزونه pgvector را در سیستم عامل اوبونتو ۲۴.۰۴ (Noble Numbat) شرح میدهیم.
پیشنیازها
- یک سیستم عامل اوبونتو ۲۴.۰۴ (یک ماشین مجازی، VPS یا کامپیوتر شخصی).
- دسترسی به ترمینال (Terminal) و دسترسی root.
- اتصال به اینترنت.
مرحله ۱: بهروزرسانی سیستم
همیشه قبل از نصب پکیجهای جدید، بهتر است لیست پکیجها و پکیجهای موجود را بهروزرسانی کنید تا از نصب آخرین نسخهها و رفع وابستگیها اطمینان حاصل کنید:
#apt update
#apt upgrade -y
مرحله ۲: نصب PostgreSQL
#apt install postgresql postgresql-contrib
#systemctl start postgresql.service
#systemctl status postgresql
مرحله ۳: پیکربندی کاربران و دسترسی به PostgreSQL
به طور پیشفرض، PostgreSQL یک کاربر به نام postgres ایجاد میکند که دارای نقش (role) مدیر پایگاه داده است. این کاربر با کاربر سیستمی postgres مرتبط است.
وارد شدن به پوسته PostgreSQL به عنوان کاربر postgres سیستم:
#sudo -i -u postgres
این دستور شما را به کاربر postgres تغییر میدهد و میتوانید مستقیماً با پایگاه داده تعامل کنید. ورود به کنسول psql:
$psql
اکنون در محیط خط فرمان PostgreSQL (کنسول psql) هستید. ایجاد یک کاربر جدید برای پایگاه داده (اختیاری اما توصیه شده):
توصیه میشود به جای استفاده از کاربر postgres، یک کاربر اختصاصی برای برنامههای خود ایجاد کنید.
CREATE USER your_username WITH PASSWORD ‘your_secure_password’;
نکته: your_username و your_secure_password را با نام کاربری و رمز عبور قوی خود جایگزین کنید.
ایجاد یک پایگاه داده جدید:
میتوانید یک پایگاه داده جدید ایجاد کنید و مالکیت آن را به کاربر جدید خود اختصاص دهید:
CREATE DATABASE your_database_name OWNER your_username;
نکته: your_database_name را با نام مورد نظر برای پایگاه داده خود جایگزین کنید.
اعطای تمام امتیازات به کاربر در پایگاه داده جدید (اختیاری):
GRANT ALL PRIVILEGES ON DATABASE your_database_name TO your_username;
خروج از کنسول psql و کاربر postgres:
\q
exit
با \q از psql و با exit از کاربر postgres خارج میشوید و به کاربر عادی خود باز میگردید.
مرحله ۴: نصب افزونه pgvector
برای استفاده از قابلیتهای برداری، باید افزونه pgvector را نصب کنید. نصب پکیج توسعه PostgreSQL و ابزار pg_config:
برای کامپایل افزونهها (در صورتی که pgvector به صورت پکیج آماده در مخازن نباشد، یا اگر بخواهید از سورس نصب کنید)، به پکیجهای توسعه PostgreSQL نیاز دارید:
#apt install postgresql-server-dev-16 -y
postgresql-server-dev-16 شامل فایلهای هدر و ابزارهایی مانند pg_config است که برای ساخت افزونهها ضروری هستند.
نصب pgvector:
خوشبختانه، pgvector اکنون در مخازن رسمی اوبونتو ۲۴.۰۴ موجود است، که نصب آن را بسیار ساده میکند:
#apt install postgresql-16-pgvector -y
این دستور پکیج pgvector را برای PostgreSQL نسخه ۱۶ نصب میکند. اگر از نسخه دیگری از PostgreSQL استفاده میکنید، عدد ۱۶ را با نسخه مربوطه جایگزین کنید (مثلاً postgresql-15-pgvector).
مرحله ۵: فعالسازی pgvector در پایگاه داده
پس از نصب پکیج pgvector، باید آن را در پایگاه داده خاصی که میخواهید از آن استفاده کنید، فعال کنید. وارد شدن به کنسول psql به عنوان کاربر جدیدتان:
psql -U your_username -d your_database_name
از شما رمز عبوری که برای your_username تنظیم کردهاید، درخواست میشود.
فعالسازی افزونه pgvector:
در داخل کنسول psql، دستور زیر را اجرا کنید:
CREATE EXTENSION vector;
اگر با موفقیت انجام شود، پیامی مانند CREATE EXTENSION دریافت خواهید کرد.
مرحله ۶: تست pgvector
حالا که PostgreSQL و pgvector نصب و پیکربندی شدهاند، بیایید با چند کوئری ساده آن را تست کنیم.
ایجاد یک جدول برای ذخیره بردارها:
یک جدول نمونه برای نگهداری متن و بردارهای مرتبط با آن ایجاد کنید. در اینجا، یک فیلد embedding از نوع VECTOR(3) ایجاد میکنیم، به این معنی که این بردارها دارای ۳ بعد هستند (میتوانید ابعاد را بر اساس مدل Embedding خود تغییر دهید).
CREATE TABLE items (
id serial PRIMARY KEY,
name text,
embedding vector(3)
);
وارد کردن چند داده نمونه:
چند بردار نمونه را به جدول وارد کنید:
INSERT INTO items (name, embedding) VALUES
(‘apple’, ‘[1,2,3]’),
(‘banana’, ‘[4,5,6]’),
(‘orange’, ‘[1.5,2.5,3.5]’),
(‘grape’, ‘[7,8,9]’);
انجام جستجوی شباهت برداری:
حالا میتوانید یک کوئری برای یافتن نزدیکترین بردارها به یک بردار مشخص اجرا کنید. از عملگر L2 distance (<->) برای یافتن نزدیکترین بردارها استفاده میکنیم (کوچکترین مقدار فاصله به معنی بیشترین شباهت است).
SELECT name, embedding, embedding <-> ‘[1,2,3.5]’ AS distance
FROM items
ORDER BY distance
LIMIT 3;
توضیح کوئری:
embedding <-> ‘[1,2,3.5]’: فاصله L2 (اقلیدسی) بین بردار ذخیره شده در فیلد embedding و بردار کوئری [۱,۲,۳.۵] را محاسبه میکند.
ORDER BY distance: نتایج را بر اساس فاصله (از کم به زیاد) مرتب میکند، به طوری که نزدیکترین (مشابهترین) بردارها ابتدا ظاهر شوند.
LIMIT 3: فقط ۳ نتیجه برتر را نمایش میدهد.
خروجی شما باید چیزی شبیه به این باشد:
name | embedding | distance
——–+————-+——————-
apple | [1,2,3] | 0.5000000000000000
orange | [1.5,2.5,3.5]| 0.7071067811865476
banana | [4,5,6] | 5.196152422706632
(۳ rows)
این خروجی نشان میدهد که apple و orange نزدیکترین بردارها به بردار [۱,۲,۳.۵] هستند، که نشاندهنده عملکرد صحیح pgvector است.
مرحله ۷: اضافه کردن ایندکس برای بهبود عملکرد
برای مجموعههای داده بزرگ، جستجوی خطی بردارها میتواند بسیار کند باشد. pgvector از ایندکسهای تخصصی برای تسریع جستجوی نزدیکترین همسایگان تقریبی (Approximate Nearest Neighbor – ANN) پشتیبانی میکند. IVFFlat یکی از رایجترین ایندکسهاست.
ایجاد ایندکس IVFFlat:
این دستور یک ایندکس IVFFlat را بر روی ستون embedding ایجاد میکند. پارامتر lists (در اینجا ۱۰) تعداد خوشههایی را که دادههای شما به آنها تقسیم میشوند، تعیین میکند. انتخاب صحیح این مقدار به اندازه مجموعه داده شما بستگی دارد؛ به عنوان یک قاعده سرانگشتی، میتوانید آن را به عنوان num_rows / 1000 یا sqrt(num_rows) در نظر بگیرید، اما نیاز به تست دارد.
CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 10);
ivfflat: نوع ایندکس.
embedding vector_l2_ops: مشخص میکند که ایندکس بر روی ستون embedding و با استفاده از عملگر فاصله L2 ساخته شود. (برای Cosine Distance از vector_cosine_ops و برای Inner Product از vector_ip_ops استفاده کنید.)
WITH (lists = 10): پارامتر خاص ایندکس IVFFlat.
تست کوئری با ایندکس:
حالا میتوانید دوباره کوئری جستجو را اجرا کنید. با وجود دادههای کم در این مثال، تفاوت عملکرد شاید محسوس نباشد، اما برای میلیونها بردار، ایندکسگذاری حیاتی است.
SELECT name, embedding <-> ‘[1,2,3.5]’ AS distance
FROM items
ORDER BY distance
LIMIT 3;
خروج از psql:
\q
جمعبندی
تبریک میگوییم! شما با موفقیت PostgreSQL و افزونه pgvector را در اوبونتو ۲۴.۰۴ نصب و پیکربندی کردهاید. اکنون میتوانید از PostgreSQL به عنوان یک پایگاه داده برداری قدرتمند برای ساخت برنامههای هوش مصنوعی و یادگیری ماشین خود استفاده کنید و از قابلیتهای پیشرفته آن برای ذخیره و جستجوی شباهت معنایی بهرهمند شوید.
به یاد داشته باشید که برای کاربردهای عملی، به یک مدل Embedding نیاز دارید (مانند OpenAI Embeddings، Sentence Transformers یا سایر مدلهای LLM) تا دادههای متنی، تصویری یا سایر دادههای خود را به بردارهای عددی تبدیل کنید و سپس آنها را در PostgreSQL ذخیره و جستجو کنید.




