Tengo una tabla pequeña y cierto campo contiene el tipo " carácter variable ". Estoy tratando de cambiarlo a " Entero " pero da un error de que no es posible la conversión.
¿Hay alguna forma de evitar esto o debería crear otra tabla y llevar los registros a ella mediante una consulta?
El campo contiene solo valores enteros.
SQL error: ERROR: column "MID" cannot be cast to type integer
SELECT
listas con nombres explícitos , sin depender de las posiciones ordinales de las columnas. Dicho esto, el enfoque dado en las respuestas preservará la posición de la columna.Respuestas:
No hay conversión implícita (automática) desde
text
ovarchar
haciainteger
(es decir, no puede pasar unvarchar
a una función esperandointeger
o asignar unvarchar
campo ainteger
uno), por lo que debe especificar una conversión explícita utilizando ALTER TABLE ... ALTER COLUMN ... TYPE. .. USANDO :Tenga en cuenta que puede tener espacios en blanco en sus campos de texto; en ese caso, use:
para quitar espacios en blanco antes de convertir.
Esto debería ser obvio por un mensaje de error si el comando se ejecutó
psql
, pero es posible que PgAdmin-III no muestre el error completo. Esto es lo que sucede si lopsql
pruebo en PostgreSQL 9.2:Gracias @muistooshort por agregar el
USING
enlace.Ver también esta pregunta relacionada ; se trata de migraciones de Rails, pero la causa subyacente es la misma y se aplica la respuesta.
Si el error persiste, puede estar relacionado no con los valores de la columna, pero los índices sobre esta columna o los valores predeterminados de la columna pueden fallar en la conversión de texto. Los índices deben descartarse antes de ALTERAR COLUMNA y recrearse después. Los valores predeterminados deben cambiarse adecuadamente.
fuente
psql
mucho más rápido y fácil. Hace un tiempo escribí un poco sobre la usabilidad de PgAdmin con respecto a la copia de seguridad y restauración: blog.ringerc.id.au/2012/05/…Esto funcionó para mí.
cambiar la columna varchar a int
tiene:
cambiado a
fuente
Puedes hacerlo como:
o prueba esto:
Si está interesado en obtener más información sobre este tema, lea este artículo: https://kolosek.com/rails-change-database-column
fuente
Prueba esto, funcionará seguro.
Al escribir migraciones de Rails para convertir una columna de cadena en un entero, generalmente diría:
Sin embargo, PostgreSQL se quejará:
La "pista" básicamente le dice que debe confirmar que desea que esto suceda y cómo se convertirán los datos. Solo di esto en tu migración:
Lo anterior imitará lo que sabe de otros adaptadores de bases de datos. Si tiene datos no numéricos, los resultados pueden ser inesperados (después de todo, se está convirtiendo en un número entero).
fuente
PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: ""
se produce un errorTengo el mismo problema. Entonces me di cuenta de que tenía un valor de cadena predeterminado para la columna que intentaba modificar. Al eliminar el valor predeterminado, el error desapareció :)
fuente
Si accidentalmente o no mezcló números enteros con datos de texto, primero debe ejecutar el siguiente comando de actualización (si no arriba, la tabla alter fallará):
fuente
regexp_replace(col_name, '[^0-9.]','','g')
si está tratando de quitar caracteres no deseados y espacios en blanco. Se necesitaría algo un poco más sofisticado si se desea conservarNaN
yInf
e10E42
notación científica, sin embargo.Si está trabajando en un entorno de desarrollo (o en el entorno de producción, puede ser una copia de seguridad de sus datos), primero borre los datos del campo DB o establezca el valor en 0.
Después de eso para ejecutar la consulta a continuación y después de ejecutar con éxito la consulta, a la migración de esquema y luego ejecutar el script de migración.
Creo que te ayudará.
fuente
Tuve el mismo problema. Empecé a restablecer el valor predeterminado de la columna.
fuente