TOAST، وفتحات النسخ المتماثل، والمنشورات، وتغييرات المخطط، وتعيينات الأنواع. وتنطبق المعلومات الواردة هناك أيضًا على عمليات الترحيل إلى ClickHouse Managed Postgres.
أواجه خطأ “invalid input value for enum” أثناء النسخ المتماثل
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 الهدف.