Ambiente
Adobe Campaign Classic Adobe Campaign
Problema
Uma coluna em uma tabela que, embora seja do tipo atual string
, ele contém números e sempre conterá números.
Existe uma maneira de alterar o tipo de coluna de varchar
para int
e não perder todos os números que já existem?
Por exemplo, há uma maneira de executar o comando change (conforme abaixo) ou qualquer outra abordagem como:
alter table myTable alter column vColumn int;
Soluções
Solução 1:
int
.Solução 2 (preferencial):
string
para long
.UPDATE DB STRUCTURE
, substitua o ALTER
com o comando abaixo ALTER
, que altera o tipo de coluna para INTEGER
:ALTERAR A TABELA NmsRecipient ALTER COLUMN SBoEuropaPass TYPE INTEIER USANDO sBoEuropaPass::integer;
https://www.postgresqltutorial.com/postgresql-change-column-type/
O Solução 2 é a melhor opção. É exatamente como lidamos com o ALTER TABLE
para clientes do .
Essa ALTER TABLE
também é um bom validador de tipo de dados.. Se uma das linhas tiver dados alfa, a conversão (ALTER TABLE
) rejeitará… Se for bem-sucedido, então você está pronto.
O esquema deve ser INT
, não string
e causa todos os tipos de problemas de desempenho que não podem ser resolvidos mesmo com o redimensionamento de RDS de 3 a 4 classes.
Se tiver espaço, é recomendável criar uma tabela de backup (com índice) e hora:
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;
Normalmente, isso é feito em tabelas personalizadas que não são bloqueadas, portanto, assista pg_stat_activity
.
Provavelmente se a variável nmsRecipient
for grande, será bloqueada durante essa operação.
O PostgreSQL deve reconstruir a tabela inteira (como um vácuo completo).