[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-postgresql-18-bittafsil-uuidv7-aamida-iftiradhiyya-muharrik-io":3},{"article":4,"author":52},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":16,"meta_description":17,"focus_keyword":18,"og_image":19,"canonical_url":19,"robots_meta":20,"created_at":15,"updated_at":15,"tags":21,"category_name":31,"related_articles":32},"d0000000-0000-0000-0000-000000000639","a0000000-0000-0000-0000-000000000006","PostgreSQL 18 بالتفصيل: uuidv7 والأعمدة الافتراضية ومحرك الإدخال\u002Fالإخراج الجديد","postgresql-18-bittafsil-uuidv7-aamida-iftiradhiyya-muharrik-io","صدر PostgreSQL 18 في سبتمبر 2025 بميزات تحويلية: محرك إدخال\u002Fإخراج غير متزامن جديد يوفر ما يصل إلى 3 أضعاف معدل القراءة، ودالة uuidv7() الأصلية للمعرّفات المرتبة زمنياً، والأعمدة الافتراضية المولّدة، ومصادقة OAuth، والقيود الزمنية. يغطي هذا التحليل المعمق كل ميزة رئيسية مع دليل الترحيل من PostgreSQL 17.","## الإجابة المختصرة\n\nPostgreSQL 18 هو الإصدار الأكثر أهمية منذ أن قدم PostgreSQL 12 طرق الوصول القابلة للتوصيل للجداول. الميزات الرئيسية — نظام الإدخال\u002Fالإخراج غير المتزامن المعاد كتابته، وتوليد uuidv7() الأصلي، والأعمدة الافتراضية المولّدة، والقيود الزمنية — تعالج ثغرات قائمة منذ فترة طويلة كانت تتطلب سابقاً إضافات أو حلول بديلة أو قواعد بيانات مختلفة تماماً. إذا كنت تشغل PostgreSQL 17 في بيئة الإنتاج، يجب أن تبدأ التخطيط للترقية الآن. مسار الترحيل بسيط، ومكاسب الأداء من محرك الإدخال\u002Fالإخراج الجديد وحدها تبرر الجهد.\n\n## سياق الإصدار\n\nصدر PostgreSQL 18 في 18 سبتمبر 2025، متبعاً دورة الإصدار السنوية للمشروع. كانت دورة التطوير أطول بشكل ملحوظ من المعتاد بسبب إعادة كتابة نظام الإدخال\u002Fالإخراج الفرعي، الذي تطلب تغييرات متزامنة في مدير المخازن المؤقتة وكاتب WAL ونظام الكنس الفرعي. قدم أكثر من 380 مساهماً كوداً لهذا الإصدار، مما يجعله أكبر عدد مساهمين في تاريخ PostgreSQL.\n\nجاء هذا الإصدار في وقت أصبح فيه PostgreSQL الخيار الافتراضي لقاعدة البيانات للمشاريع الجديدة. وضع استطلاع Stack Overflow Developer Survey 2025 PostgreSQL كقاعدة البيانات الأكثر استخداماً للسنة الثالثة على التوالي بنسبة 49.1%، متقدماً على MySQL بنسبة 40.2% وSQLite بنسبة 32.6%.\n\n## نظام الإدخال\u002Fالإخراج غير المتزامن الجديد\n\nالتغيير الأكثر تأثيراً في PostgreSQL 18 هو نظام الإدخال\u002Fالإخراج الفرعي المعاد كتابته. استخدمت إصدارات PostgreSQL السابقة إدخال\u002Fإخراج متزامناً أحادي الخيط لقراءة صفحات البيانات من القرص. يقدم النظام الفرعي الجديد إدخال\u002Fإخراج غير متزامن حقيقي باستخدام io_uring على Linux وkqueue على macOS\u002FBSD، مع رجوع إلى إدخال\u002Fإخراج غير متزامن قائم على خيوط العمل على المنصات الأخرى.\n\n### كيف يعمل\n\nكان مسار الإدخال\u002Fالإخراج التقليدي في PostgreSQL بسيطاً: عندما يحتاج الاستعلام صفحة غير موجودة في shared_buffers، يصدر عملية الخلفية استدعاء read() متزامن ويتوقف حتى يعيد النواة البيانات. هذا يعني أن المسح التتابعي لجدول بحجم 100 غيغابايت كان مقيداً بالإدخال\u002Fالإخراج أحادي الخيط، بغض النظر عن عدد محركات NVMe.\n\nيجمّع النظام الفرعي الجديد طلبات الإدخال\u002Fالإخراج. عندما يحدد المنفذ أنه سيحتاج الصفحات 1 و5 و12 و47 (من bitmap heap scan مثلاً)، يقدم جميع طلبات القراءة الأربعة إلى النواة في وقت واحد عبر io_uring.\n\n### تأثير الأداء\n\nمعايير على تكوين NVMe SSD قياسي (4x NVMe في RAID-0):\n\n| حمل العمل | PG 17 | PG 18 | التحسن |\n|-----------|-------|-------|--------|\n| المسح التتابعي (ذاكرة مؤقتة باردة) | 1.2 غ.ب\u002Fث | 3.4 غ.ب\u002Fث | 2.8x |\n| Bitmap heap scan | 890 م.ب\u002Fث | 2.6 غ.ب\u002Fث | 2.9x |\n| VACUUM (جدول كبير) | 45 دقيقة | 18 دقيقة | 2.5x |\n| بناء الفهرس المتوازي | 12 دقيقة | 5.5 دقيقة | 2.2x |\n| معدل كتابة WAL | 1.8 غ.ب\u002Fث | 3.1 غ.ب\u002Fث | 1.7x |\n\nالتحسن هو الأكثر دراماتيكية لأحمال العمل المقيدة بالإدخال\u002Fالإخراج على تخزين NVMe الحديث.\n\n### التكوين\n\n```sql\n-- الحد الأقصى لطلبات الإدخال\u002Fالإخراج المتزامنة لكل خلفية (الافتراضي: 128)\nSET io_max_concurrency = 128;\n\n-- طريقة الإدخال\u002Fالإخراج: 'io_uring'، 'kqueue'، 'worker' (تُكتشف تلقائياً)\nSET io_method = 'io_uring';\n```\n\n## uuidv7(): معرّفات UUID مرتبة زمنياً بشكل أصلي\n\nأضاف PostgreSQL 18 دالة `uuidv7()` التي تولد UUID الإصدار 7 المتوافق مع RFC 9562. يشفر UUIDv7 طابعاً زمنياً Unix في أول 48 بت، متبوعة ببتات عشوائية للتفرد.\n\n```sql\n-- توليد UUIDv7\nSELECT uuidv7();\n\n-- استخراج الطابع الزمني من UUIDv7\nSELECT uuid_extract_timestamp('019271a4-5b00-7123-8456-789abcdef012');\n\n-- استخدام كمفتاح أساسي افتراضي\nCREATE TABLE events (\n    id UUID PRIMARY KEY DEFAULT uuidv7(),\n    event_type TEXT NOT NULL,\n    payload JSONB,\n    created_at TIMESTAMPTZ DEFAULT now()\n);\n```\n\n### مقارنة الأداء\n\nعلى جدول يحتوي 100 مليون صف:\n\n| المقياس | UUIDv4 PK | UUIDv7 PK | BIGSERIAL PK |\n|---------|-----------|-----------|---------------|\n| معدل الإدراج (صفوف\u002Fثانية) | 45,000 | 112,000 | 125,000 |\n| حجم الفهرس | 4.2 غ.ب | 4.2 غ.ب | 2.1 غ.ب |\n| نسبة إصابة ذاكرة التخزين المؤقت للفهرس | 67% | 94% | 96% |\n| زمن الاستجابة للبحث النقطي (p99) | 2.1 مللي ثانية | 0.4 مللي ثانية | 0.3 مللي ثانية |\n\n## الأعمدة الافتراضية المولّدة\n\n```sql\nCREATE TABLE products (\n    id UUID PRIMARY KEY DEFAULT uuidv7(),\n    name TEXT NOT NULL,\n    price_cents INTEGER NOT NULL,\n    tax_rate NUMERIC(5,4) NOT NULL DEFAULT 0.11,\n    -- افتراضي: يُحسب عند القراءة، تكلفة تخزين صفرية\n    price_with_tax NUMERIC GENERATED ALWAYS AS (price_cents * (1 + tax_rate)) VIRTUAL,\n    -- مخزّن: يُحسب عند الكتابة، يشغل مساحة على القرص\n    search_vector TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', name)) STORED\n);\n```\n\n## مصادقة OAuth\n\nأضاف PostgreSQL 18 OAuth 2.0 \u002F OpenID Connect كطريقة مصادقة أصلية في pg_hba.conf.\n\n## القيود الزمنية\n\n```sql\nCREATE TABLE employee_departments (\n    employee_id INTEGER NOT NULL,\n    department_id INTEGER NOT NULL,\n    valid_from DATE NOT NULL,\n    valid_to DATE NOT NULL,\n    PERIOD FOR valid_period (valid_from, valid_to),\n    PRIMARY KEY (employee_id, valid_period WITHOUT OVERLAPS)\n);\n```\n\nتمنع القيود الزمنية تداخل الفترات لنفس الكيان — مصدر شائع للأخطاء في التطبيقات التي تدير بيانات ذات نطاقات زمنية.\n\n## OLD\u002FNEW في عبارات RETURNING\n\n```sql\nUPDATE products\nSET price_cents = price_cents * 1.1\nWHERE category = 'electronics'\nRETURNING\n    id,\n    OLD.price_cents AS previous_price,\n    NEW.price_cents AS updated_price,\n    name;\n```\n\n## Skip-Scan لفهارس B-tree متعددة الأعمدة\n\n```sql\nCREATE INDEX idx_locations ON locations (country, city, population);\n\n-- PG 17: مسح كامل للفهرس\n-- PG 18: Skip-scan (يقفز بين قيم 'country' المختلفة)\nSELECT * FROM locations WHERE city = 'Jakarta';\n```\n\n## دليل الترحيل: PostgreSQL 17 إلى 18\n\n### قائمة التحقق قبل الترقية\n\n1. **تحقق من توافق الإضافات.** شغّل `SELECT * FROM pg_available_extensions;` على مثيل PG 18 تجريبي.\n2. **راجع pg_hba.conf.** طريقة OAuth الجديدة إضافية — التكوينات الحالية تستمر في العمل.\n3. **اختبر أداء الإدخال\u002Fالإخراج.**\n4. **راجع الأعمدة المولّدة.** تأكد من عدم اعتماد فهارس عليها قبل التحويل.\n5. **اختبر استعلامات التطبيق.** قد يغير skip-scan خطط الاستعلام.\n\n### طرق الترقية\n\n**pg_upgrade (موصى به):**\n```bash\npg_ctl -D \u002Fvar\u002Flib\u002Fpostgresql\u002F17\u002Fdata stop\npg_upgrade \\\n  --old-datadir=\u002Fvar\u002Flib\u002Fpostgresql\u002F17\u002Fdata \\\n  --new-datadir=\u002Fvar\u002Flib\u002Fpostgresql\u002F18\u002Fdata \\\n  --old-bindir=\u002Fusr\u002Flib\u002Fpostgresql\u002F17\u002Fbin \\\n  --new-bindir=\u002Fusr\u002Flib\u002Fpostgresql\u002F18\u002Fbin \\\n  --link\npg_ctl -D \u002Fvar\u002Flib\u002Fpostgresql\u002F18\u002Fdata start\nvacuumdb --all --analyze-in-stages\n```\n\n**النسخ المنطقي (بدون توقف):** أعد النسخ المنطقي من PG 17 إلى PG 18، انتظر المزامنة، ثم بدّل سلسلة اتصال التطبيق.\n\n**الخدمات المُدارة:** AWS RDS وGoogle Cloud SQL وAzure Database وNeon جميعها تدعم ترقيات الإصدارات الرئيسية مع أدنى وقت توقف.\n\n## الأسئلة الشائعة\n\n### هل PostgreSQL 18 جاهز للإنتاج؟\n\nنعم. يتبع PostgreSQL عملية إصدار صارمة. الإصدار .0 بجودة إنتاج. انتظار التصحيح .1 (عادة 2-3 أشهر بعد .0) استراتيجية معقولة للمؤسسات التي تتجنب المخاطر.\n\n### هل يجب التحويل من UUIDv4 إلى UUIDv7 للجداول الحالية؟\n\nللجداول الجديدة، استخدم uuidv7() كافتراضي. للجداول الحالية، نادراً ما تبرر تكلفة الترحيل الفائدة ما لم تكن لديك مشاكل قابلة للقياس في تضخم الفهرس أو أخطاء الذاكرة المؤقتة.\n\n### هل يتطلب محرك الإدخال\u002Fالإخراج الجديد تغييرات في النواة؟\n\nيتطلب دعم io_uring نواة Linux 5.10 أو أحدث. يعود PostgreSQL 18 إلى الإدخال\u002Fالإخراج غير المتزامن القائم على خيوط العمل إذا كانت النواة أقدم.\n\n### هل يمكن استخدام الأعمدة الافتراضية مع pgvector؟\n\nليس مباشرة. تُخزّن تضمينات pgvector عادة ولا تُحسب. لكن يمكنك استخدام عمود افتراضي لمقاييس مشتقة مثل `vector_dims(embedding)`.\n\n### كيف تتفاعل القيود الزمنية مع التقسيم؟\n\nتعمل القيود الزمنية مع التقسيم التصريحي.\n\n### ماذا حدث لتحسينات MERGE؟\n\nيوسع PostgreSQL 18 عبارة MERGE بدعم عبارة RETURNING.","\u003Ch2 id=\"\">الإجابة المختصرة\u003C\u002Fh2>\n\u003Cp>PostgreSQL 18 هو الإصدار الأكثر أهمية منذ أن قدم PostgreSQL 12 طرق الوصول القابلة للتوصيل للجداول. الميزات الرئيسية — نظام الإدخال\u002Fالإخراج غير المتزامن المعاد كتابته، وتوليد uuidv7() الأصلي، والأعمدة الافتراضية المولّدة، والقيود الزمنية — تعالج ثغرات قائمة منذ فترة طويلة كانت تتطلب سابقاً إضافات أو حلول بديلة أو قواعد بيانات مختلفة تماماً. إذا كنت تشغل PostgreSQL 17 في بيئة الإنتاج، يجب أن تبدأ التخطيط للترقية الآن. مسار الترحيل بسيط، ومكاسب الأداء من محرك الإدخال\u002Fالإخراج الجديد وحدها تبرر الجهد.\u003C\u002Fp>\n\u003Ch2 id=\"\">سياق الإصدار\u003C\u002Fh2>\n\u003Cp>صدر PostgreSQL 18 في 18 سبتمبر 2025، متبعاً دورة الإصدار السنوية للمشروع. كانت دورة التطوير أطول بشكل ملحوظ من المعتاد بسبب إعادة كتابة نظام الإدخال\u002Fالإخراج الفرعي، الذي تطلب تغييرات متزامنة في مدير المخازن المؤقتة وكاتب WAL ونظام الكنس الفرعي. قدم أكثر من 380 مساهماً كوداً لهذا الإصدار، مما يجعله أكبر عدد مساهمين في تاريخ PostgreSQL.\u003C\u002Fp>\n\u003Cp>جاء هذا الإصدار في وقت أصبح فيه PostgreSQL الخيار الافتراضي لقاعدة البيانات للمشاريع الجديدة. وضع استطلاع Stack Overflow Developer Survey 2025 PostgreSQL كقاعدة البيانات الأكثر استخداماً للسنة الثالثة على التوالي بنسبة 49.1%، متقدماً على MySQL بنسبة 40.2% وSQLite بنسبة 32.6%.\u003C\u002Fp>\n\u003Ch2 id=\"\">نظام الإدخال\u002Fالإخراج غير المتزامن الجديد\u003C\u002Fh2>\n\u003Cp>التغيير الأكثر تأثيراً في PostgreSQL 18 هو نظام الإدخال\u002Fالإخراج الفرعي المعاد كتابته. استخدمت إصدارات PostgreSQL السابقة إدخال\u002Fإخراج متزامناً أحادي الخيط لقراءة صفحات البيانات من القرص. يقدم النظام الفرعي الجديد إدخال\u002Fإخراج غير متزامن حقيقي باستخدام io_uring على Linux وkqueue على macOS\u002FBSD، مع رجوع إلى إدخال\u002Fإخراج غير متزامن قائم على خيوط العمل على المنصات الأخرى.\u003C\u002Fp>\n\u003Ch3>كيف يعمل\u003C\u002Fh3>\n\u003Cp>كان مسار الإدخال\u002Fالإخراج التقليدي في PostgreSQL بسيطاً: عندما يحتاج الاستعلام صفحة غير موجودة في shared_buffers، يصدر عملية الخلفية استدعاء read() متزامن ويتوقف حتى يعيد النواة البيانات. هذا يعني أن المسح التتابعي لجدول بحجم 100 غيغابايت كان مقيداً بالإدخال\u002Fالإخراج أحادي الخيط، بغض النظر عن عدد محركات NVMe.\u003C\u002Fp>\n\u003Cp>يجمّع النظام الفرعي الجديد طلبات الإدخال\u002Fالإخراج. عندما يحدد المنفذ أنه سيحتاج الصفحات 1 و5 و12 و47 (من bitmap heap scan مثلاً)، يقدم جميع طلبات القراءة الأربعة إلى النواة في وقت واحد عبر io_uring.\u003C\u002Fp>\n\u003Ch3>تأثير الأداء\u003C\u002Fh3>\n\u003Cp>معايير على تكوين NVMe SSD قياسي (4x NVMe في RAID-0):\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>حمل العمل\u003C\u002Fth>\u003Cth>PG 17\u003C\u002Fth>\u003Cth>PG 18\u003C\u002Fth>\u003Cth>التحسن\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>المسح التتابعي (ذاكرة مؤقتة باردة)\u003C\u002Ftd>\u003Ctd>1.2 غ.ب\u002Fث\u003C\u002Ftd>\u003Ctd>3.4 غ.ب\u002Fث\u003C\u002Ftd>\u003Ctd>2.8x\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Bitmap heap scan\u003C\u002Ftd>\u003Ctd>890 م.ب\u002Fث\u003C\u002Ftd>\u003Ctd>2.6 غ.ب\u002Fث\u003C\u002Ftd>\u003Ctd>2.9x\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>VACUUM (جدول كبير)\u003C\u002Ftd>\u003Ctd>45 دقيقة\u003C\u002Ftd>\u003Ctd>18 دقيقة\u003C\u002Ftd>\u003Ctd>2.5x\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>بناء الفهرس المتوازي\u003C\u002Ftd>\u003Ctd>12 دقيقة\u003C\u002Ftd>\u003Ctd>5.5 دقيقة\u003C\u002Ftd>\u003Ctd>2.2x\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>معدل كتابة WAL\u003C\u002Ftd>\u003Ctd>1.8 غ.ب\u002Fث\u003C\u002Ftd>\u003Ctd>3.1 غ.ب\u002Fث\u003C\u002Ftd>\u003Ctd>1.7x\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>التحسن هو الأكثر دراماتيكية لأحمال العمل المقيدة بالإدخال\u002Fالإخراج على تخزين NVMe الحديث.\u003C\u002Fp>\n\u003Ch3>التكوين\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- الحد الأقصى لطلبات الإدخال\u002Fالإخراج المتزامنة لكل خلفية (الافتراضي: 128)\nSET io_max_concurrency = 128;\n\n-- طريقة الإدخال\u002Fالإخراج: 'io_uring'، 'kqueue'، 'worker' (تُكتشف تلقائياً)\nSET io_method = 'io_uring';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"uuidv7-uuid\">uuidv7(): معرّفات UUID مرتبة زمنياً بشكل أصلي\u003C\u002Fh2>\n\u003Cp>أضاف PostgreSQL 18 دالة \u003Ccode>uuidv7()\u003C\u002Fcode> التي تولد UUID الإصدار 7 المتوافق مع RFC 9562. يشفر UUIDv7 طابعاً زمنياً Unix في أول 48 بت، متبوعة ببتات عشوائية للتفرد.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-sql\">-- توليد UUIDv7\nSELECT uuidv7();\n\n-- استخراج الطابع الزمني من UUIDv7\nSELECT uuid_extract_timestamp('019271a4-5b00-7123-8456-789abcdef012');\n\n-- استخدام كمفتاح أساسي افتراضي\nCREATE TABLE events (\n    id UUID PRIMARY KEY DEFAULT uuidv7(),\n    event_type TEXT NOT NULL,\n    payload JSONB,\n    created_at TIMESTAMPTZ DEFAULT now()\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>مقارنة الأداء\u003C\u002Fh3>\n\u003Cp>على جدول يحتوي 100 مليون صف:\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>المقياس\u003C\u002Fth>\u003Cth>UUIDv4 PK\u003C\u002Fth>\u003Cth>UUIDv7 PK\u003C\u002Fth>\u003Cth>BIGSERIAL PK\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>معدل الإدراج (صفوف\u002Fثانية)\u003C\u002Ftd>\u003Ctd>45,000\u003C\u002Ftd>\u003Ctd>112,000\u003C\u002Ftd>\u003Ctd>125,000\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>حجم الفهرس\u003C\u002Ftd>\u003Ctd>4.2 غ.ب\u003C\u002Ftd>\u003Ctd>4.2 غ.ب\u003C\u002Ftd>\u003Ctd>2.1 غ.ب\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>نسبة إصابة ذاكرة التخزين المؤقت للفهرس\u003C\u002Ftd>\u003Ctd>67%\u003C\u002Ftd>\u003Ctd>94%\u003C\u002Ftd>\u003Ctd>96%\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>زمن الاستجابة للبحث النقطي (p99)\u003C\u002Ftd>\u003Ctd>2.1 مللي ثانية\u003C\u002Ftd>\u003Ctd>0.4 مللي ثانية\u003C\u002Ftd>\u003Ctd>0.3 مللي ثانية\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"\">الأعمدة الافتراضية المولّدة\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE TABLE products (\n    id UUID PRIMARY KEY DEFAULT uuidv7(),\n    name TEXT NOT NULL,\n    price_cents INTEGER NOT NULL,\n    tax_rate NUMERIC(5,4) NOT NULL DEFAULT 0.11,\n    -- افتراضي: يُحسب عند القراءة، تكلفة تخزين صفرية\n    price_with_tax NUMERIC GENERATED ALWAYS AS (price_cents * (1 + tax_rate)) VIRTUAL,\n    -- مخزّن: يُحسب عند الكتابة، يشغل مساحة على القرص\n    search_vector TSVECTOR GENERATED ALWAYS AS (to_tsvector('english', name)) STORED\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"oauth\">مصادقة OAuth\u003C\u002Fh2>\n\u003Cp>أضاف PostgreSQL 18 OAuth 2.0 \u002F OpenID Connect كطريقة مصادقة أصلية في pg_hba.conf.\u003C\u002Fp>\n\u003Ch2 id=\"\">القيود الزمنية\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE TABLE employee_departments (\n    employee_id INTEGER NOT NULL,\n    department_id INTEGER NOT NULL,\n    valid_from DATE NOT NULL,\n    valid_to DATE NOT NULL,\n    PERIOD FOR valid_period (valid_from, valid_to),\n    PRIMARY KEY (employee_id, valid_period WITHOUT OVERLAPS)\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>تمنع القيود الزمنية تداخل الفترات لنفس الكيان — مصدر شائع للأخطاء في التطبيقات التي تدير بيانات ذات نطاقات زمنية.\u003C\u002Fp>\n\u003Ch2 id=\"old-new-returning\">OLD\u002FNEW في عبارات RETURNING\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-sql\">UPDATE products\nSET price_cents = price_cents * 1.1\nWHERE category = 'electronics'\nRETURNING\n    id,\n    OLD.price_cents AS previous_price,\n    NEW.price_cents AS updated_price,\n    name;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"skip-scan-b-tree\">Skip-Scan لفهارس B-tree متعددة الأعمدة\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-sql\">CREATE INDEX idx_locations ON locations (country, city, population);\n\n-- PG 17: مسح كامل للفهرس\n-- PG 18: Skip-scan (يقفز بين قيم 'country' المختلفة)\nSELECT * FROM locations WHERE city = 'Jakarta';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"postgresql-17-18\">دليل الترحيل: PostgreSQL 17 إلى 18\u003C\u002Fh2>\n\u003Ch3>قائمة التحقق قبل الترقية\u003C\u002Fh3>\n\u003Col>\n\u003Cli>\u003Cstrong>تحقق من توافق الإضافات.\u003C\u002Fstrong> شغّل \u003Ccode>SELECT * FROM pg_available_extensions;\u003C\u002Fcode> على مثيل PG 18 تجريبي.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>راجع pg_hba.conf.\u003C\u002Fstrong> طريقة OAuth الجديدة إضافية — التكوينات الحالية تستمر في العمل.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>اختبر أداء الإدخال\u002Fالإخراج.\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>راجع الأعمدة المولّدة.\u003C\u002Fstrong> تأكد من عدم اعتماد فهارس عليها قبل التحويل.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>اختبر استعلامات التطبيق.\u003C\u002Fstrong> قد يغير skip-scan خطط الاستعلام.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>طرق الترقية\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>pg_upgrade (موصى به):\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">pg_ctl -D \u002Fvar\u002Flib\u002Fpostgresql\u002F17\u002Fdata stop\npg_upgrade \\\n  --old-datadir=\u002Fvar\u002Flib\u002Fpostgresql\u002F17\u002Fdata \\\n  --new-datadir=\u002Fvar\u002Flib\u002Fpostgresql\u002F18\u002Fdata \\\n  --old-bindir=\u002Fusr\u002Flib\u002Fpostgresql\u002F17\u002Fbin \\\n  --new-bindir=\u002Fusr\u002Flib\u002Fpostgresql\u002F18\u002Fbin \\\n  --link\npg_ctl -D \u002Fvar\u002Flib\u002Fpostgresql\u002F18\u002Fdata start\nvacuumdb --all --analyze-in-stages\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>النسخ المنطقي (بدون توقف):\u003C\u002Fstrong> أعد النسخ المنطقي من PG 17 إلى PG 18، انتظر المزامنة، ثم بدّل سلسلة اتصال التطبيق.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>الخدمات المُدارة:\u003C\u002Fstrong> AWS RDS وGoogle Cloud SQL وAzure Database وNeon جميعها تدعم ترقيات الإصدارات الرئيسية مع أدنى وقت توقف.\u003C\u002Fp>\n\u003Ch2 id=\"\">الأسئلة الشائعة\u003C\u002Fh2>\n\u003Ch3 id=\"postgresql-18\">هل PostgreSQL 18 جاهز للإنتاج؟\u003C\u002Fh3>\n\u003Cp>نعم. يتبع PostgreSQL عملية إصدار صارمة. الإصدار .0 بجودة إنتاج. انتظار التصحيح .1 (عادة 2-3 أشهر بعد .0) استراتيجية معقولة للمؤسسات التي تتجنب المخاطر.\u003C\u002Fp>\n\u003Ch3 id=\"uuidv4-uuidv7\">هل يجب التحويل من UUIDv4 إلى UUIDv7 للجداول الحالية؟\u003C\u002Fh3>\n\u003Cp>للجداول الجديدة، استخدم uuidv7() كافتراضي. للجداول الحالية، نادراً ما تبرر تكلفة الترحيل الفائدة ما لم تكن لديك مشاكل قابلة للقياس في تضخم الفهرس أو أخطاء الذاكرة المؤقتة.\u003C\u002Fp>\n\u003Ch3 id=\"\">هل يتطلب محرك الإدخال\u002Fالإخراج الجديد تغييرات في النواة؟\u003C\u002Fh3>\n\u003Cp>يتطلب دعم io_uring نواة Linux 5.10 أو أحدث. يعود PostgreSQL 18 إلى الإدخال\u002Fالإخراج غير المتزامن القائم على خيوط العمل إذا كانت النواة أقدم.\u003C\u002Fp>\n\u003Ch3 id=\"pgvector\">هل يمكن استخدام الأعمدة الافتراضية مع pgvector؟\u003C\u002Fh3>\n\u003Cp>ليس مباشرة. تُخزّن تضمينات pgvector عادة ولا تُحسب. لكن يمكنك استخدام عمود افتراضي لمقاييس مشتقة مثل \u003Ccode>vector_dims(embedding)\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3 id=\"\">كيف تتفاعل القيود الزمنية مع التقسيم؟\u003C\u002Fh3>\n\u003Cp>تعمل القيود الزمنية مع التقسيم التصريحي.\u003C\u002Fp>\n\u003Ch3 id=\"merge\">ماذا حدث لتحسينات MERGE؟\u003C\u002Fh3>\n\u003Cp>يوسع PostgreSQL 18 عبارة MERGE بدعم عبارة RETURNING.\u003C\u002Fp>\n","ar","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:47.268107Z","PostgreSQL 18 بالتفصيل — uuidv7 والأعمدة الافتراضية ومحرك I\u002FO غير المتزامن (2025)","دليل شامل لميزات PostgreSQL 18: محرك I\u002FO غير المتزامن (أسرع 3 مرات)، uuidv7() الأصلي، الأعمدة الافتراضية، مصادقة OAuth، القيود الزمنية وفهارس skip-scan.","postgresql 18 ميزات",null,"index, follow",[22,27],{"id":23,"name":24,"slug":25,"created_at":26},"c0000000-0000-0000-0000-000000000012","DevOps","devops","2026-03-28T10:44:21.513630Z",{"id":28,"name":29,"slug":30,"created_at":26},"c0000000-0000-0000-0000-000000000005","PostgreSQL","postgresql","Engineering",[33,40,46],{"id":34,"title":35,"slug":36,"excerpt":37,"locale":12,"category_name":38,"published_at":39},"d0000000-0000-0000-0000-000000000686","لماذا Bali تتحول إلى مركز تكنولوجيا التأثير في جنوب شرق آسيا 2026","limadha-bali-tatahawwal-markaz-tiknulujia-attathir-janub-sharq-asia-2026","تحتل Bali المرتبة 16 بين أنظمة الشركات الناشئة في جنوب شرق آسيا. مع تركيز متزايد لبناة Web3 وشركات AI المستدامة الناشئة وشركات تكنولوجيا السفر البيئي، تنحت الجزيرة مكانتها كعاصمة تكنولوجيا التأثير في المنطقة.","الهندسة","2026-03-28T10:44:50.120618Z",{"id":41,"title":42,"slug":43,"excerpt":44,"locale":12,"category_name":38,"published_at":45},"d0000000-0000-0000-0000-000000000685","فسيفساء حماية البيانات في ASEAN: قائمة امتثال للمطورين","fusayfisa-himayat-albayanat-asean-qaimat-imtithal-lilmutawwirin","تمتلك سبع دول في ASEAN الآن قوانين شاملة لحماية البيانات، لكل منها نماذج موافقة ومتطلبات توطين وهياكل عقوبات مختلفة. إليك قائمة امتثال عملية للمطورين الذين يبنون تطبيقات متعددة البلدان.","2026-03-28T10:44:50.114369Z",{"id":47,"title":48,"slug":49,"excerpt":50,"locale":12,"category_name":38,"published_at":51},"d0000000-0000-0000-0000-000000000684","التحول الرقمي في Indonesia بقيمة 29 مليار دولار: فرص لشركات البرمجيات","attahawwul-arraqami-indonesia-29-milyar-dular-furas-sharikat-albarmajiyat","من المتوقع أن يصل سوق خدمات تكنولوجيا المعلومات في Indonesia إلى 29.03 مليار دولار في 2026، ارتفاعاً من 24.37 مليار دولار في 2025. البنية التحتية السحابية والذكاء الاصطناعي والتجارة الإلكترونية ومراكز البيانات تقود أسرع نمو في جنوب شرق آسيا.","2026-03-28T10:44:50.092728Z",{"id":13,"name":53,"slug":54,"bio":55,"photo_url":19,"linkedin":19,"role":56,"created_at":57,"updated_at":57},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]