Erstellen einer PostgreSQL-Sequenz, um ein Feld (das ist nicht die ID des Datensatzes)
Arbeite ich an einer Ruby on Rails app. Wir sind mit einer PostgreSQL-Datenbank.
Gibt es eine Tabelle mit dem Namen scores
mit den folgenden Spalten:
Column | Type
--------------+-----------------------
id | integer
value | double precision
ran_at | timestamp
active | boolean
build_id | bigint
metric_id | integer
platform_id | integer
mode_id | integer
machine_id | integer
higher_better | boolean
job_id | integer
variation_id | integer
step | character varying(255)
Muss ich hinzufügen Sequenz zu job_id
(Hinweis: es ist kein Modell für job
).
Wie erstelle ich diese Reihenfolge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
CREATE SEQUENCE
:Fügen Sie dann eine Spalte standardmäßig
scores.job_id
:Wenn Sie wollen binden die Reihenfolge in einer Spalte (so dass es gelöscht wird, wenn die Spalte gelöscht wird), auch:
All dies kann ersetzt werden durch die Verwendung der pseudo-Datentyp
serial
für die Spaltejob_id
zu beginnen mit:Wenn die Tabelle bereits Zeilen enthält, können Sie festlegen wollen
SEQUENCE
auf den höchsten Wert und die fehlenden seriellen Werte in der Tabelle:Optional:
Nur die Verbleibende Differenz, eine
serial
Spalte gesetzt, um auchNOT NULL
. Können Sie oder können nicht wollen, zu:Aber Sie nicht nur ändern Sie den Typ eines bestehenden
integer
:serial
ist nicht eine tatsächliche Datentyp. Es ist nur ein notational Komfortfunktion fürCREATE TABLE
.In Postgres 10 oder höher betrachten
IDENTITY
Spalte:So, ich habe herausgefunden, wie dies zu tun ist mit ActiveRecord-Migrationen auf Ruby on Rails. Ich im Grunde verwendet, Erwin-Befehle und Hilfe von auf dieser Seite und steckte Sie in die migration-Dateien. Dies sind die Schritte:
1.
Geben Sie In das terminal:
2.
Bearbeiten Sie die migration-Dateien wie folgt:
20140709181616_create_job_id_sequence.rb :
20140709182313_add_job_id_sequence_to_scores.rb :
3.
Die Datenbank migrieren. In dem terminal-Typ: