تحديث إصدار PostgreSQL ، أو كيف لا تسقط قاعدة البيانات عند التحديث؟

قررنا مشاركة مذكرة (قائمة مرجعية) لفريق ترقية PostgreSQL. في ذلك ، اتخذنا الميزات المقدمة في إصدار وثائق PostgreSQL الرسمية كأساس ، وأجرينا تحليلًا لمشكلات التوافق ومن يجب أن ينتبه إلى الوظيفة المحدثة.





اسمي Alexander Kotsyuruba ، أدير تطوير الخدمات الداخلية في DomClick.ru.



المقالة مقسمة إلى أجزاء مع العناوين. يشير كل عنوان إلى ترقية PostgreSQL من إصدار إلى آخر. في كل فصل ، أبرزنا:



  • خاصية
  • احتمال عدم توافق المخاطر

    • تعطيل التطبيق
    • انخفاض في الأداء
  • من الذي تبحث عنه عند التحديث

    • مدير النظام
    • مطور
  • تعليق


لذا ، لنبدأ.



طرق التحديث



  • pg_upgradeليست الطريقة الأكثر موثوقية لتحديث PostreSQL. على سبيل المثال ، قد تحصل على خطأ عند استخدام REINDEX من إصدار سابق من PostgreSQL.
  • logical replication — , downtime . , logical replication 10. pglogical ( 2ndquadrant), 9.4 12. , PostgreSQL<10.0, .
  • pg_dumpall — . — downtime.
  • pg_dumpall --globals-only pg_dump --create. , , , PostgreSQL.


PostgreSQL 9.5 -> 9.6



to_char() ( )



, to_char('-4 years'::interval, 'YY') -04, -4.
- to_char() , .
extract() ( )



extract() «», . infinity -infinity , (, year, epoch), NULL (, day, hour). .
extract() c , .
pg_stat_activity , ( , )



, . pg_stat_activity . . waiting wait_event_type wait_event.
- . .
, email host ( )



, , tsvector, .
, , . PostgreSQL . pg_dump, . .. pg_upgrade.
CREATEUSER/NOCREATEUSER CREATE ROLE ( )



CREATEUSER SUPERUSER . , ( ), CREATEROLE. , , .
, 9.6.
, pg_, ( )



. , initdb.
psql -c --no-psqlrc ( , )



--no-psqlrc ( -X). psql.
psql.
pg_restore -t, , ( )
NextXID pg_controldata ( , )



--ID- : . / LSN, .
, , ( )



, . , ( pg_upgrade), ALTER EXTENSION UPDATE ( ).
pg_upgrade extension. pg_upgrade




MVCC ( )



, , . , , , . old_snapshot_threshold , MVCC . . , , , , .


يحل مشكلة "انتفاخ" قاعدة البيانات بسبب "فتح صفقة وذهب في إجازة" ؛ تحديثات الطفح الجلدي التي تستغرق ساعات ؛ طويلة selectعلى السيد والعبد. هذا أحد خيارين ، بفضلهما سيكون من الممكن حل المشكلة ، نظرًا لأنه لا يمكنهم إعادة تحميل الطلبات الطويلة من السيد إلى العبد.



PostgreSQL 9.6 -> 10.0



خاصية المخاطرة لمن الاهتمام تعليق
بعد الترقية من pg_upgradeأي إصدار رئيسي سابق من PostgreSQL ، يجب إعادة بناء فهارس التجزئة (Mithun Sai و Robert Haas و Amit Kapila)



يرجع هذا المطلب إلى التحسينات الكبيرة في آلية فهارس التجزئة. لتسهيل مهمة إعادة الفهرسة ، pg_upgradeسيتم إنشاء برنامج نصي مساعد.
تعطيل التطبيق مدير النظام حجة أخرى ضد pg_upgrade
pg_xlog pg_wal, pg_clog pg_xact ( )



— , , , . .
SQL, «xlog» «wal» ( )



, pg_switch_xlog() pg_switch_wal(), pg_receivexlogpg_receivewal, --xlogdir--waldir. pg_xlog ; «xlog» .
WAL location lsn ( )



.

pg_basebackup WAL, ( )



pg_basebackup -X/--wal-method stream. none. pg_basebackup -x ( -X fetch).
pg_hba.conf ( )



replication . , , all. - replication. , .
pg_ctl ( )



pg_ctl -w.
log_directory pg_log log ( )
ssl_dh_params_file OpenSSL DH ( )



dh1024.pem. , dh1024.pem ; , DH.
DH, DH- OpenSSL, 2048 ( )



DH 1024 2048 , DH . SSL, Java Runtime Environment 6, DH 1024 , , SSL. , DH 1024 .
( )



password_encryption off plain. UNENCRYPTED CREATE/ALTER USER ... PASSWORD. --unencrypted createuser. , , . password_encryption md5.
min_parallel_table_scan_size min_parallel_index_scan_size ( , )



min_parallel_relation_size, .
«» .
shared_preload_libraries ( )



, SQL- .
sql_inheritance ( )



, , . SQL , , PostgreSQL 7.1.
/ ( )



configure --disable-integer-datetimes . , PostgreSQL 8.3.
: rpm, deb, etc.
- 1.0 ( )



PostgreSQL 6.3.
contrib/tsearch2 ( )



, PostgreSQL 8.3.
createlang droplang ( )



PostgreSQL 9.1. CREATE EXTENSION DROP EXTENSION.
, , SELECT ( )



