پرش به محتویات

PostgreSQL و Migration زیرساخت Backend

PostgreSQL منبع اصلی داده است و pgx/v5 اتصال و Pool را فراهم می‌کند. Query، Row و Scan Featureها دستی هستند و Platform نباید Repository عمومی یا ORM پنهان بسازد.

Connection Pool

  • یک Pool مشترک در Bootstrap ساخته و به Adapterهای نیازمند تزریق می‌شود.
  • حداقل و حداکثر Connection از Config می‌آیند و پس از Metric واقعی تنظیم می‌شوند.
  • هر Query و Transaction، context.Context و Deadline درخواست را دریافت می‌کند.
  • Readiness با Timeout کوتاه Pool را Ping می‌کند و جزئیات Driver را در Response عمومی نمایش نمی‌دهد.

Migration خودکار

Migrationهای SQL شماره‌دار در backend/db/migrations/ داخل Binary Embed می‌شوند و با tern/v2 پیش از بازشدن HTTP Listener اجرا می‌شوند. این رفتار برای اجرای Native، Docker، Restart و Deploy یکسان است.

قواعد:

  • Migration شکست‌خورده Startup را متوقف می‌کند؛
  • تغییر Schema با راهبرد Expand/Contract و سازگار با Rollback Image است؛
  • DDL و Constraint در Migration صریح و Reviewشدنی هستند؛
  • اصلاح Migration اجراشده ممنوع است؛ Change بعدی Migration جدید می‌سازد؛
  • Rollback Binary به معنی Rollback خودکار Schema نیست.

go run ./cmd/migrate status فقط ابزار بازرسی دستی است و پیش‌نیاز اجرای عادی نیست.

مالکیت Feature

هر Table، Index و Query مالک Feature دارد. Platform فقط Runner، Pool و Primitive فنی را نگه می‌دارد. Transaction چند Feature بدون طراحی مالکیت و ADR مجاز نیست.

آزمون لازم

  • اجرای Migration روی Database خالی و اجرای دوباره بدون تغییر؛
  • شکست Startup در SQL نامعتبر یا دسترسی ناکافی؛
  • Integration Test واقعی PostgreSQL برای Query، Constraint، Transaction و Scan؛
  • بررسی Query Plan برای Indexهای مسیر پرتکرار؛
  • Test سازگاری نسخه قبلی Binary با مرحله Expand پیش از Contract.

قواعد داده در داده و چندمستاجری تعریف شده‌اند.