Cambiando la columna cadena (varchar) a entera

Guía rápida para cambiar la columna cadena (varchar) a entera cambiando el tipo de campo de string hasta long.

Descripción description

Entorno
Adobe Campaign Classic Adobe Campaign

Problema
Una columna de una tabla que, aunque es del tipo actualmente string, contiene números y siempre contendrá números.

¿Hay alguna manera de cambiar el tipo de columna de varchar hasta int, y no perder todos los números que ya están allí?

Por ejemplo, ¿hay una forma de ejecutar alter command (como se muestra a continuación) o cualquier otro enfoque como:

alter table myTable alter column vColumn int;

Resolución resolution

Soluciones

Solución 1:

  1. Introducir una columna temporal de tipo int.
  2. Actualizar la base de datos.
  3. Cree un flujo de trabajo para copiar el valor de la columna original en la nueva columna.
  4. Cambie el tipo de la columna y actualice la base de datos.
  5. Cree un flujo de trabajo para copiar el valor de la columna introducida en el paso 1 en la columna original.
  6. Elimine la columna temporal y actualice la base de datos.

Solución 2 (preferida):

  1. Edite el esquema. Cambiar el tipo de campo de string hasta long.
  2. Durante UPDATE DB STRUCTURE, sustituya el ALTER con el siguiente comando ALTER , que cambia el tipo de columna a INTEGER:

ALTER TABLE NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;

https://www.postgresqltutorial.com/postgresql-change-column-type/

      

Solución 2 es la mejor opción.  Es exactamente como manejamos el problema ALTER TABLE para clientes de.

Que ALTER TABLE también es un buen validador de tipos de datos…. Si una de las filas tiene datos alfa, la conversión (ALTER TABLE) rebotará… Si tiene éxito, entonces ya está todo listo.

El esquema de forma similar debería ser INT, no stringy causa todo tipo de problemas de rendimiento que no se pueden resolver ni siquiera con la conversión a SQL Server de 3 a 4 clases.

Si tiene espacio, se recomienda crear una tabla de copia de seguridad (con índice) y cronometrarla:

select * into backup_nmsrecipient from nmsrecipient;

// add indexes to get accurate simulation

\timing

Por ejemplo:

ALTER TABLE backup_NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;

Normalmente, esto se hace en tablas personalizadas que no se bloquean, así que observe pg_stat_activity.

Probablemente si la variable nmsRecipient la tabla es grande, se bloqueará durante esta operación.

PostgreSQL debe volver a generar toda la tabla (como un vacío completo).

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f