
استخرج شريحة من قاعدة بيانات الإنتاج الخاصة بك لإعادة إنتاج الأخطاء محليًا. وجّه dbslice إلى سجل معين، حيث يتبع المفاتيح الخارجية ويعطيك مجموعة فرعية كاملة قابلة للاستيراد
استخراج مجموعات فرعية دنيا من قواعد البيانات مع الحفاظ على التكامل المرجعي، لأغراض التطوير المحلي وتصحيح الأخطاء.
نسخ قاعدة بيانات إنتاج كاملة على جهازك أمر غير عملي. لكن إعادة إنتاج خطأ ما يتطلب غالبًا وجود البيانات الدقيقة التي تسببت فيه. dbslice يحل هذه المشكلة باستخراج السجلات التي تحتاجها فقط، متبعًا علاقات المفاتيح الخارجية لضمان التكامل المرجعي.
# تثبيت عام
uv tool install dbslice # أو: pip install dbslice
# استخراج طلب وجميع السجلات المرتبطة به
dbslice extract postgres://localhost/myapp --seed "orders.id=12345" > subset.sql
# استيراد إلى قاعدة البيانات المحلية
psql -d localdb < subset.sql
| قاعدة البيانات | الحالة |
|---|---|
| PostgreSQL | مدعومة بالكامل |
| MySQL | مخطط لها (لم تنفذ بعد) |
| SQLite | مخطط لها (لم تنفذ بعد) |
# التثبيت باستخدام uv (موصى به)
uv add dbslice
# التجربة دون تثبيت
uvx dbslice --help
# أو باستخدام pip
pip install dbslice
# استخراج بواسطة المفتاح الأساسي
dbslice extract postgres://user:pass@host:5432/db --seed "orders.id=12345"
# استخراج بشرط WHERE
dbslice extract postgres://localhost/db --seed "orders:status='failed' AND created_at > '2024-01-01'"
# بذور متعددة
dbslice extract postgres://localhost/db \
--seed "orders.id=100" \
--seed "orders.id=101"
# تحديد العمق (الافتراضي: 3)
dbslice extract postgres://... --seed "orders.id=1" --depth 2
# الاتجاه: up (الأصول فقط)، down (الفروع فقط)، both (الكل - الافتراضي)
dbslice extract postgres://... --seed "orders.id=1" --direction up
# إخفاء تلقائي للحقول الحساسة المكتشفة
dbslice extract postgres://... --seed "users.id=1" --anonymize
# إخفاء حقول إضافية
dbslice extract postgres://... --seed "users.id=1" --anonymize --redact "audit_logs.ip_address"
قم بتعيين الأعمدة بصريًا، وتطبيق ملفات الامتثال، وإنشاء إعدادات جاهزة للاستخدام — كل ذلك من واجهة متصفح محلي.
dbslice map postgres://localhost/myapp
# منفذ مخصص
dbslice map postgres://localhost/myapp --port 8888
# كما يعمل مع uvx (بدون تثبيت)
uvx dbslice map postgres://localhost/myapp
| تعيين الأعمدة إلى قواعد الإخفاء | إنشاء وتصدير الإعدادات |
![]() | ![]() |
يعمل على 127.0.0.1:9473 مع رمز جلسة لمرة واحدة — لا تترك البيانات جهازك. طبق ملفات الامتثال لـ GDPR أو HIPAA أو PCI-DSS بنقرة واحدة، وراجع ما سيتم إخفاؤه، ثم قم بتنزيل YAML.
# HIPAA Safe Harbor — يقوم تلقائيًا بإخفاء جميع أنواع المعرفات الـ 18
dbslice extract postgres://... --seed "patients.id=1" --compliance hipaa --compliance-strict
# ملفات امتثال متعددة + بيان التدقيق
dbslice extract postgres://... --seed "users.id=1" --compliance gdpr --compliance pci-dss -f subset.sql
# ينتج عنه subset.sql + subset.manifest.json
# SQL (افتراضي)
dbslice extract postgres://... --seed "orders.id=1" --output sql
# JSON fixtures
dbslice extract postgres://... --seed "orders.id=1" --output json --out-file fixtures/
# CSV
dbslice extract postgres://... --seed "orders.id=1" --output csv --out-file data/
للعلاقات غير المُعرفة في هيكل قاعدة البيانات (Django GenericForeignKeys، العلاقات الضمنية):
# dbslice.yaml
database:
url: postgres://localhost:5432/myapp
virtual_foreign_keys:
- source_table: notifications
source_columns: [object_id]
target_table: orders
description: "مفتاح خارجي عام للطلبات عبر ContentType"
- source_table: audit_log
source_columns: [user_id]
target_table: users
description: "مفتاح خارجي ضمني بدون قيد في قاعدة البيانات"
dbslice extract --config dbslice.yaml --seed "users.id=1"
dbslice inspect postgres://localhost/myapp
# إنشاء إعدادات من قاعدة البيانات
dbslice init postgres://localhost/myapp --out-file dbslice.yaml
# استخدام الإعدادات
dbslice extract --config dbslice.yaml --seed "orders.id=12345"
| الميزة | dbslice | Jailer | Greenmask | slice-db |
|---|---|---|---|---|
| اللغة | Python | Java | Go | Ruby |
| الإعداد | بدون إعداد | يتطلب ملف نموذج | يتطلب إعدادات | YAML يدوي |
| وقت الإعداد | ثوانٍ | ساعات | متوسط | متوسط |
| الإخفاء | مدمج (Faker) | قائم على الإضافات | محولات متقدمة | غير متوفر |
| ملفات الامتثال | GDPR, HIPAA, PCI-DSS | لا يوجد | لا يوجد | لا يوجد |
| واجهة تعيين الأعمدة | مدمجة (محلية) | لا يوجد | لا يوجد | لا يوجد |
| فحص قيم PII | مرحلتان (قبل/بعد الإخفاء) | لا يوجد | لا يوجد | لا يوجد |
| التقسيم الفرعي | تنقل عبر المفاتيح الخارجية | تنقل عبر المفاتيح الخارجية | محدود | تنقل عبر المفاتيح الخارجية |
| تنسيقات الإخراج | SQL, JSON, CSV | SQL, XML, CSV | SQL | SQL فقط |
| معالجة الدورات | تلقائي | إعداد يدوي | غير متوفر | يدوي |
| التدفق | مدمج | قابل للتكوين | مدمج | غير متوفر |
| الصيانة | نشط | نشط | نشط | غير مدعوم |
dbslice هو الخيار الخفيف بدون إعداد بلغة Python: قم بالتثبيت والاستخراج في أقل من دقيقة.
git clone https://github.com/nabroleonx/dbslice.git
cd dbslice
uv sync --dev
uv run pytest
MIT