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)
J'essaie simplement de convertir une colonne avec character varying
le type de données integer
en 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
Sur la base de l'erreur que vous obtenez, il semble que vous ayez des valeurs XX
qui 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 NOT
match 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 XX
qui 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 using
partie de votre fichier alter table
.