Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 24/07/2017 13:53:00
- adrien1
- Membre
suppression de valeur d'énum - table corrompue
Bonjour à tous,
J'ai besoin de vos connaissances concernant une problématique qui permet de corrompre une table :
- la suppression manuelle d'une valeur d'énum dans le catalogue pg_enum avec une requête de cette sorte :
delete from pg_enum where enumtypid = 1135484 and enumsortorder = 3;
select * from mytable;
ERROR: invalid internal value for enum: 1135490
Ce que je sais :
- Il faut absoluement éviter de modifier manuellement un cataolgue
- Les colonnes d'un type enum stocke en réalité l'oid de du record associé du catalogue pg_énum ce qui fait que lors d'une supression d'une valeur d'énum encore utilisé on obtient une erreur et lorsque on rajoute la valeur d'énum dans pg_enum on obtient également une erreur.
- Lorsque oid est pair les valeurs sont garanties triées.
- Lorsque oid est impair les valeurs ne sont pas garanties triées.
Ce que je voudrais savoir :
- Dans quel cas pourrais-je avoir un oid impair dans pg_enum (car je pense que les énum sont tous triés)?
- Qu'est ce qu'il y a lieu de faire pour récupérer ma table corrompue par une suppression manuelle (delete) dans pg_enum?
- un autre insert quelconque?
- modification des fichiers binaires des données de la table?
- autre chose?
Merci pour vos réponses !
Dernière modification par adrien1 (24/07/2017 13:53:43)
Hors ligne
#2 24/07/2017 14:07:54
- gleu
- Administrateur
Re : suppression de valeur d'énum - table corrompue
Insérer la ligne ne suffira pas car vous ne pourrez pas indiquer le bon numéro d'OID pour cette nouvelle ligne dans pg_enum. La seule solution que je vois actuellement, c'est de reprendre la dernière sauvegarde.
Guillaume.
Hors ligne
#3 25/07/2017 14:26:02
- adrien1
- Membre
Re : suppression de valeur d'énum - table corrompue
Merci pour ta réponse gleu !
une idée concernant cette question :
- Dans quel cas pourrais-je avoir un oid impair dans pg_enum (car je pense que les énum sont tous triés)?
Hors ligne
#4 25/07/2017 21:30:26
- gleu
- Administrateur
Re : suppression de valeur d'énum - table corrompue
Je ne sais pas.
Guillaume.
Hors ligne
#5 26/07/2017 13:10:51
- rjuju
- Administrateur
Re : suppression de valeur d'énum - table corrompue
Je n'ai pas regardé le code, mais après un test rapide vous obtenez un oid impair en ajoutant une valeur dans l'enum après coup (par exemple ALTER TYPE ... ADD VALUE '...' AFTER '...')
Julien.
https://rjuju.github.io/
Hors ligne
Pages : 1