Ich verwende Rails 4.2.3 mit einer PostGre-Datenbank. Ich möchte eine Spalte in meiner Datenbank eine Anzahl von Millisekunden speichern - beachten Sie, kein Zeitstempel, sondern eine Dauer in Millisekunden. Also habe ich meine Spalte wie so"Wert" erhalten 3000002000 "liegt außerhalb des Bereichs für den Typ"
time_in_ms | bigint
Allerdings, wenn ich einen Wert in Rails speichern gehen, erhalte ich die folgenden Fehler
ActiveRecord::StatementInvalid (PG::NumericValueOutOfRange: ERROR: value "3000002000" is out of range for type integer
: INSERT INTO "my_object_times" ("time_in_ms", "my_object_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"):
app/controllers/my_objects_controller.rb:31:in `update'
Es würde die Zahl erscheinen, „3000002000“ kleiner ist als der maximale Wert für die Spalte (die ich lese ist "9223372036854775807"), also frage ich mich, was sonst noch schief läuft und wie ich es beheben kann.
Edit: zusätzliche Informationen zu liefern, in meiner db/schema.rb Datei wird die Säule in Frage thusly beschrieben ...
create_table "my_object_times", force: :cascade do |t|
...
t.integer "time_in_ms", limit: 8
Edit 2: Hier ist die Ausgabe von erstellen in Tabelle PSQL
CREATE TABLE my_object_times (
id integer NOT NULL,
first_name character varying,
last_name character varying,
time_in_ms bigint,
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
name character varying,
age integer,
city character varying,
state_id integer,
country_id integer,
overall_rank integer,
age_group_rank integer,
gender_rank integer
);
Überprüfen Sie einmal den Spaltendatentyp in der schema.rb-Datei erneut? –
Die Fehlermeldung weist darauf hin, dass die Spalte tatsächlich ein 'int' ist. Was sagt dein 'schema.rb'? Was sagt '\ d my_object_times' aus' psql'? –
Als Randnotiz sollten Sie die Dauer mit dem Datentyp 'interval' speichern, keine' bigint'. Es ist intern eine 64-Bit-Ganzzahl, wie 'bigint', aber wenn Sie' interval' verwenden, ist es semantisch nützlicher und Sie erhalten Zugriff auf alle Arten von handlichen Operatoren. –