Spalte „String (varchar)“ wird in eine Ganzzahl geändert
Eine Kurzanleitung zum Ändern der Spalte „Zeichenfolge (varchar)“ in eine Ganzzahl durch Ändern des Feldtyps von string in long.
Beschreibung description
Umgebungen
- Adobe Campaign Classic (ACC)
- Adobe Campaign (AC)
Problem
Eine Spalte in einer Tabelle, die zwar derzeit vom Typ string ist, jedoch Zahlen enthält und immer Zahlen enthält.
Gibt es eine Möglichkeit, den Typ der Spalte von varchar in int zu ändern, ohne alle bereits vorhandenen Zahlen zu verlieren?
Gibt es beispielsweise eine Möglichkeit, den Befehl „alter“ (wie unten) oder einen anderen Ansatz wie den folgenden auszuführen:
alter table myTable alter column vColumn int;
Auflösung resolution
Lösungen
Lösung :
- Führen Sie eine temporäre Spalte vom Typ
intein. - Aktualisieren Sie die Datenbank.
- Erstellen Sie einen Workflow, um den Wert aus der ursprünglichen Spalte in die neue Spalte zu kopieren.
- Ändern Sie den Typ der Spalte und aktualisieren Sie die Datenbank.
- Erstellen Sie einen Workflow, um den Wert aus der in Schritt 1 eingeführten Spalte in die ursprüngliche Spalte zu kopieren.
- Löschen Sie die temporäre Spalte und aktualisieren Sie die Datenbank.
Lösung 2 (bevorzugt):
- Bearbeiten Sie das Schema. Ändern Sie den Feldtyp von
stringinlong. - Ersetzen Sie während der
UPDATE DB STRUCTUREdenALTER-Befehl durch den folgendenALTER-Befehl, der den Spaltentyp inINTEGERändert:
ALTER TABLE NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;
https://neon.tech/postgresql/postgresql-tutorial/postgresql-change-column-type
Lösung 2 ist die beste Option. Genau so gehen wir mit dem ALTER TABLE für Kunden um.
Dieser ALTER TABLE ist auch ein netter Datentyp-Validator…. Wenn eine der Zeilen Alpha-Daten enthält, springt die Konvertierung (ALTER TABLE)… Wenn es erfolgreich ist, sind Sie bereit.
Das Schema sollte auf ähnliche Weise INT, nicht string werden und verursacht alle Arten von Leistungsproblemen, die auch bei einer RDS-Erweiterung mit 3-4 Klassen nicht gelöst werden können.
Wenn Sie über Speicherplatz verfügen, wird empfohlen, eine Sicherungstabelle (mit Index) zu erstellen und diese zeitlich zu planen:
select * into backup_nmsrecipient from nmsrecipient;
// add indexes to get accurate simulation
\timing
z. B.:
ALTER TABLE backup_NmsRecipient ALTER COLUMN sBoardingPass TYPE INTEGER USING sBoardingPass::integer;
Normalerweise erfolgt dies für benutzerdefinierte Tabellen, die nicht blockieren. Achten Sie daher auf pg_stat_activity.
Die nmsRecipient wird während dieses Vorgangs wahrscheinlich blockiert, wenn sie groß ist.
PostgreSQL muss die gesamte Tabelle (wie ein volles Vakuum) neu erstellen.