PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rails-Migrationen:Es wurde versucht, den Spaltentyp von String in Integer zu ändern

Ich zitiere das Handbuch zu ALTER TABLE :

Eine USING-Klausel muss bereitgestellt werden, wenn es keine implizite oder Zuordnungsumwandlung vom alten zum neuen Typ gibt.

Was Sie brauchen ist:

ALTER TABLE listings ALTER longitude TYPE integer USING longitude::int;
ALTER TABLE listings ALTER latitude  TYPE integer USING latitude::int;

Oder kürzer und schneller (für große Tabellen) in einem Befehl:

ALTER TABLE listings ALTER longitude TYPE integer USING longitude::int
                    ,ALTER latitude  TYPE integer USING latitude::int;

Dies funktioniert mit oder ohne Daten solange alle Einträge in integer konvertierbar sind .
Falls Sie einen DEFAULT definiert haben für die Spalte müssen Sie diese möglicherweise löschen und für den neuen Typ neu erstellen.

Hier ist ein Blog-Artikel darüber, wie man das mit ActiveRecord macht.
Oder folgen Sie den Ratschlägen von @mu im Kommentar. Er kennt seinen Rubin. Ich kenne mich hier nur mit PostgreSQL aus.