دیتابیس رابطه‌ای

PostgreSQL مدیریت‌شده با pgvector و PostGIS

یک PostgreSQL واقعی با نسخه‌ی دلخواه، کمتر از دو دقیقه بعد آماده است. اتصال مستقیم است، نه از طریق استخر اشتراکی؛ پس هر ORM و ابزار مهاجرتی بدون تنظیم خاص کار می‌کند.

نسخه‌ها
18 (پیش‌فرض)، 17، 16 و 15
افزونه‌ها
pgvector و postgis
در اپ
DATABASE_URL
پشتیبان
دستی و زمان‌بندی‌شده
لوگوی PostgreSQL

پستگرس، بدون نگهداری سرور

PostgreSQL انتخاب پیش‌فرض بیشتر اپ‌های امروزی است: تراکنش‌های ACID، JSONB برای داده‌ی نیمه‌ساختاریافته، ایندکس‌های متنوع و اکوسیستم بزرگ افزونه‌ها. در سکو کلود نسخه را انتخاب می‌کنید و نصب، به‌روزرسانی امنیتی، دیسک ماندگار و پشتیبان‌گیری با ماست.

با افزونه‌ی pgvector می‌توانید embedding ها را کنار داده‌ی اصلی ذخیره و جست‌وجوی شباهت انجام دهید، و با PostGIS داده‌ی جغرافیایی را مدیریت کنید. پارامترهایی مثل max_connections و shared_buffers از تب Tuning کنسول تنظیم می‌شوند.

مناسب برای

  • دیتابیس اصلی اپ وب و موبایل
  • جست‌وجوی برداری با pgvector
  • داده‌ی مکانی با PostGIS
  • گزارش‌گیری و داده‌ی تحلیلی سبک

از ساخت تا اتصال

  1. ساخت

    نسخه و فضای دیسک را انتخاب کنید؛ افزونه را می‌شود همان‌جا فعال کرد.

    --type postgres --version 18
  2. آماده‌سازی

    دیسک ماندگار، کاربر و رمز قوی ساخته و اتصال TLS فعال می‌شود.

    ~90s
  3. لینک به اپ

    متغیرهای اتصال به اپ تزریق و اپ دوباره مستقر می‌شود.

    apps link-db
  4. استفاده

    کد شما فقط DATABASE_URL را می‌خواند.

    DATABASE_URL

خروجی ساخت سرویس

sakoocloud db
sakoocloud db create --name main-db --type postgres --version 18
✔ Provisioning main-db · db_4n8x2p
ℹ Ready in ~90s. Get credentials: sakoocloud db credentials db_4n8x2p
sakoocloud apps link-db db_4n8x2p --app my-api
✔ Linked database. Env vars injected under DATABASE_*.
# DATABASE_URL=postgresql://app:••••@…:5432/main-db

ساخت دیتابیس

با CLI یا از کنسول بسازید. برای جست‌وجوی برداری، افزونه را هنگام ساخت فعال کنید.

terminal
sakoocloud db create --name main-db --type postgres --version 18 --storage 10
sakoocloud db create --name vectors --type postgres --extension pgvector

تنظیمات

متغیرهایی که به اپ تزریق می‌شوند

پیشوند پیش‌فرض DATABASE است؛ با --prefix می‌توانید نام دیگری بدهید، مثلاً DATABASE.

متغیرمقدار
DATABASE_URLpostgresql://user:pass@host:5432/db
DATABASE_HOST و DATABASE_PORTآدرس و پورت داخلی
DATABASE_USER و DATABASE_PASSWORDنام کاربری و رمز تولیدشده
DATABASE_NAMEنام دیتابیس

پشتیبان‌گیری

پشتیبان‌ها به‌صورت dump منطقی گرفته و جدا از دیسک دیتابیس، روی فضای ذخیره‌سازی سازگار با S3 نگهداری می‌شوند.

نوعدر دسترس
پشتیبان دستیهمه‌ی پلن‌ها، از جمله پلن رایگان
زمان‌بندی خودکارپلن‌های پولی
بازگردانیروی همان دیتابیس یا یک نمونه‌ی تازه (backups clone)

عملیات روزمره

کاردستور
اطلاعات اتصالsakoocloud db credentials <id>
اتصال مستقیم با کلاینت psqlsakoocloud db connect <id>
افزایش دیسک یا حافظهsakoocloud db resize <id> --storage 20
پشتیبان دستیsakoocloud db backups create <id>
ساخت نسخه‌ی staging از پشتیبانsakoocloud db backups clone <id> <backup-id>

اتصال از اپ

بعد از apps link-db، همین چند خط کافی است.

import pg from "pg";

const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
const { rows } = await pool.query("select now()");

رانتایم‌هایی که معمولاً به آن وصل می‌شوند

خطاهای رایج

از سیستم خودم وصل نمی‌شوم

علتآدرس داخلی فقط از اپ‌های همان پروژه در دسترس است.

راه‌حلبرای اتصال از بیرون، دسترسی عمومی را روشن کنید و آدرس و پورت خارجی را از sakoocloud db credentials بگیرید.

terminal
sakoocloud db public-access <db-id>
sakoocloud db credentials <db-id>

too many connections

علتتعداد اتصال‌های باز از max_connections بیشتر شده؛ معمولاً هر نمونه‌ی اپ استخر جدا باز می‌کند.

راه‌حلاندازه‌ی استخر اتصال در اپ را کم کنید یا max_connections را از تب Tuning بالا ببرید.

نوع داده‌ی vector پیدا نمی‌شود

علتدیتابیس بدون افزونه‌ی pgvector ساخته شده است.

راه‌حلدیتابیس را با --extension pgvector بسازید؛ افزونه از لحظه‌ی ساخت فعال است و نصب دستی لازم ندارد.

پرسش‌های متداول

کدام نسخه‌های PostgreSQL در دسترس است؟

نسخه‌های 15، 16، 17 و 18. پیش‌فرض 18 است و هنگام ساخت با --version انتخاب می‌شود.

اتصال از طریق PgBouncer است؟

نه. اتصال مستقیم به همان نمونه‌ی PostgreSQL شماست، پس پارامترهای نشست و prepared statement ها بدون محدودیت کار می‌کنند.

پشتیبان‌ها کجا نگهداری می‌شوند؟

جدا از دیسک دیتابیس، روی فضای ذخیره‌سازی سازگار با S3. پشتیبان دستی روی همه‌ی پلن‌ها و زمان‌بندی خودکار روی پلن‌های پولی است.

می‌توانم با pgAdmin یا DBeaver وصل شوم؟

بله. دسترسی عمومی را روشن کنید و آدرس و پورت خارجی را از sakoocloud db credentials بگیرید.

جزئیات بیشتر در راهنمای PostgreSQL در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید