مرحباً بالجميع، بينما أبحث في إضافة امتداد “pglogical” إلى قاعدة بيانات Postgres الخاصة بنا، ألاحظ بعض التناقضات بين إصدار Postgres المثبت والإصدار المشار إليه في ملفات قالب وتكوين Postgres.
إصدار Postgres المثبت حاليًا هو v16.2 (تم إصداره في فبراير 2024)، ولكن ملفات التكوين كلها لا تزال مرتبطة بالإصدار v13، على سبيل المثال:
root@ip-172-31-62-223-app:/var/www/discourse# sudo -u postgres psql discourse
psql (16.2 (Debian 16.2-1.pgdg110+2), server 13.14 (Debian 13.14-1.pgdg110+2))
Type "help" for help.
discourse=# SHOW config_file;
config_file
-----------------------------------------
/etc/postgresql/13/main/postgresql.conf
(1 row)
أو ملف postgres.template، الذي يصل فقط إلى الإصدار v13.
هذه مشكلة بالنسبة لي حاليًا فقط لأن مكتبة pglogical موجودة في مجلدات v16، ولكن ليس في مجلدات v13. لقد حاولت إنشاء روابط رمزية باستخدام
for i in $(ls /usr/share/postgresql/16/extension/pglogical*); do ln -s $i /usr/share/postgresql/13/extension/$(basename $i); done
ln -s /usr/lib/postgresql/16/lib/pglogical.so /usr/lib/postgresql/13/lib/
ولكن هذا يؤدي فقط إلى هذا الخطأ:
> FATAL: could not load library "/usr/lib/postgresql/13/lib/pglogical.so":/usr/lib/postgresql/13/lib/pglogical.so: undefined symbol: shmem_request_hook
لذلك، فإن ملفات المكتبة ليست بديلاً متطابقًا بين إصدارات Postgres المختلفة.
في النهاية، يبدو أن هناك فجوة بين إصدار Postgres المثبت والإصدار الذي يعتقد مشغل Docker أنه يقوم ببنائه.
هدفي النهائي هنا هو تثبيت pglogical، وسيكون من المثالي العثور على حل يمكن تكراره عند إعادة بناء الحاوية (أي، ملفات أو أسطر يمكن إضافتها بسهولة إلى ملفات القالب). أنا بالتأكيد قادر على القيام بالمزيد من أعمال DevOps اللازمة (حيث إنها متطلب لمؤسستي)، ولكني فقط أتساءل عما إذا كان الآخرون قد واجهوا هذه الفجوة وماذا فعلوا حيال ذلك.
شكراً للقراءة!