Alteração da coluna string(varchar) para inteiro

Guia rápido para alterar a coluna string(varchar) para inteiro alterando o tipo de campo de string para long.

Descrição description

Ambiente
Adobe Campaign Classic Adobe Campaign

Problema
Uma coluna em uma tabela que, embora seja atualmente do tipo string, ele contém números e sempre conterá números.

Há uma maneira de alterar o tipo de coluna de varchar para inte não perder todos os números que já existem?

Por exemplo, há uma maneira de executar o comando alter (como abaixo) ou qualquer outra abordagem como:

alter table myTable alter column vColumn int;

Resolução resolution

Soluções

Solução 1:

  1. Introduzir uma coluna temporária do tipo int.
  2. Atualize o banco de dados.
  3. Crie um fluxo de trabalho para copiar o valor da coluna original na nova coluna.
  4. Altere o tipo da coluna e atualize o banco de dados.
  5. Crie um fluxo de trabalho para copiar o valor da coluna introduzida na Etapa 1 para a coluna original.
  6. Exclua a coluna temporária e atualize o banco de dados.

Solução 2 (preferencial):

  1. Edite o esquema. Alterar o tipo de campo de string para long.
  2. Durante UPDATE DB STRUCTURE, substitua o ALTER comando com o abaixo ALTER , que altera o tipo de coluna para INTEGER:

ALTER TABELA NmsRecipient ALTER COLUMN sBoboardingPass TIPO INTEIRO USANDO sBoboardingPass::integer;

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

      

Solução 2 é a melhor opção.  É exatamente como lidamos com o ALTER TABLE para clientes.

Que ALTER TABLE também é um bom validador de tipo de dados.. Se uma das linhas tiver dados alfa, a conversão (ALTER TABLE) será rejeitada… Se tiver êxito, você está pronto.

O esquema da mesma forma deve ser INT, não stringe isso causa vários tipos de problemas de desempenho que não podem ser resolvidos mesmo com o aumento de tamanho do RDS de 3 a 4 classes.

Se houver espaço, é recomendável criar uma tabela de backup (com índice) e cronometrá-la:

select * into backup_nmsrecipient from nmsrecipient;

// add indexes to get accurate simulation

\timing

Por exemplo:

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

Geralmente, isso é feito em tabelas personalizadas que não são bloqueadas, portanto, observe pg_stat_activity.

Provável se a variável nmsRecipient for grande, ela será bloqueada durante essa operação.

O PostgreSQL precisa recriar a tabela inteira (como um vácuo total).

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