PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Rails Migrations :tentative de modification du type de colonne de chaîne à entier

Je cite le manuel sur ALTER TABLE :

Une clause USING doit être fournie s'il n'y a pas d'implicite ou d'assignation de l'ancien vers le nouveau type.

Ce dont vous avez besoin est :

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

Ou plus court et plus rapide (pour les grandes tables) en une seule commande :

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

Cela fonctionne avec ou sans données tant que toutes les entrées sont convertibles en integer .
Si vous avez défini un DEFAULT pour la colonne, vous devrez peut-être la supprimer et la recréer pour le nouveau type.

Voici un article de blog expliquant comment procéder avec ActiveRecord.
Ou suivez les conseils de @mu dans le commentaire. Il connaît son Ruby. Je ne suis bon qu'avec PostgreSQL ici.