TOAST, les slots de réplication, les publications, les changements de schéma et les correspondances de types de données — sont abordées dans la FAQ ClickPipes for Postgres. Les informations qui y figurent s’appliquent également aux migrations vers ClickHouse Managed Postgres.
Je rencontre une erreur “invalid input value for enum” pendant la réplication
Cette erreur se produit lorsque le Postgres source contient une valeur enum qui n’existe pas dans le ClickHouse Managed Postgres cible. La réplication logique ne propage pas automatiquement les commandesALTER TYPE ... ADD VALUE ; par conséquent, les nouvelles valeurs enum ajoutées à la source après la configuration initiale du schéma entraîneront l’échec des insertions sur la cible.
Pour corriger ce problème, ajoutez la valeur manquante au type enum sur le Postgres cible :
your_enum_type par le nom de votre type enum et 'new_value' par la valeur manquante indiquée dans le message d’erreur.
Une erreur de violation de contrainte d’unicité ou de vérification survient pendant la réplication
Des violations de contraintes peuvent survenir lors de la réplication logique lorsque l’ordre de réplication entre en conflit avec une contrainte existante sur la cible.- Contraintes d’unicité : Nous appliquons les modifications sous forme d’opérations
MERGE/UPSERTpar lots, qui écrivent la valeur la plus récente pour chaque clé primaire. L’ordre des opérations pour une clé donnée peut donc ne pas correspondre à celui attendu par l’index unique. Cela peut entraîner temporairement une violation d’une contrainteUNIQUEau sein de la transaction, même si la contrainte est respectée une fois leMERGEterminé. Postgres ne peut pas différer les vérifications d’index uniques comme il le fait pour les clés étrangères. Il n’est donc pas possible de reporter la vérification à la fin de la transaction. Cela n’affecte pas la cohérence des données : l’identité des lignes est définie par la clé primaire, et la logique duMERGErepose sur cette même clé primaire. - Contraintes de vérification : Une contrainte de vérification sur la cible peut être plus stricte que sur la source, ou un état intermédiaire lors d’un
MERGEpar lots peut ne pas satisfaire la contrainte, même si l’état final la respecte. Comme pour les contraintes d’unicité, cela n’affecte pas la cohérence des données, car leMERGErepose sur la clé primaire qui définit l’identité des lignes.
Une erreur “cannot insert a non-DEFAULT value into column” se produit lors de la réplication
Cette erreur se produit lorsqu’une colonne de la cible — généralement la clé primaire — est définie commeGENERATED ALWAYS AS IDENTITY. La réplication logique transmet les valeurs explicites de la source, mais une colonne GENERATED ALWAYS rejette toute valeur autre que DEFAULT ; les insertions échouent donc avec :
GENERATED BY DEFAULT AS IDENTITY :
GENERATED BY DEFAULT AS IDENTITY (ou une colonne serial/bigserial) génère toujours automatiquement des valeurs lorsqu’aucune n’est fournie, mais contrairement à GENERATED ALWAYS, accepte également les valeurs explicites répliquées depuis la source.
Une erreur « extension is not available » s’affiche lors de la migration
Cette erreur se produit lors de la migration automatisée du schéma (pg_dump) lorsque le schéma source dépend d’une extension Postgres qui n’est pas installée ou disponible sur le Managed Postgres cible. Elle se présente sous l’une des formes suivantes :
your_extension par l’extension indiquée dans votre message d’erreur.
Pour résoudre ce problème, vous pouvez :
- recréer le pipe en utilisant le mode Manuel de dump du schéma, afin d’ajuster le schéma pour supprimer ou remplacer la dépendance à l’extension non prise en charge ; ou
- ouvrir un ticket auprès du Support pour faire activer l’extension sur le Managed Postgres cible.