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 :

  1. Führen Sie eine temporäre Spalte vom Typ int ein.
  2. Aktualisieren Sie die Datenbank.
  3. Erstellen Sie einen Workflow, um den Wert aus der ursprünglichen Spalte in die neue Spalte zu kopieren.
  4. Ändern Sie den Typ der Spalte und aktualisieren Sie die Datenbank.
  5. Erstellen Sie einen Workflow, um den Wert aus der in Schritt 1 eingeführten Spalte in die ursprüngliche Spalte zu kopieren.
  6. Löschen Sie die temporäre Spalte und aktualisieren Sie die Datenbank.

Lösung 2 (bevorzugt):

  1. Bearbeiten Sie das Schema. Ändern Sie den Feldtyp von string in long.
  2. Ersetzen Sie während der UPDATE DB STRUCTURE den ALTER-Befehl durch den folgenden ALTER-Befehl, der den Spaltentyp in INTEGER ä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.

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