TOAST، وفتحات النسخ المتماثل، والمنشورات، وتغييرات المخطط، وتعيينات الأنواع. وتنطبق المعلومات الواردة هناك أيضًا على عمليات الترحيل إلى ClickHouse Managed Postgres.
أواجه خطأ “invalid input value for enum” أثناء النسخ المتماثل
يحدث هذا الخطأ عندما يحتوي Postgres المصدر على قيمة enum غير موجودة في ClickHouse Managed Postgres الهدف. لا ينقل النسخ المتماثل المنطقي أوامرALTER TYPE ... ADD VALUE تلقائيًا، لذلك فإن أي قيم enum جديدة تُضاف إلى المصدر بعد الإعداد الأولي للمخطط ستؤدي إلى فشل عمليات الإدراج على الهدف.
لإصلاح ذلك، أضف القيمة المفقودة إلى نوع enum في Postgres الهدف:
your_enum_type باسم نوع enum الخاص بك، و'new_value' بالقيمة المفقودة الواردة في رسالة الخطأ.
يظهر لي خطأ انتهاك قيد فريد أو قيد تحقق أثناء النسخ المتماثل
قد تحدث انتهاكات للقيود أثناء النسخ المتماثل المنطقي عندما يؤدي ترتيب النسخ المتماثل إلى تعارض مع قيد موجود على الهدف.- القيود الفريدة: نطبّق التغييرات كعمليات
MERGE/UPSERTمجمّعة تكتب أحدث قيمة لكل مفتاح أساسي، لذا قد لا يتوافق ترتيب العمليات لمفتاح معيّن مع الترتيب الذي يتوقعه الفهرس الفريد. وقد يؤدي ذلك مؤقتًا إلى انتهاك قيدUNIQUEضمن المعاملة، رغم استيفاء القيد عند اكتمالMERGE. لا يستطيع Postgres تأجيل التحقق من الفهارس الفريدة كما يؤجل التحقق من المفاتيح الخارجية، لذا لا يمكن تأجيل هذا التحقق إلى نهاية المعاملة. لا يؤثر ذلك في اتساق البيانات: إذ تُحدَّد هوية الصف بالمفتاح الأساسي، ويعتمد منطقMERGEعلى المفتاح الأساسي نفسه. - قيود التحقق: قد يكون قيد التحقق على الهدف أكثر صرامة من المصدر، أو قد لا تستوفي حالة وسيطة أثناء تنفيذ
MERGEمجمّع هذا القيد، رغم أن الحالة النهائية تستوفيه. وكما هو الحال مع القيود الفريدة، لا يؤثر ذلك في اتساق البيانات، إذ يعتمدMERGEعلى المفتاح الأساسي الذي يحدد هوية الصف.
تظهر رسالة الخطأ “cannot insert a non-DEFAULT value into column” أثناء النسخ المتماثل
يحدث هذا الخطأ عندما يُعرَّف عمود في الهدف — عادةً المفتاح الأساسي — بأنهGENERATED ALWAYS AS IDENTITY. ينقل النسخ المتماثل المنطقي القيم الصريحة من المصدر، لكن عمود GENERATED ALWAYS يرفض أي قيمة غير DEFAULT، لذا تفشل عمليات الإدراج بالرسالة التالية:
GENERATED BY DEFAULT AS IDENTITY:
GENERATED BY DEFAULT AS IDENTITY (أو عمود serial/bigserial) يُنشئ القيم تلقائيًا عند عدم تقديم قيمة، لكنه بخلاف GENERATED ALWAYS يقبل أيضًا القيم الصريحة المُنسخة من المصدر.
يظهر لي خطأ “الامتداد غير متاح” أثناء الترحيل
يحدث هذا الخطأ أثناء الترحيل الآلي للمخطط (pg_dump) عندما يعتمد المخطط المصدر على امتداد Postgres غير مثبّت أو غير متاح في Managed Postgres الهدف. ويظهر بإحدى الصيغ التالية:
your_extension باسم الامتداد المذكور في رسالة الخطأ.
لحل هذه المشكلة، يمكنك:
- إعادة إنشاء الـ pipe باستخدام وضع تفريغ المخطط اليدوي، لتتمكن من تعديل المخطط وإزالة التبعية على الامتداد غير المدعوم أو استبدالها، أو
- فتح تذكرة دعم لتمكين الامتداد على Managed Postgres الهدف.