Ich schreibe eine Migration, um eine Nicht-Rails-Anwendung in das richtige Format für Schienen zu konvertieren - eine der Tabellen hat aus irgendeinem Grund kein automatisches Inkrement für die ID-Spalte. Gibt es eine schnelle Möglichkeit, es während einer Migration einzuschalten, vielleicht mit change_column
oder etwas?Erstelle fehlende Autoinkrementattribute mit Schienenmigration
Antwort
Sie müssen eine SQL-Anweisung ausführen.
statement = "ALTER TABLE `users` CHANGE `id` `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT"
ActiveRecord::Base.connection.execute(statement)
Beachten Sie, dass dies nur ein Beispiel ist. Die endgültige SQL-Anweisungssyntax hängt von der Datenbank ab.
Wenn Sie auf Postgesql sind, wird eine einzige Anfrage es nicht schaffen. Sie müssen eine neue Sequenz in der Datenbank erstellen.
create sequence users_id_seq;
dann die id-Spalte zu Ihrer Tabelle hinzufügen
alter table users
add id INT UNIQUE;
Dann
alter table users
alter column id
set default nextval('users_id_seq');
Dann bevölkern die id-Spalte den Standardwert für die ID festgelegt. Dies kann sehr lang sein, wenn die Tabelle viele Zeilen
update users
set id = nextval('users_id_seq');
this helps postgresql Benutzer hat ...
Danke! Das ist sehr hilfreich! –
Die Postgres answer by @jlfenaux verpasst dem serial
-Typ, der für Sie automatisch alle es tut:
ALTER TABLE tbl add tbl_id serial;
- 1. Schienenmigration für Änderungsspalte
- 2. Erstelle fehlende Verzeichnisse in ftplib storbinary
- 3. Können wir Autoinkrementattribute in Kerndaten definieren?
- 4. Wie erstelle ich eine Schienenmigration, um Präzision zu entfernen/zu ändern und Dezimal zu skalieren?
- 5. Schemafelder, die auf einer Schienenmigration bestellen
- 6. Verwenden von Grails/Hibernate mit alten Datenbanken. Wie erstelle ich fehlende Funktionen?
- 7. Schienenmigration eines Arrays in einem Modell funktioniert nicht
- 8. Ist es möglich, einen Index mithilfe einer Schienenmigration umzubenennen?
- 9. Schienenmigration fügt dem vorhandenen booleschen Feld Standard-NULL-Eigenschaften hinzu
- 10. Fehlende Symbole in QTabWidget
- 11. TeamCity mit NuGet, fehlende Referenzen
- 12. Erstelle Datei mit template.erb
- 13. Erstelle Bearbeitungsformular mit Bootstrap
- 14. Fehlende ionic.project Datei
- 15. fehlende Variable
- 16. Fehlende Get-Methode in V6.0.10.0
- 17. Fehlende Cachedateifehler?
- 18. fehlende Dateien nach Git Merge
- 19. So fügen Sie einen Fremdschlüssel in der Schienenmigration mit einem anderen Tabellennamen hinzu
- 20. Fehlende anmerkungen.jar
- 21. Bash: Fehlende ']'
- 22. Fehlende Warteoperatoren?
- 23. Schienen 2.3.9 fehlende POST Nutzlast
- 24. Erstelle Json mit Flight php
- 25. Erstelle .app/.dmg mit Esky
- 26. Erstelle Fenster mit GetConsoleScreenBufferInfo Methode
- 27. Erstelle benutzerdefinierte XML mit Django
- 28. Fehlende adActivity mit android: configChanges in AndroidManifest.xml
- 29. Fehlende ___emutls_get_address mit gcc-4.7 und openMP
- 30. Pandas berechnen CAGR mit Slicing (fehlende Werte)
dank viel @Simone Carletti, verschwendet ganzen Tag um das Problem zu lösen, aber es ist nun gelöst und dank DGM auch für postin g Frage speziell für meinen Fall. Kannst du mir beide eine Idee zum Schreiben von Stored Procedures in Rails 4.1 auf originelle Weise geben, in der Hoffnung, dass ihr mir wieder helfen könnt? Glückliche Kodierung. – roarfromror
Ich weiß nicht viel Aktivität in Schienen mit gespeicherten Prozeduren - einige Ecken der Schienen haben wenig Nutzen für die mächtigeren Seiten von SQL, andere wissen einfach nicht ... sowieso, zumindest könnte man verwenden Dieselbe Form, um das SQL zu schreiben, um die gespeicherte Prozedur zu erstellen. – DGM