# PostgreSQL

> إنشاء وإدارة قواعد بيانات PostgreSQL على تاروت

# PostgreSQL

PostgreSQL هي قاعدة بيانات علاقية قوية ومفتوحة المصدر، وهي محرك قواعد البيانات الذي توفره تاروت حاليًا. كل قاعدة بيانات مُدارة تعمل بـ PostgreSQL 16.

## إنشاء قاعدة بيانات PostgreSQL

1. انتقل إلى **قواعد البيانات ← قاعدة بيانات جديدة**.
2. اختر مستوى الخطة.
3. أدخل اسمًا ووصفًا إن أردت. إذا تركت الاسم فارغًا، تولّد تاروت اسمًا تلقائيًا.
4. انقر **إنشاء قاعدة بيانات**.

لا يوجد خيار لاختيار الإصدار، ولا تحدد بيانات الاعتماد بنفسك: تولّد تاروت اسم قاعدة البيانات والمستخدم وكلمة المرور.

من واجهة سطر الأوامر:

```bash
tarout db create my-db
```

## الاتصال

انسخ سلسلة الاتصال من صفحة تفاصيل قاعدة البيانات. ومن واجهة سطر الأوامر، يعيدها `tarout db info <db> --json` في الحقل `externalConnectionString` (أما المخرجات العادية لـ `tarout db info` فتخفي كلمة المرور). كل القيم معبّأة لك، بهذا الشكل:

```bash
postgresql://<user>:<password>@<host>:<port>/<database>?sslmode=require
```

الاتصالات الخارجية تستخدم TLS دائمًا، و`sslmode=require` يشفّرها. للتحقق من شهادة الخادم أيضًا، نزّل شهادة CA من صفحة قاعدة البيانات واستبدل `sslmode=require` بما يلي:

```bash
sslmode=verify-full&sslrootcert=/path/to/tarout-postgres-ca.pem
```

## الاستخدام مع تطبيقك

عند ربط قاعدة البيانات بتطبيق على تاروت (مثلًا عبر `tarout db attach <db> <app-id>`)، تُكتب المتغيرات `DATABASE_URL` و`DIRECT_DATABASE_URL` و`PGHOST` و`PGPORT` و`PGUSER` و`PGPASSWORD` و`PGDATABASE` في بيئة التطبيق تلقائيًا.

أما التطبيق المستضاف في مكان آخر، فاضبط سلسلة الاتصال التي نسختها كمتغير بيئة:

```bash
DATABASE_URL="<سلسلة الاتصال المنسوخة من لوحة التحكم>"
```

### Prisma

```prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
```

### Node.js (pg)

```javascript
import pg from "pg";
const pool = new pg.Pool({
  connectionString: process.env.DATABASE_URL,
});
```

## تغيير المستوى

انتقل إلى مستوى آخر من لوحة التحكم، أو عبر واجهة سطر الأوامر:

```bash
tarout db upgrade <db> --plan standard
tarout db downgrade <db> --plan starter
```

الترقية التي يترتب عليها مبلغ تفتح صفحة الدفع أولًا. تغيير المستوى ينسخ بياناتك إلى المستوى الجديد. تبقى قاعدة البيانات متاحة للقراءة لكنها للقراءة فقط أثناء النسخ، فتفشل عمليات الكتابة حتى ينتهي. أما التخفيض فيُطبَّق فورًا ودون استرداد.

## المراقبة

تعرض صفحة قاعدة البيانات حجم قاعدة البيانات، وعدد الجداول مع حجم كل جدول وعدد صفوفه، والاتصالات النشطة، ونسبة إصابة الذاكرة المؤقتة (cache hit rate). ويعرض `tarout db analytics <db>` الحجم والاتصالات ونسبة إصابة الذاكرة المؤقتة. مقاييس الاستعلامات الفردية غير متاحة.

## النسخ الاحتياطية

- **نسخ الخوادم (من تاروت)** - تُنسخ خوادم قواعد البيانات المشتركة احتياطيًا يوميًا للتعافي من الكوارث. لا يستعيدها إلا فريق تاروت، ولخادم كامل فقط، لا لقاعدة بيانات واحدة.
- **نسخك الخاصة (في تخزينك)** - جدولة نسخ احتياطية لقاعدة البيانات هذه إلى حاويتك الخاصة المتوافقة مع S3. متاحة لقواعد البيانات في المستويات المدفوعة (Starter وStandard وPro).

لإعداد نسخك الخاصة:

1. أضف وجهة من **الإعدادات ← وجهات النسخ الاحتياطي**.
2. في تبويب **النسخ الاحتياطية** بصفحة قاعدة البيانات، أنشئ جدولًا: اختر الوجهة وجدول cron، وعدد أحدث الملفات التي تريد الاحتفاظ بها إن أردت.
3. من التبويب نفسه، شغّل نسخة احتياطية عند الطلب أو استعد من ملف محفوظ.

تُحفظ الملفات في حاويتك الخاصة، فيمكنك تنزيلها بأي أداة S3.

الخطوات نفسها عبر واجهة سطر الأوامر:

```bash
tarout destinations create --name <name> --provider s3 --bucket <bucket> \
  --region <region> --endpoint <https-url> --access-key <key> --secret-key <secret>
tarout destinations list
tarout backups create --postgres-id <db-id> --destination-id <destination-id> \
  --database <database-name> --schedule "0 2 * * *" --keep 7
tarout db backups <db>                               # عرض جداول النسخ لهذه القاعدة
tarout backups run <backup-id>                       # تشغيل نسخة احتياطية الآن
tarout backups files <destination-id>                # عرض الملفات المحفوظة
tarout backups download-url <destination-id> <file>  # رابط تنزيل موقّع
```

قيمة `--database` هي اسم قاعدة البيانات الذي يعرضه `tarout db info <db>`. استعادة النسخة الاحتياطية متاحة من لوحة التحكم فقط.

---

## Every Tarout agent guide

- [Start Here (Agents)](https://tarout.sa/docs/for-ai/start.md)
- [Overview](https://tarout.sa/docs/for-ai.md)
- [Deploying an app](https://tarout.sa/docs/for-ai/deploy.md)
- [Databases](https://tarout.sa/docs/for-ai/database.md)
- [Object storage](https://tarout.sa/docs/for-ai/storage.md)
- [Custom domains](https://tarout.sa/docs/for-ai/domains.md)
- [Plans and upgrades](https://tarout.sa/docs/for-ai/billing.md)
- [Troubleshooting](https://tarout.sa/docs/for-ai/troubleshoot.md)
- [Agent Onboarding](https://tarout.sa/docs/for-ai/onboarding.md)
- [CLI Reference](https://tarout.sa/docs/for-ai/cli-reference.md)
- [CLI JSON Schema](https://tarout.sa/docs/for-ai/cli-json-schema.md)

Whole corpus in one file: https://tarout.sa/llms-full.txt · index: https://tarout.sa/llms.txt
Any docs page is raw markdown at the same URL + `.md`. Short link to the entry point: https://tarout.sa/deploy.md
