Guida rapida per convertire la colonna string(varchar) in numero intero modificando il tipo di campo da string
a long
.
Ambiente
Adobe Campaign Classic Adobe Campaign
Problema
Colonna di una tabella che, sebbene sia attualmente di tipo string
, contiene numeri e contiene sempre numeri.
È possibile modificare il tipo di colonna da varchar
a int
e non perdere tutti i numeri che ci sono già?
Ad esempio, esiste un modo per eseguire il comando alter (come indicato di seguito) o qualsiasi altro approccio come:
alter table myTable alter column vColumn int;
Soluzioni
Soluzione 1:
int
.Soluzione 2 (preferito):
string
a long
.UPDATE DB STRUCTURE
, sostituisci ALTER
comando con il comando seguente ALTER
, che modifica il tipo di colonna in INTEGER
:ALTER TABLE NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;
https://www.postgresqltutorial.com/postgresql-change-column-type/
Soluzione 2 è l’opzione migliore. È esattamente come gestiamo il ALTER TABLE
per i clienti.
Questo ALTER TABLE
è anche un buon convalida del tipo di dati…. Se una delle righe contiene dati alfa, la conversione (ALTER TABLE
) non verrà recapitata… Se l'operazione ha esito positivo, è tutto pronto.
Analogamente, lo schema deve essere INT
, non string
e causa tutti i tipi di problemi di prestazioni che non possono essere risolti nemmeno con l'upsize di RDS di classe 3-4.
Se disponi di spazio, è consigliabile creare una tabella di backup (con indice) e impostarla come segue:
select * into backup_nmsrecipient from nmsrecipient;
// add indexes to get accurate simulation
\timing
Ad esempio:
ALTER TABLE backup_NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;
Di solito questo viene fatto su tabelle personalizzate che non bloccano, quindi guarda pg_stat_activity
.
Probabile se nmsRecipient
la tabella è di grandi dimensioni, verrà bloccata durante l'operazione.
PostgreSQL deve ricreare l’intera tabella (come un vuoto pieno).