, , SELECT, , LATERAL FROM. , . , NULL. , , , . , , , CASE COALESCE.
set-returning function (.. , ) FROM. , - SELECT. - , . .
UPDATE ... SET (_) = _ ( )



_ ROW; . _ , _ ROW, , . _.* _ , _.
هذه هي القواعد المعتادة ل row_constructor. من غير المعتاد استخدامه UPDATEبهذه الطريقة. من الناحية العملية ، لم أر مثل هذه الحالات ، على الرغم من ظهور هذه البنية في الوثائق في PostgreSQL 8.2. في الإصدار 10 ، يبدو أن بناء الجملة هذا قد تم إحضاره إلى معيار مستخدم في إصدارات أخرى من PostgreSQL. بغض النظر عن مدى غرابة الأمر ، فمن الممكن إدخال مثل هذا الجزء من التعليمات البرمجية.


ميزات مثيرة للاهتمام



نشر / اشتراك النسخ المتماثل المنطقي


ميزة مفيدة يمكن استخدامها للترقية بأقل وقت تعطل.



تقسيم الجدول التعريفي


بناء الجملة التعريفي الجديد يبسط تقسيم الجدول.



تحسين موازاة الاستعلام


في البداية ، قدم 9.6 دعمًا للتنفيذ المتوازي للاستعلامات الكبيرة. لكنها تتعلق فقط بعمليات المسح والضم والتجميعات.



في 10.0 ، ظهرت إمكانية التنفيذ الموازي:



  • مسح فهرس B-Tree
  • مسح نقطي
  • دمج الصلات
  • الاستعلامات الفرعية غير المرتبطة


أقوى حماية بكلمة مرور باستخدام SCRAM-SHA-256


قد يكون غير متوافق مع بعض مكتبات اتصال PostgreSQL غير القياسية (وليس libpq).



PostgreSQL 10.0 -> 11.0



خاصية المخاطرة لمن الاهتمام تعليق
المعالجة الصحيحة من العبارات مع المسارات النسبية في xmltable()، xpath()وغيرها من المهام التي تعمل مع XML (ماركوس Winand)



وفقا لمعيار SQL، ينبغي النظر في المسارات النسبية من الوثيقة عقدة XML، وليس من عقدة الجذر، وهذه الوظائف استخدمت للقيام به.
SQL. , XML. , .
pg_dump , ( )



, GRANT/REVOKE ALTER DATABASE SET, pg_dumpall. pg_dump --create pg_restore --create . pg_dumpall -g , . pg_dumpall ( -g) .



pg_dump pg_restore --create / ; .



pg_dumpall , , , . CREATE DATABASE , .



pg_dumpall --clean postgres template1, , .
. , .. . . , pg_dump/pg_restore --create . , , .
( , )



, .
adminpack pg_file_read(), pg_file_length() pg_logfile_rotate() ( )



. adminpack , ALTER EXTENSION ... UPDATE.
replacement_sort_tuples ( )



, .




text ^@ text SP-GiST ( )



LIKE '%' btree, .


البحث بالبادئة شائع جدا. لهذا ، أضفنا عامل تشغيل خاص مع دعم الفهارس الخاصة. والأمر الأكثر إثارة للاهتمام ، أن الوثائق الرسمية لا تذكر كلمة واحدة عن هذا المشغل. بدلاً من ذلك ، starts_withتم ذكر وظيفة - وظيفة داخلية يعتمد عليها هذا المشغل ، لكن استخدامها لا يوفر تسريعًا باستخدام فهرس.



اختزال التعبير = إلى تعبير IS NOT NULLحيث يكونا متكافئين (Tom Lane)



يؤدي ذلك إلى تحسين درجة الانتقائية.


ومن الغريب أننا التقينا بهذا التصميم في الممارسة العملية. على ما يبدو ، مثل هذه الحالات ليست شائعة.



PostgreSQL 11.0 -> 12.0



خاصية المخاطرة لمن الاهتمام تعليق
substring(), SQL, , «» ( )



, , , ; , %#"aa*#"% , a.
, , SQL. - substring() , , . , .
recovery.conf postgresql.conf ( , , -, )



recovery.conf , , . recovery.signal standby.signal. trigger_file promote_trigger_file, standby_mode .
recovery_target* ( )



, recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time recovery_target_xid. , . , , .
( )



recovery_target_timeline latest. current.
pg_verify_checksums pg_checksums ( )
pg_restore -f — ( )



, , .
\pset format psql ( )



, , \pset format a aligned; asciidoc, .
\pset psql. , , psql \pset.
btree 8 ( )



REINDEX , pg_upgrade, .
. , . , . pg_upgrade.
( )



, dynamic_shared_memory_type none.
(CTE), . , , , , . 12- CTE . , , , . , .



, pg_stat_statments . , template1.




btree ( , )



/ , , . .



, pg_upgrade.


حجة أخرى ليست في صالح pg_upgrade.



الخاتمة



هذه القائمة المرجعية هي مقتطف من موارد PostgreSQL الرسمية. في الممارسة العملية ، اعتمادًا على مناهج التطوير ، قد تختلف أهمية توافق معين بالنسبة لك. سأكون سعيدًا إذا كانت المقالة ستنقذ شخصًا من فقدان البيانات أو تقلل من تكاليف العمالة لتحديث PostgreSQL.



PS



بفضل Oleg Samoilov (splarv) للمساعدة في تحضير المقال.



All Articles