Par erreur, j'ai supprimé l'option autoincrement du champ id de ma table. Quelqu'un peut-il me dire comment je peux réinsérer l'option de l'auto-incrimination à travers la migration?Ajouter l'incrément automatique à la colonne de la clé primaire dans Rails
13
A
Répondre
18
Essayez:
change_column :my_table, :id, :primary_key
ou
my_table.change_column :id, :primary_key
Certains adaptateurs de base de données Rails ne peut pas vous laisser appeler change_column
sur la clé primaire. Si tel est le cas, alors vous pouvez toujours appeler execute
pour effectuer le changement en utilisant directement SQL:
MySQL:
execute('ALTER TABLE "my_table" CHANGE "id" "id"
bigint DEFAULT NULL auto_increment PRIMARY KEY')
PostgreSQL (méthode 1):
max_id = execute(%%Q{SELECT id FROM "my_table" ORDER BY "id" DESC
LIMIT 1}).to_a.first
execute(%%Q{CREATE SEQUENCE "my_table_id_seq" START #{max_id+1}})
execute(%%Q{ALTER TABLE "my_table" ALTER COLUMN "id"
TYPE bigint})
execute(%%Q{ALTER TABLE "my_table" ALTER COLUMN "id"
SET DEFAULT nextval('my_table_id_seq'::regclass)})
execute(%%Q{ALTER TABLE "my_table" ADD PRIMARY KEY("id")})
PostgreSQL (méthode 2) :
max_id = execute(%%Q{SELECT "id" FROM "my_table" ORDER BY "id" DESC
LIMIT 1}).to_a.first
execute(%%Q{ALTER TABLE "my_table" RENAME COLUMN "id" TO "id_orig"})
execute(%%Q{ALTER TABLE "my_table" ADD COLUMN "id" bigserial NOT NULL})
execute(%%Q{UPDATE "my_table" SET "id"="id_orig"})
execute(%%Q{ALTER SEQUENCE "my_table_id_seq" RESTART #{max_id+1}})
execute(%%Q{ALTER TABLE "my_table" DROP COLUMN "id_orig"})
Si vous ne souhaitez pas utiliser bigint
/bigserial
(64 bits), utilisez int(11)
/integer
/serial
à la place.
1
Votre code Postgres ne fonctionne pas, il est impossible d'utiliser serial ou bigserial dans une instruction ALTER TABLE. SQL correcte pour PostgreSQL est
ALTER TABLE table ALTER COLUMN id TYPE int
ALTER TABLE table ALTER COLUMN id TYPE bigint
3
Je n'ai pas vérifié les autres versions, mais on Rails 5, vous pouvez simplement définir l'option auto_increment
:
change_column :table_name, :id, :int, null: false, unique: true, auto_increment: true
Ou si vous voulez un bigint:
change_column :table_name, :id, :bigint, null: false, unique: true, auto_increment: true
Questions connexes
- 1. SubSonic Clé primaire de colonne multiple
- 2. Insertion d'une clé primaire à incrémentation automatique dans une autre table (pour la joindre plus tard)
- 3. Comment définir le point de départ de la colonne de clé primaire (ID) dans Postgres via une migration de rails
- 4. Récupère la clé primaire d'une nouvelle entrée
- 5. Obtenir le nom de la clé primaire de la table
- 6. Clé primaire de la ligne insérée jdbc?
- 7. clé primaire entière pour la réplication
- 8. Pourrions-nous avoir un nom personnalisé de la colonne de clé primaire dans Fluent NHibernate?
- 9. violation de clé primaire si sensible à la casse
- 10. SqlBulkCopy dans la table avec la clé primaire composite
- 11. Erreur après la modification de la clé primaire de PKID à l'ID utilisateur
- 12. Est-il possible de modifier la valeur d'un champ de clé primaire d'entier auto-incrémenté?
- 13. Comment puis-je insérer dans une table et récupérer la valeur de clé primaire?
- 14. Mise à jour de la table avec la clé primaire composite à l'aide de LINQ
- 15. mettre à jour la clé primaire des tables maître et enfant pour les grandes tables
- 16. Subsonic erreur clé primaire
- 17. Clé primaire composée
- 18. Ignorer les conflits de clé primaire avec la copie SQL
- 19. Magento ajouter la colonne de gauche dans la page d'accueil
- 20. Sql Type de données pour la clé primaire - SQL Server?
- 21. REJOIGNEZ Performance: clé composite par rapport BigInt clé primaire
- 22. Affectation d'une valeur d'incrémentation automatique à une nouvelle colonne dans Oracle
- 23. Violation de la clé primaire dans la base de données restaurée
- 24. comment modifier table de clé primaire composite
- 25. NHibernate avec la clé primaire et les relations
- 26. SQL Server 2008: trouvez la clé primaire/étrangère dans la table?
- 27. Clé primaire Croissant et décroissant
- 28. Laisser la base de données choisir la clé primaire dans nhibernate
- 29. Modèle de commentaire automatique sur la migration dans Rails?
- 30. Trouver la clé primaire créée par Hibernate JPA
Thnx pour votre réponse, Mais j'ai déjà fait change_column sur certaines des clés primaires. Peut-être que c'est pourquoi il a supprimé l'option Auto Increment déjà existante de l'option clé primaire. –
Pas de problème. Voir ma mise à jour – vladr