PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 29/05/2020 17:23:52

pitpoule
Membre

Contrainte UNIQUE mais doublon dans des tables

Bonjour,

Suite à une bascule d'une base standby en primaire, nous nous retrouvons avec des doublons sur une table malgré une contrainte UNIQUE. La bascule s'est passé normalement.
Nous sommes sur une version pg 9.6.18. Le seul fait notable est que nous avons en même temps upgradé d'une version 9.6.15 en 9.6.18

Sur tous les doublons, nous avons une ligne avec une date d'avant la bascule et une autre d'après (nous avons des colonnes d'horodatage).

Je ne comprends absolument pas comment s'est possible.

Merci pour votre aide

Hors ligne

#2 29/05/2020 21:28:42

gleu
Administrateur

Re : Contrainte UNIQUE mais doublon dans des tables

Quel est la définition de la table et des contraintes ? Quel système d'exploitation pour le serveur primaire et le serveur secondaire ?


Guillaume.

Hors ligne

#3 30/05/2020 12:41:26

dverite
Membre

Re : Contrainte UNIQUE mais doublon dans des tables

Je ne comprends absolument pas comment s'est possible.

Pour les colonnes de type texte, Il suffit d'avoir le COLLATE basé une locale qui s'appelle pareil mais qui ne trie pas pareil entre le primaire et le secondaire. C'est pourquoi le primaire et le secondaire devraient avoir exactement le même OS dans la même version.

Sur linux il y a une MAJ majeure récente de la libc qui a accru le risque ces derniers temps, cf https://blog-postgresql.verite.pro/2018 … grade.html
quand on ne réindexe pas suite à un upgrade, ou quand le couple (primaire,secondaire) a des versions décalées de la libc.

Hors ligne

#4 01/06/2020 12:12:28

pitpoule
Membre

Re : Contrainte UNIQUE mais doublon dans des tables

dverite a écrit :

Je ne comprends absolument pas comment s'est possible.

Pour les colonnes de type texte, Il suffit d'avoir le COLLATE basé une locale qui s'appelle pareil mais qui ne trie pas pareil entre le primaire et le secondaire. C'est pourquoi le primaire et le secondaire devraient avoir exactement le même OS dans la même version.

Sur linux il y a une MAJ majeure récente de la libc qui a accru le risque ces derniers temps, cf https://blog-postgresql.verite.pro/2018 … grade.html
quand on ne réindexe pas suite à un upgrade, ou quand le couple (primaire,secondaire) a des versions décalées de la libc.

En effet, une des colonnes de la clé unique est un champ text.

Hors ligne

#5 01/06/2020 16:04:14

pitpoule
Membre

Re : Contrainte UNIQUE mais doublon dans des tables

dverite,

Je pense, en effet, que l'on est dans la cas de figure impliquant la libc

Ancien serveur primaire:
- Debian 8.11
- libc 2.19

Nouveau serveur primaire, après bascule:
- Debian 10.4
- libc 2.28

En dehors du problème de la contrainte UNIQUE, est ce que qu'il faut reconstruire tous les index basés sur une colonne text ?

Hors ligne

#6 01/06/2020 17:30:27

rjuju
Administrateur

Re : Contrainte UNIQUE mais doublon dans des tables

Oui, tous les index portant sur des colonnes ayant un type avec une collation sont potentiellement corrompus.  Cela vaut pour les colonnes de l'index mais aussi pour les colonnes utilisées dans des expressions.

Hors ligne

#7 01/06/2020 22:53:14

pitpoule
Membre

Re : Contrainte UNIQUE mais doublon dans des tables

rjuju a écrit :

Cela vaut pour les colonnes de l'index mais aussi pour les colonnes utilisées dans des expressions.

Que je comprenne bien , les expressions dans les index ?

Hors ligne

#8 02/06/2020 07:27:29

rjuju
Administrateur

Re : Contrainte UNIQUE mais doublon dans des tables

Tout à fait, par exemple:

CREATE INDEX ON unetable(int_colonne) WHERE texte_colonne > 'meh'

serait potentiellement corrompu.

Hors ligne

#9 02/06/2020 15:47:15

pitpoule
Membre

Re : Contrainte UNIQUE mais doublon dans des tables

En tout cas , merci à vous, je comprends mieux ce qu'il se passe et je vais pouvoir agir.

Hors ligne

Pied de page des forums