Problème lors de la tentative de conversion d'un type de données de colonne dans pgAdmin de varchar en entier (état SQL: 22P02)

Aug 16 2020

J'essaie simplement de convertir une colonne avec character varyingle type de données integeren exécutant ce bit de script Postgres:

ALTER TABLE tbl.test ALTER COLUMN "XX" TYPE integer USING ("XX"::integer);

et j'obtiens cette erreur:

ERREUR: syntaxe d'entrée non valide pour l'entier: "XX" état SQL: 22P02

Quelqu'un peut-il m'aider à résoudre ce problème, s'il vous plaît?

Réponses

3 MikeOrganek Aug 16 2020 at 12:21

Sur la base de l'erreur que vous obtenez, il semble que vous ayez des valeurs XXqui ne peuvent pas être converties en fichier integer. Vous devrez corriger ces valeurs avant d'émettre le alter table.

Trouvez vos valeurs incorrectes avec cette requête:

select "XX" from tbl.test where "XX" !~ '^-{0,1}\d+$';

C'est !~le NOTmatch regex. L'expression régulière ancre au début de la valeur avec ^, tient compte d'un signe moins facultatif avec -{0,1}, qui correspond à zéro ou à un caractère de trait d'union, puis assure que les caractères restants à la fin de la valeur sont tous des chiffres avec \d+$.

Toutes les valeurs XXqui ne correspondent pas à ce modèle seront récupérées, et vous pouvez trouver comment les gérer en mettant à jour la table ou en modifiant la usingpartie de votre fichier alter table.