Wie könnte Sie Klonen einer Datenbank-Tabelle über Rails migration?
Ich möchte eine migration erstellen Sie einen Klon einer vorhandenen Tabelle einfach suffixing der name, darunter alle Indizes aus der ursprünglichen Tabelle.
So gibt es eine "snapshots" - Tabelle, und ich möchte "snapshots_temp" als eine exakte Kopie der Tabelle (nicht die Daten, nur das schema für die Tabelle, aber inklusive der Indizes).
Konnte ich einfach kopieren und fügen Sie den block aus dem schema.rb-Datei und manuell umbenennen.
Aber ich bin nicht sicher, ob die Zeit, die diese migration wird angewendet, wenn die definition von schema.rb wird noch genauer. Ein anderer Entwickler könnte sich geändert haben, die Tabelle und ich will nicht zu haben, um update-mein Skript für die migration.
So, wie vielleicht bekomme ich das schema der Tabelle zur Laufzeit? Im wesentlichen, wie geht 'rake schema:dump' reverse Engineering der Tabelle, so kann ich das gleiche tun in meinem migration? (aber eine änderung der name der Tabelle).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit reinem SQL. Dies zu tun, was Sie wollen:
CREATE TABLE new_tbl (LIKE orig_tbl INCLUDING DEFAULTS INCLUDING INDEXES);
oderINCLUDING ALL
Klonen allesschema.rb
? EDIT - Antwort auf meine eigene Frage: ja -- stackoverflow.com/questions/3815447/...In Rails 4 & PostgreSQL, erstellen Sie eine neue migration und einfügen:
Dadurch wird der Klon mit der genauen Struktur der original-Tabelle, und füllen Sie die neue Tabelle mit den alten Werten.
Mehr info: http://www.postgresql.org/docs/9.0/static/sql-createtableas.html
Wird dies tun. Es ist nicht perfekt, weil es nicht kopieren Tabelle Optionen oder Indizes. Wenn Sie eine Tabelle Optionen festgelegt werden Sie, um Sie hinzuzufügen, um diese migration manuell.
Kopieren von Indizes müssen Sie formulieren Sie eine SQL-Abfrage, um Sie auszuwählen, und dann verarbeiten Sie zu neuen add_index Richtlinien. Das ist ein wenig über meine Kenntnisse. Aber das funktioniert für das kopieren der Struktur.
Sieht es aus wie diese Logik ist eingewickelt in ActiveRecord::SchemaDumper aber es nur macht ein all-in-one "- dump" - Methode, und Sie kann nicht dump nur auf eine bestimmte Tabelle (die "Tisch" - Methode ist privat).
Kopieren Sie die Tabellen, die Eingabe von Ihrem Vorhaben
db/schema.rb
gerade in der migration. Ändern Sie einfach den Namen der Tabelle und Ihrem guten zu gehen.