PostgreSQL هو نظام قاعدة بيانات مفتوح المصدر وقوي وموثوق ومستقر وموجود بالمؤسسة ومجاني وحرفي في أسلوب مشاريع MariaDB أو MySQL أو SQLite. إنه خادم قاعدة بيانات / محرك متوافق مع معايير ACID (Atomicity، Consendency، Isolation، Durability) يمكن تخصيصه بشكل كبير ويتضمن العديد من الميزات الجذابة ، مما يجعله بديلاً رائعًا لمحركات قواعد البيانات المذكورة آنفاً.
الميزات في لمحة
تتضمن الميزات الأساسية دعمًا للمفاتيح الخارجية ، والمشاهدات ، والارتباطات ، والمشغلات والإجراءات المخزنة ، ودعم لغات متعددة ، ودعم مجموعة كبيرة من أنواع بيانات SQL ، بما في ذلك BOOLEAN ، و CHAR ، و INTEGER ، و NUMERIC ، و VARCHAR ، و INTERVAL ، و TIMESTAMP ، و DATE.
بالإضافة إلى ذلك ، يأتي البرنامج مع دعم لتخزين كائنات كبيرة ثنائية ، بما في ذلك جميع أنواع ملفات الوسائط المتعددة (الفيديو والصوت والصور) ، ويوفر للمطورين واجهات برمجة أصلية لـ C ، C ++ ، Python ، Perl ، Ruby ، Java و .Net و Tcl و ODBC لغات البرمجة.
من بين الميزات الأخرى المثيرة للاهتمام ، يمكننا أن نذكر MVCC (التحكم في التوافق متعدد الإصدارات) ، ومساحات العمل ، وترميزات الأحرف متعددة البتات ، واستعادة النقطة في الوقت ، ومحسن الاستعلام الناجح والمخطط ، والنسخ غير المتزامن ، والنسخ الاحتياطي عبر الإنترنت ، والمعاملات المتداخلة (المعروفة باسم savepoints) ، والنسخ الاحتياطي السريع ، وكتابة التسجيل المسبق للخطأ ، ودعم مجموعات الأحرف الدولية ، وكذلك دعم Unicode.
PostgreSQL في الأرقام
في الوقت الحالي ، يدعم خادم قاعدة بيانات PostgreSQL حجمًا غير محدود لقواعد البيانات ، ويجب أن يكون 32 تيرابايت أقصى حجم للجداول ، و 1.6 تيرابايت لكل صف ، و 1 غيغابايت لكل حقل ، و صفوف غير محدودة لكل طاولة ، ويدعم بين 250 و 1600 عمودًا لكل جدول ، استنادًا إلى أنواع الأعمدة ، ويدعم الفهارس غير المحدودة لكل جدول.
أنظمة التشغيل المدعومة
تم اختبار PostgreSQL بنجاح على جميع أنظمة التشغيل السائدة ، بما في ذلك GNU / Linux و BSD و Solaris و HP-UX و AIX و SGI IRIX و Solaris و Tru64 و Mac OS X و Microsoft Windows. PostgreSQL متاح للتنزيل كأرشيف مصدر عالمي ، بالإضافة إلى حزم ثنائية مجمعة مسبقًا للعديد من توزيعات لينكس ، تدعم كلا معماريين 32 بت و 64 بت.
ما هو الجديد في هذا الإصدار:
يعمل هذا الإصدار على إصلاح مشكلتي أمان. كما يعمل هذا الإصدار على إصلاح المشكلات التي تم العثور عليها باستخدام فهارس VACUUM و GIN & hash و الاستعلام الموازي والنسخ المنطقي وغير ذلك من الأخطاء التي تم الإبلاغ عنها خلال الأشهر الثلاثة الماضية. يجب تحديث جميع المستخدمين الذين يستخدمون الإصدارات المتأثرة من PostgreSQL في أقرب وقت ممكن.
ما هو الجديد في الإصدار 10.4 / 11 الإصدار بيتا 1:
يعمل هذا الإصدار على إصلاح مشكلتي أمان. كما يعمل هذا الإصدار على إصلاح المشكلات التي تم العثور عليها باستخدام فهارس VACUUM و GIN & hash و الاستعلام الموازي والنسخ المنطقي وغير ذلك من الأخطاء التي تم الإبلاغ عنها خلال الأشهر الثلاثة الماضية. يجب تحديث جميع المستخدمين الذين يستخدمون الإصدارات المتأثرة من PostgreSQL في أقرب وقت ممكن.
ما هو الجديد في الإصدار:
فرض مزيد من القيود على رؤية pg_user_mappings.umoptions ، لحماية كلمات المرور المخزنة كخيارات خرائط المستخدم (Noah Misch)
كان الإصلاح الخاص بـ CVE-2017-7486 غير صحيح: فقد سمح للمستخدم بمشاهدة الخيارات في تعيين المستخدم الخاص به ، حتى لو لم يكن لديه إذن USAGE على الخادم الخارجي المقترن. قد تتضمن هذه الخيارات كلمة مرور تم توفيرها بواسطة مالك الخادم بدلاً من المستخدم نفسه. بما أن information_schema.user_mapping_options لا تُظهر الخيارات في مثل هذه الحالات ، يجب ألا تكون pg_user_mappings كذلك. (CVE-2017-7547)
في حد ذاته ، سيعمل هذا التصحيح على إصلاح السلوك في قواعد البيانات التي تم إنشاؤها حديثًا فقط. إذا كنت ترغب في تطبيق هذا التغيير في قاعدة بيانات موجودة ، فستحتاج إلى القيام بما يلي:
أعد تشغيل مدير مكتب البريد بعد إضافة allow_system_table_mods = true إلى postgresql.conf. (في الإصدارات التي تدعم ALTER SYSTEM ، يمكنك استخدام ذلك لتغيير التكوين ، ولكنك ستحتاج إلى إعادة تشغيل.)
في كل قاعدة بيانات من الكتلة ، قم بتشغيل الأوامر التالية كخادم متميز:
SET search_path = pg_catalog؛
إنشاء أو استبدال عرض pg_user_mappings AS
تحديد
U.oid AS umid ،
S.oid AS srvid ،
S.srvname AS srvname ،
حالة عندما U.umuser = 0 ثم
'عامة'
آخر
A.rolname
END AS usename ،
حالة عند (U.umuser 0 و A.rolname = current_user
AND (pg_has_role (S.srvowner، 'USAGE')
أو has_server_privilege (S.oid، 'USAGE')))
OR (U.umuser = 0 AND pg_has_role (S.srvowner، 'USAGE'))
أو (SELECT rolsuper FROM pg_authid WHERE rolname = current_user)
ثم U.umoptions
ELSE NULL END AS umoptions
من pg_user_mapping U
LEFT JOIN pg_authid A ON (A.oid = U.umuser) JOIN
pg_foreign_server S ON (U.umserver = S.oid)؛
لا تنسَ تضمين قواعد البيانات template0 و template1 ، أو ستظل الثغرة موجودة في قواعد البيانات التي تقوم بإنشائها لاحقاً. لإصلاح template0 ، ستحتاج إلى جعله يقبل الاتصالات مؤقتًا. في PostgreSQL 9.5 والإصدارات الأحدث ، يمكنك استخدامه
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true؛
ثم بعد إصلاح template0 ، التراجع عن ذلك
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false
في الإصدارات السابقة ، استخدم بدلاً من ذلك
UPDATE pg_database SET datallowconn = true WHERE datname = 'template0'؛UPDATE pg_database SET datallowconn = false WHERE datname = 'template0'؛
وأخيرًا ، أزل إعداد تهيئة allow_system_table_mods ، ثم أعد تشغيل مدير مكتب البريد مرة أخرى.
عدم السماح بكلمات المرور الفارغة في جميع طرق المصادقة المستندة إلى كلمة المرور (Heikki Linnakangas)
يتجاهل libpq مواصفات كلمة المرور الفارغة ، ولا ينقلها إلى الخادم. لذا ، إذا تم تعيين كلمة مرور المستخدم على السلسلة الفارغة ، فمن المستحيل تسجيل الدخول باستخدام كلمة المرور هذه عبر psql أو عملاء آخرين يستخدمون libpq. قد يعتقد أحد المشرفين أن تعيين كلمة المرور فارغة يُعادل تعطيل تسجيل الدخول باستخدام كلمة المرور. ومع ذلك ، يمكن أن يكون تسجيل الدخول ممكنا مع عميل معدّل أو لا يستند إلى libpq ، حسب طريقة التوثيق التي تم تكوينها. على وجه الخصوص ، الطريقة الأكثر شيوعا ، md5 ، قبلت كلمات المرور الفارغة. قم بتغيير الخادم لرفض كلمات المرور الفارغة في جميع الحالات. (CVE-2017-7546)
إجراء فحص lo_put () لامتياز UPDATE على الكائن الكبير المستهدف (Tom Lane، Michael Paquier)
يجب أن تتطلب lo_put () بالتأكيد نفس الأذونات مثل lowrite () ، ولكن الشيك مفقود ، مما يسمح لأي مستخدم بتغيير البيانات في كائن كبير. (CVE-2017-7548)تصحيح الوثائق المتعلقة بعملية ترقية خوادم الاستعداد مع pg_upgrade (Bruce Momjian)
أوعزت الوثائق السابقة المستخدمين ببدء / إيقاف الخادم الأساسي بعد تشغيل pg_upgrade ولكن قبل مزامنة خوادم الاستعداد. هذا التسلسل غير آمن.
إصلاح التثبيت المتزامن لسلاسل تحديثات الصفوف (Alvaro Herrera)
إذا كانت هناك عدة جلسات في نفس الوقت تقفل سلسلة تحديث tuple مع أوضاع قفل غير ملتوية باستخدام لقطة قديمة ، وكلها تنجح ، فقد كان من الممكن أن يفشل البعض منها (وخلصت إلى أنه لا يوجد إصدار tuple مباشر) بسبب حالة السباق. كان لهذا عواقب مثل الفحوصات الأجنبية التي فشلت في رؤية مجموعة موجودة بالتأكيد ولكن يجري تحديثها بشكل متزامن.
إصلاح فساد البيانات المحتملة عند تجميد مجموعة بيانات يكون XMAX متعدد الوصلات مع عضو واحد مثير للاهتمام (Teodor Sigaev)
تجنب تجاوز عدد صحيح والتحطم الذي يحدث عند فرز أكثر من مليار تجمع في الذاكرة (سيرجي كوبوسوف)
في نظام التشغيل Windows ، أعد محاولة إنشاء العملية إذا فشلنا في حجز نطاق عناوين ذاكرتنا المشتركة في العملية الجديدة (Tom Lane، Amit Kapila)ومن المتوقع أن يؤدي هذا إلى إصلاح حالات فشل تشغيل الأطفال غير المتكررة والتي ربما تكون بسبب تداخل منتجات مكافحة الفيروسات.
إصلاح فساد احتمالي منخفض لجدول تجزئة قفل السجل المشترك في Windows builds (Thomas Munro، Tom Lane)
تجنب تسجيل الإغلاق النظيف لاتصال SSL كما لو كان إعادة اتصال (Michael Paquier)
منع إرسال تذاكر جلسة SSL للعملاء (توم لين)
يمنع هذا الإصلاح فشل إعادة الاتصال مع رمز SSL جانب العميل علم التذكرة.
إصلاح رمز لإعداد tcp_keepalives_idle على Solaris (توم لين)
إصلاح أداة تجميع الإحصائيات لتكريم رسائل الاستفسار التي يتم إصدارها بعد إيقاف تشغيل مدير مكتب البريد وإعادة التشغيل الفوري (توم لين)
تم تجاهل الاستفسارات الإحصائية التي صدرت في غضون نصف ثانية من اغلاق مكتب البريد السابق بشكل فعال.
تأكد من أن حجم المخزن المؤقت لاستلام جامع الإحصائيات لا يقل عن 100 كيلوبايت (توم لين)
هذا يقلل من خطر البيانات الإحصائية التي تم إسقاطها على المنصات القديمة التي يكون حجم المخزن المؤقت لتلقيها الافتراضي أقل من ذلك.
إصلاح الإنشاء المحتمل لشريحة WAL غير صالحة عند ترقية وضع الاستعداد فقط بعد أن يقوم بمعالجة سجل WALWAG_SWITCH (Andres Freund)إصلاح walsender للخروج على الفور عند إيقاف طلبات العميل (توم لين)
إصلاح معالجة SIGHUP و SIGUSR1 في عمليات walsender (Petr Jelinek، Andres Freund)
منع الفالس التي تسببها walsender خلال نقاط التفتيش اغلاق (اندريس فرويند ، مايكل Paquier)
إصلاح عمليات إعادة التوليد بطيئة دون داعٍ بسبب حالة السباق في مدير البريد (توم لين)
إصلاح تسرب التحويلات الفرعية الصغيرة التي تسربت إلى القرص أثناء فك التشفير المنطقي (Andres Freund)
هذا أدى إلى ملفات مؤقتة تستهلك مساحة القرص الزائد.
تقليل العمل المطلوب لبناء لقطات أثناء إنشاء فتحات فك تشفير منطقي (Andres Freund، Petr Jelinek)
كانت الخوارزمية السابقة مكلفة بشكل غير محدود على الخادم مع الكثير من المعاملات المفتوحة.
إصلاح حالة السباق التي قد تؤدي إلى تأخير إنشاء فتحات فك تشفير منطقي (Andres Freund، Petr Jelinek) إلى أجل غير مسمى
تقليل مقدار الحمل في معالجة أحداث إبطال syscache (Tom Lane)
هذا مفيد بشكل خاص لفك التشفير المنطقي ، والذي يؤدي إلى إبطال ذاكرة التخزين المؤقت بشكل متكرر.
إزالة إرشادية غير صحيحة مستخدمة في بعض الحالات لتقدير انتقاء الانضمام بناءً على وجود قيود على المفتاح الخارجي (David Rowley)في بعض الحالات التي يوجد فيها قيد مفتاح خارجي متعدد الأعمدة ولكنه لا يتطابق تمامًا مع بنية ربط الاستعلام ، استخدم المخطط تقديرًا إرشاديًا تبين أنه لا يعمل جيدًا على الإطلاق. عد إلى مثل هذه الحالات بالطريقة التي تم تقديرها قبل 9.6.
إصلاح الحالات التي يعين فيها INSERT أو UPDATE لأكثر من عنصر واحد في عمود يكون من نوع النطاق عبر المصفوفة (Tom Lane)
السماح باستخدام وظائف النافذة في SELECTs الفرعية الموجودة داخل وسيطات دالة التجميع (Tom Lane)
تأكد من فرض جملة "عرض التحقق" بشكل صحيح عندما يكون الجدول الأساسي جدولاً أجنبياً (Etsuro Fujita)
في السابق ، قد يتم دفع التحديث بالكامل للخادم الأجنبي ، ولكن لم يتم تسجيل الحاجة إلى التحقق من شروط العرض إذا كان الأمر كذلك.
نقل أنواع الصفيف autogenerated بعيدًا أثناء ALTER ... RENAME (Vik Fearing)
في السابق ، كنا نعيد تسمية نوع مصفوفة متضاربة متضاربة خارج الطريقة أثناء إنشاء CREATE ؛ هذا الإصلاح يمتد هذا السلوك لإعادة تسمية العمليات.
إصلاح مؤشر التعلق في ALTER TABLE عندما يكون هناك تعليق على قيد ينتمي إلى الجدول (David Rowley)قد تفشل إعادة تطبيق التعليق على القيد المعاد بناؤها مع رسالة خطأ غريبة ، أو حتى تعطل.
تأكد من أن ALTER USER ... SET يقبل كافة المتغيرات اللغوية التي يقوم ALTER ROLE ... SET بها (Peter Eisentraut)
اسمح لقيود CHECK الخاصة بطاولة أجنبية أن تكون في البداية NOT VALID (Amit Langote)
CREATE TABLE يسقط بصمت NOT محددات VALID لقيود CHECK ، مع التفكير في أن الجدول يجب أن يكون فارغًا حتى يمكن التحقق من القيد على الفور. ولكن هذا خطأ بالنسبة لـ CREATE FOREIGN TABLE ، حيث لا يوجد سبب يفترض أن الجدول الأساسي فارغ ، وحتى إذا لم يكن عملنا هو أن نقرر أن القيد يمكن التعامل معه على أنه صالح من الآن فصاعدًا. تخطي هذا & quot؛ التحسين & quot؛ للجداول الأجنبية.
تحديث معلومات التبعية بشكل صحيح عند تغيير وسيطة دالة نوع البيانات I / O أو نوع الإرجاع من معتم إلى النوع الصحيح (Heikki Linnakangas)
يقوم CREATE TYPE بتحديث وظائف I / O المعلنة في هذا النمط القديم ، ولكنه نسي أن يسجل تبعية على النوع ، مما يسمح لـ DROP TYPE اللاحق بمغادرة تعاريف الوظيفة المكسورة.
السماح بالتوازي في خطة طلب البحث عند نسخ COPY من نتيجة الاستعلام (Andres Freund)تقليل استخدام الذاكرة عندما تقوم ANALYZE بمعالجة عمود tsvector (Heikki Linnakangas)
إصلاح فقدان الدقة غير الضرورية والتقريب المتقلب عند ضرب أو تقسيم قيم المال بواسطة الأعداد الصحيحة أو العائمة (توم لين)
تشديد الشيكات للمسافات البيضاء في الوظائف التي تقوم بتعريف المعرفات ، مثل regprocedurein () (توم لين)
اعتمادا على اللغة السائدة ، يمكن لهذه الوظائف أن تفسر أجزاء شظايا متعددة البايتات كمساحة بيضاء.
استخدم # تعريف الرموز ذات الصلة من بيرل أثناء تجميع PL / Perl (Ashutosh Sharma، Tom Lane)
يتجنب هذا مشكلات قابلية النقل ، والتي تظهر عادة على شكل & quot؛ مصافحة & quot؛ عدم التطابق أثناء تحميل المكتبة ، عند العمل مع إصدارات بيرل الحديثة.
في libpq ، قم بإعادة تعيين حالة مصادقة GSS / SASL و SSPI بشكل صحيح بعد محاولة اتصال فاشلة (Michael Paquier)
يعني الفشل في القيام بذلك أنه عند الرجوع من SSL إلى اتصالات غير SSL ، يؤدي فشل GSS / SASL في محاولة SSL دائمًا إلى فشل محاولة عدم SSL. لم تفشل SSPI ، لكنه تسرب الذاكرة.
في psql ، قم بإصلاح الفشل عند انتهاء COPY FROM STDIN مع إشارة EOF بلوحة المفاتيح ومن ثم تتم محاولة COPY FROM STDIN (Thomas Munro)وقد لوحظ سوء السلوك هذا على الأنظمة الأساسية المشتقة من BSD (بما في ذلك macOS) ، ولكن ليس على معظم الأنظمة الأخرى.
إصلاح pg_dump و pg_restore لإصدار أوامر REFRESH MATERIALIZED VIEW الماضي (توم لين)
هذا يمنع الأخطاء أثناء عملية التفريغ / الاستعادة عندما يشير العرض المادي إلى الجداول التي يملكها مستخدم مختلف.
تحسين تقارير pg_dump / pg_restore عن حالات الخطأ التي تنشأ في zlib (فلاديمير كونشيكوف ، ألفارو هيريرا)
إصلاح pg_dump مع الخيار -clean لإسقاط مشغلات الحدث كما هو متوقع (توم لين)
كما أنه يعيّن الآن بشكل صحيح ملكية مشغلات الحدث ؛ قبل ذلك ، تمت استعادتها على أنها مملوكة من قبل المستخدم المتميز الذي يشغل النص البرمجي للاستعادة.
إصلاح pg_dump مع خيار -clean لعدم الفشل عند عدم وجود المخطط العام (Stephen Frost)
إصلاح pg_dump لعدم إصدار SQL غير صالحة لفئة مشغل فارغة (Daniel Gustafsson)
إصلاح إخراج pg_dump إلى stdout على ويندوز (كونتال غوش)
سيحتوي ملف تفريغ النص العادي المضغوط المكتوب على stdout على بيانات تالفة بسبب فشل وضع واصف الملف في الوضع الثنائي.
إصلاح pg_get_ruledef () لطباعة الإخراج الصحيح لقاعدة ON SELECT لطريقة العرض التي تمت إعادة تسمية أعمدتها (Tom Lane)في بعض الحالات الزاوية ، يعتمد pg_dump على pg_get_ruledef () إلى طرق عرض التفريغ ، بحيث يمكن أن يؤدي هذا الخطأ إلى فشل تفريغ / إعادة تحميل.
إصلاح إغراق الصلات الخارجية ذات القيود الفارغة ، مثل نتيجة الانضمام إلى اليسار الطبيعي دون وجود أعمدة مشتركة (توم لين)
إصلاح إغراق تعبيرات الدالة في جملة FROM في الحالات التي لا يتم فيها تعبير التعبير إلى شيء يشبه استدعاء دالة (توم لين)
إصلاح إخراج pg_basebackup إلى stdout على Windows (Haribabu Kommi)
نسخة احتياطية مكتوبة إلى stdout قد تحتوي على بيانات تالفة بسبب الفشل في وضع واصف الملف في الوضع الثنائي.
إصلاح pg_rewind للتعامل بشكل صحيح مع الملفات التي تتجاوز 2 جيجابايت (Kuntal Ghosh، Michael Paquier)
في العادة ، لن تظهر مثل هذه الملفات في أدلة بيانات PostgreSQL ، ولكنها قد تكون موجودة في بعض الحالات.
إصلاح pg_upgrade للتأكد من أن سجل WAL لا يحتوي على wal_level = الحد الأدنى (Bruce Momjian)
يمكن أن يمنع هذا الشرط خوادم الاستعداد التي تمت ترقيتها من إعادة الاتصال.
إصلاح حساب pg_xlogdump لسجل WAL (Andres Freund)
في postgres_fdw ، قم بإعادة تأسيس الاتصالات بالخوادم البعيدة بعد ALTER SERVER أو ALTER USER MAPPING commands (Kyotaro Horiguchi)
يضمن ذلك تطبيق تغييرات الخيار التي تؤثر على معلمات الاتصال على الفور.
في postgres_fdw ، سمح بإلغاء أوامر التحكم في المعاملات البعيدة (Robert Haas، Rafia Sabih)
يسمح لنا هذا التغيير بالهروب بسرعة من انتظار خادم بعيد لا يستجيب في العديد من الحالات أكثر من ذي قبل.
زيادة MAX_SYSCACHE_CALLBACKS لتوفير مساحة أكبر للإضافات (Tom Lane)
دائما استخدام -FPIC ، وليس- fpic ، عند بناء المكتبات المشتركة مع دول مجلس التعاون الخليجي (توم لين)
هذا يدعم مكتبات الإضافات الأكبر على الأنظمة الأساسية حيث يصنع فرقًا.
في بنيات MSVC ، قم بالتعامل مع الحالة التي تكون فيها مكتبة openssl غير داخل دليل فرعي VC (أندرو دونستان)
في بنيات MSVC ، أضف المسار الصحيح لتضمين ملفات رأس libxml2 (أندرو دونستان)
يعمل هذا على إصلاح الحاجة السابقة لنقل الأشياء في عمليات تثبيت Windows القياسية لـ libxml2.
في بنيات MSVC ، التعرف على مكتبة Tcl باسم tcl86.lib (Noah Misch)
في بنيات MSVC ، تكريم إعدادات PROVE_FLAGS على سطر الأوامر vcregress.pl (أندرو دونستان)
ما هو الجديد في الإصدار 9.6.4:
مزيد من تقييد الرؤية لـ pg_user_mappings.umoptions ، لحماية كلمات المرور المخزنة كخيارات رسم المستخدم (Noah Misch)كان الإصلاح الخاص بـ CVE-2017-7486 غير صحيح: فقد سمح للمستخدم بمشاهدة الخيارات في تعيين المستخدم الخاص به ، حتى لو لم يكن لديه إذن USAGE على الخادم الخارجي المقترن. قد تتضمن هذه الخيارات كلمة مرور تم توفيرها بواسطة مالك الخادم بدلاً من المستخدم نفسه. بما أن information_schema.user_mapping_options لا تُظهر الخيارات في مثل هذه الحالات ، يجب ألا تكون pg_user_mappings كذلك. (CVE-2017-7547)
في حد ذاته ، سيعمل هذا التصحيح على إصلاح السلوك في قواعد البيانات التي تم إنشاؤها حديثًا فقط. إذا كنت ترغب في تطبيق هذا التغيير في قاعدة بيانات موجودة ، فستحتاج إلى القيام بما يلي:
أعد تشغيل مدير مكتب البريد بعد إضافة allow_system_table_mods = true إلى postgresql.conf. (في الإصدارات التي تدعم ALTER SYSTEM ، يمكنك استخدام ذلك لتغيير التكوين ، ولكنك ستحتاج إلى إعادة تشغيل.)
في كل قاعدة بيانات من الكتلة ، قم بتشغيل الأوامر التالية كخادم متميز:
SET search_path = pg_catalog؛
إنشاء أو استبدال عرض pg_user_mappings AS
تحديد
U.oid AS umid ،
S.oid AS srvid ،
S.srvname AS srvname ،U.umuser AS umuser ،
حالة عندما U.umuser = 0 ثم
'عامة'
آخر
A.rolname
END AS usename ،
حالة عند (U.umuser 0 و A.rolname = current_user
AND (pg_has_role (S.srvowner، 'USAGE')
أو has_server_privilege (S.oid، 'USAGE')))
OR (U.umuser = 0 AND pg_has_role (S.srvowner، 'USAGE'))
أو (SELECT rolsuper FROM pg_authid WHERE rolname = current_user)
ثم U.umoptions
ELSE NULL END AS umoptions
من pg_user_mapping U
LEFT JOIN pg_authid A ON (A.oid = U.umuser) JOIN
pg_foreign_server S ON (U.umserver = S.oid)؛
لا تنسَ تضمين قواعد البيانات template0 و template1 ، أو ستظل الثغرة موجودة في قواعد البيانات التي تقوم بإنشائها لاحقاً. لإصلاح template0 ، ستحتاج إلى جعله يقبل الاتصالات مؤقتًا. في PostgreSQL 9.5 والإصدارات الأحدث ، يمكنك استخدامه
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true؛
ثم بعد إصلاح template0 ، التراجع عن ذلك
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false
في الإصدارات السابقة ، استخدم بدلاً من ذلك
UPDATE pg_database SET datallowconn = true WHERE datname = 'template0'؛UPDATE pg_database SET datallowconn = false WHERE datname = 'template0'؛
وأخيرًا ، أزل إعداد تهيئة allow_system_table_mods ، ثم أعد تشغيل مدير مكتب البريد مرة أخرى.
عدم السماح بكلمات المرور الفارغة في جميع طرق المصادقة المستندة إلى كلمة المرور (Heikki Linnakangas)
يتجاهل libpq مواصفات كلمة المرور الفارغة ، ولا ينقلها إلى الخادم. لذا ، إذا تم تعيين كلمة مرور المستخدم على السلسلة الفارغة ، فمن المستحيل تسجيل الدخول باستخدام كلمة المرور هذه عبر psql أو عملاء آخرين يستخدمون libpq. قد يعتقد أحد المشرفين أن تعيين كلمة المرور فارغة يُعادل تعطيل تسجيل الدخول باستخدام كلمة المرور. ومع ذلك ، يمكن أن يكون تسجيل الدخول ممكنا مع عميل معدّل أو لا يستند إلى libpq ، حسب طريقة التوثيق التي تم تكوينها. على وجه الخصوص ، الطريقة الأكثر شيوعا ، md5 ، قبلت كلمات المرور الفارغة. قم بتغيير الخادم لرفض كلمات المرور الفارغة في جميع الحالات. (CVE-2017-7546)
إجراء فحص lo_put () لامتياز UPDATE على الكائن الكبير المستهدف (Tom Lane، Michael Paquier)
يجب أن تتطلب lo_put () بالتأكيد نفس الأذونات مثل lowrite () ، ولكن الشيك مفقود ، مما يسمح لأي مستخدم بتغيير البيانات في كائن كبير. (CVE-2017-7548)تصحيح الوثائق المتعلقة بعملية ترقية خوادم الاستعداد مع pg_upgrade (Bruce Momjian)
أوعزت الوثائق السابقة المستخدمين ببدء / إيقاف الخادم الأساسي بعد تشغيل pg_upgrade ولكن قبل مزامنة خوادم الاستعداد. هذا التسلسل غير آمن.
إصلاح التثبيت المتزامن لسلاسل تحديثات الصفوف (Alvaro Herrera)
إذا كانت هناك عدة جلسات في نفس الوقت تقفل سلسلة تحديث tuple مع أوضاع قفل غير ملتوية باستخدام لقطة قديمة ، وكلها تنجح ، فقد كان من الممكن أن يفشل البعض منها (وخلصت إلى أنه لا يوجد إصدار tuple مباشر) بسبب حالة السباق. كان لهذا عواقب مثل الفحوصات الأجنبية التي فشلت في رؤية مجموعة موجودة بالتأكيد ولكن يجري تحديثها بشكل متزامن.
إصلاح فساد البيانات المحتملة عند تجميد مجموعة بيانات يكون XMAX متعدد الوصلات مع عضو واحد مثير للاهتمام (Teodor Sigaev)
تجنب تجاوز عدد صحيح والتحطم الذي يحدث عند فرز أكثر من مليار تجمع في الذاكرة (سيرجي كوبوسوف)
في نظام التشغيل Windows ، أعد محاولة إنشاء العملية إذا فشلنا في حجز نطاق عناوين ذاكرتنا المشتركة في العملية الجديدة (Tom Lane، Amit Kapila)ومن المتوقع أن يؤدي هذا إلى إصلاح حالات فشل تشغيل الأطفال غير المتكررة والتي ربما تكون بسبب تداخل منتجات مكافحة الفيروسات.
إصلاح فساد احتمالي منخفض لجدول تجزئة قفل السجل المشترك في Windows builds (Thomas Munro، Tom Lane)
تجنب تسجيل الإغلاق النظيف لاتصال SSL كما لو كان إعادة اتصال (Michael Paquier)
منع إرسال تذاكر جلسة SSL للعملاء (توم لين)
يمنع هذا الإصلاح فشل إعادة الاتصال مع رمز SSL جانب العميل علم التذكرة.
إصلاح رمز لإعداد tcp_keepalives_idle على Solaris (توم لين)
إصلاح أداة تجميع الإحصائيات لتكريم رسائل الاستفسار التي يتم إصدارها بعد إيقاف تشغيل مدير مكتب البريد وإعادة التشغيل الفوري (توم لين)
تم تجاهل الاستفسارات الإحصائية التي صدرت في غضون نصف ثانية من اغلاق مكتب البريد السابق بشكل فعال.
تأكد من أن حجم المخزن المؤقت لاستلام جامع الإحصائيات لا يقل عن 100 كيلوبايت (توم لين)
هذا يقلل من خطر البيانات الإحصائية التي تم إسقاطها على المنصات القديمة التي يكون حجم المخزن المؤقت لتلقيها الافتراضي أقل من ذلك.
إصلاح الإنشاء المحتمل لشريحة WAL غير صالحة عند ترقية وضع الاستعداد فقط بعد أن يقوم بمعالجة سجل WALWAG_SWITCH (Andres Freund)إصلاح walsender للخروج على الفور عند إيقاف طلبات العميل (توم لين)
إصلاح معالجة SIGHUP و SIGUSR1 في عمليات walsender (Petr Jelinek، Andres Freund)
منع الفالس التي تسببها walsender خلال نقاط التفتيش اغلاق (اندريس فرويند ، مايكل Paquier)
إصلاح عمليات إعادة التوليد بطيئة دون داعٍ بسبب حالة السباق في مدير البريد (توم لين)
إصلاح تسرب التحويلات الفرعية الصغيرة التي تسربت إلى القرص أثناء فك التشفير المنطقي (Andres Freund)
هذا أدى إلى ملفات مؤقتة تستهلك مساحة القرص الزائد.
تقليل العمل المطلوب لبناء لقطات أثناء إنشاء فتحات فك تشفير منطقي (Andres Freund، Petr Jelinek)
كانت الخوارزمية السابقة مكلفة بشكل غير محدود على الخادم مع الكثير من المعاملات المفتوحة.
إصلاح حالة السباق التي قد تؤدي إلى تأخير إنشاء فتحات فك تشفير منطقي (Andres Freund، Petr Jelinek) إلى أجل غير مسمى
تقليل مقدار الحمل في معالجة أحداث إبطال syscache (Tom Lane)
هذا مفيد بشكل خاص لفك التشفير المنطقي ، والذي يؤدي إلى إبطال ذاكرة التخزين المؤقت بشكل متكرر.
إزالة إرشادية غير صحيحة مستخدمة في بعض الحالات لتقدير انتقاء الانضمام بناءً على وجود قيود على المفتاح الخارجي (David Rowley)في بعض الحالات التي يوجد فيها قيد مفتاح خارجي متعدد الأعمدة ولكنه لا يتطابق تمامًا مع بنية ربط الاستعلام ، استخدم المخطط تقديرًا إرشاديًا تبين أنه لا يعمل جيدًا على الإطلاق. عد إلى مثل هذه الحالات بالطريقة التي تم تقديرها قبل 9.6.
إصلاح الحالات التي يعين فيها INSERT أو UPDATE لأكثر من عنصر واحد في عمود يكون من نوع النطاق عبر المصفوفة (Tom Lane)
السماح باستخدام وظائف النافذة في SELECTs الفرعية الموجودة داخل وسيطات دالة التجميع (Tom Lane)
تأكد من فرض جملة "عرض التحقق" بشكل صحيح عندما يكون الجدول الأساسي جدولاً أجنبياً (Etsuro Fujita)
في السابق ، قد يتم دفع التحديث بالكامل للخادم الأجنبي ، ولكن لم يتم تسجيل الحاجة إلى التحقق من شروط العرض إذا كان الأمر كذلك.
نقل أنواع الصفيف autogenerated بعيدًا أثناء ALTER ... RENAME (Vik Fearing)
في السابق ، كنا نعيد تسمية نوع مصفوفة متضاربة متضاربة خارج الطريقة أثناء إنشاء CREATE ؛ هذا الإصلاح يمتد هذا السلوك لإعادة تسمية العمليات.
إصلاح مؤشر التعلق في ALTER TABLE عندما يكون هناك تعليق على قيد ينتمي إلى الجدول (David Rowley)قد تفشل إعادة تطبيق التعليق على القيد المعاد بناؤها مع رسالة خطأ غريبة ، أو حتى تعطل.
تأكد من أن ALTER USER ... SET يقبل كافة المتغيرات اللغوية التي يقوم ALTER ROLE ... SET بها (Peter Eisentraut)
اسمح لقيود CHECK الخاصة بطاولة أجنبية أن تكون في البداية NOT VALID (Amit Langote)
CREATE TABLE يسقط بصمت NOT محددات VALID لقيود CHECK ، مع التفكير في أن الجدول يجب أن يكون فارغًا حتى يمكن التحقق من القيد على الفور. ولكن هذا خطأ بالنسبة لـ CREATE FOREIGN TABLE ، حيث لا يوجد سبب يفترض أن الجدول الأساسي فارغ ، وحتى إذا لم يكن عملنا هو أن نقرر أن القيد يمكن التعامل معه على أنه صالح من الآن فصاعدًا. تخطي هذا "التحسين" للجداول الأجنبية.
تحديث معلومات التبعية بشكل صحيح عند تغيير وسيطة دالة نوع البيانات I / O أو نوع الإرجاع من معتم إلى النوع الصحيح (Heikki Linnakangas)
يقوم CREATE TYPE بتحديث وظائف I / O المعلنة في هذا النمط القديم ، ولكنه نسي أن يسجل تبعية على النوع ، مما يسمح لـ DROP TYPE اللاحق بمغادرة تعاريف الوظيفة المكسورة.
السماح بالتوازي في خطة طلب البحث عند نسخ COPY من نتيجة الاستعلام (Andres Freund)تقليل استخدام الذاكرة عندما تقوم ANALYZE بمعالجة عمود tsvector (Heikki Linnakangas)
إصلاح فقدان الدقة غير الضرورية والتقريب المتقلب عند ضرب أو تقسيم قيم المال بواسطة الأعداد الصحيحة أو العائمة (توم لين)
تشديد الشيكات للمسافات البيضاء في الوظائف التي تقوم بتعريف المعرفات ، مثل regprocedurein () (توم لين)
اعتمادا على اللغة السائدة ، يمكن لهذه الوظائف أن تفسر أجزاء شظايا متعددة البايتات كمساحة بيضاء.
استخدم # تعريف الرموز ذات الصلة من بيرل أثناء تجميع PL / Perl (Ashutosh Sharma، Tom Lane)
يتجنب هذا مشاكل قابلية النقل ، التي تظهر عادة على أنها عدم تطابق "تأكيد الاتصال" أثناء تحميل المكتبة ، عند العمل مع إصدارات بيرل الحديثة.
في libpq ، قم بإعادة تعيين حالة مصادقة GSS / SASL و SSPI بشكل صحيح بعد محاولة اتصال فاشلة (Michael Paquier)
يعني الفشل في القيام بذلك أنه عند الرجوع من SSL إلى اتصالات غير SSL ، يؤدي فشل GSS / SASL في محاولة SSL دائمًا إلى فشل محاولة عدم SSL. لم تفشل SSPI ، لكنه تسرب الذاكرة.
في psql ، قم بإصلاح الفشل عند انتهاء COPY FROM STDIN مع إشارة EOF بلوحة المفاتيح ومن ثم تتم محاولة COPY FROM STDIN (Thomas Munro)وقد لوحظ سوء السلوك هذا على الأنظمة الأساسية المشتقة من BSD (بما في ذلك macOS) ، ولكن ليس على معظم الأنظمة الأخرى.
إصلاح pg_dump و pg_restore لإصدار أوامر REFRESH MATERIALIZED VIEW الماضي (توم لين)
هذا يمنع الأخطاء أثناء عملية التفريغ / الاستعادة عندما يشير العرض المادي إلى الجداول التي يملكها مستخدم مختلف.
تحسين تقارير pg_dump / pg_restore عن حالات الخطأ التي تنشأ في zlib (فلاديمير كونشيكوف ، ألفارو هيريرا)
إصلاح pg_dump مع الخيار -clean لإسقاط مشغلات الحدث كما هو متوقع (توم لين)
كما أنه يعيّن الآن بشكل صحيح ملكية مشغلات الحدث ؛ قبل ذلك ، تمت استعادتها على أنها مملوكة من قبل المستخدم المتميز الذي يشغل النص البرمجي للاستعادة.
إصلاح pg_dump مع خيار -clean لعدم الفشل عند عدم وجود المخطط العام (Stephen Frost)
إصلاح pg_dump لعدم إصدار SQL غير صالحة لفئة مشغل فارغة (Daniel Gustafsson)
إصلاح إخراج pg_dump إلى stdout على ويندوز (كونتال غوش)
سيحتوي ملف تفريغ النص العادي المضغوط المكتوب على stdout على بيانات تالفة بسبب فشل وضع واصف الملف في الوضع الثنائي.
إصلاح pg_get_ruledef () لطباعة الإخراج الصحيح لقاعدة ON SELECT لطريقة العرض التي تمت إعادة تسمية أعمدتها (Tom Lane)في بعض الحالات الزاوية ، يعتمد pg_dump على pg_get_ruledef () إلى طرق عرض التفريغ ، بحيث يمكن أن يؤدي هذا الخطأ إلى فشل تفريغ / إعادة تحميل.
إصلاح إغراق الصلات الخارجية ذات القيود الفارغة ، مثل نتيجة الانضمام إلى اليسار الطبيعي دون وجود أعمدة مشتركة (توم لين)
إصلاح إغراق تعبيرات الدالة في جملة FROM في الحالات التي لا يتم فيها تعبير التعبير إلى شيء يشبه استدعاء دالة (توم لين)
إصلاح إخراج pg_basebackup إلى stdout على Windows (Haribabu Kommi)
نسخة احتياطية مكتوبة إلى stdout قد تحتوي على بيانات تالفة بسبب الفشل في وضع واصف الملف في الوضع الثنائي.
إصلاح pg_rewind للتعامل بشكل صحيح مع الملفات التي تتجاوز 2 جيجابايت (Kuntal Ghosh، Michael Paquier)
في العادة ، لن تظهر مثل هذه الملفات في أدلة بيانات PostgreSQL ، ولكنها قد تكون موجودة في بعض الحالات.
إصلاح pg_upgrade للتأكد من أن سجل WAL لا يحتوي على wal_level = الحد الأدنى (Bruce Momjian)
يمكن أن يمنع هذا الشرط خوادم الاستعداد التي تمت ترقيتها من إعادة الاتصال.
إصلاح حساب pg_xlogdump لسجل WAL (Andres Freund)
في postgres_fdw ، قم بإعادة تأسيس الاتصالات بالخوادم البعيدة بعد ALTER SERVER أو ALTER USER MAPPING commands (Kyotaro Horiguchi)يضمن ذلك تطبيق تغييرات الخيار التي تؤثر على معلمات الاتصال على الفور.
في postgres_fdw ، سمح بإلغاء أوامر التحكم في المعاملات البعيدة (Robert Haas، Rafia Sabih)
يسمح لنا هذا التغيير بالهروب بسرعة من انتظار خادم بعيد لا يستجيب في العديد من الحالات أكثر من ذي قبل.
زيادة MAX_SYSCACHE_CALLBACKS لتوفير مساحة أكبر للإضافات (Tom Lane)
دائما استخدام -FPIC ، وليس- fpic ، عند بناء المكتبات المشتركة مع دول مجلس التعاون الخليجي (توم لين)
هذا يدعم مكتبات الإضافات الأكبر على الأنظمة الأساسية حيث يصنع فرقًا.
في بنيات MSVC ، قم بالتعامل مع الحالة التي تكون فيها مكتبة openssl غير داخل دليل فرعي VC (أندرو دونستان)
في بنيات MSVC ، أضف المسار الصحيح لتضمين ملفات رأس libxml2 (أندرو دونستان)
يعمل هذا على إصلاح الحاجة السابقة لنقل الأشياء في عمليات تثبيت Windows القياسية لـ libxml2.
في بنيات MSVC ، التعرف على مكتبة Tcl باسم tcl86.lib (Noah Misch)
في بنيات MSVC ، تكريم إعدادات PROVE_FLAGS على سطر الأوامر vcregress.pl (أندرو دونستان)
لم يتم العثور على التعليقات